Это сообщение от Себастьяна Гоасгуена из блога Citrix.
Играем с Basho Riak CS Object Store
CloudStack имеет дело с вычислительной стороной IaaS, сторона хранения для большинства из нас в наши дни состоит из масштабируемого, отказоустойчивого хранилища объектов, оставленного другому программному обеспечению. Ceph во главе с inktank и RiakCS из Basho — два самых обсуждаемых предметных магазина в наши дни. В этом посте мы рассмотрим RiakCS и рассмотрим его быстро. CloudStack интегрируется с RiakCS для вторичного хранения, и вместе они могут предложить EC2 и настоящий интерфейс S3, поддерживаемый масштабируемым хранилищем объектов. Так и здесь.
Хотя RiakCS ( облачное хранилище) можно рассматривать как внутреннюю реализацию S3, он основан на Riak. Riak — это высокодоступная распределенная база данных NoSQL . Использование согласованного алгоритма хеширования позволяет Riak повторно балансировать данные, когда узел исчезает (например, происходит сбой), а когда появляются узлы (например, увеличивается емкость), он также позволяет управлять репликацией данных с использованием принципа возможной согласованности, типичного крупномасштабных распределенных систем хранения, которые предпочитают доступность по согласованности.
Чтобы получить функционирующее хранилище RiakCS, нам нужны Riak, RiakCS и Stanchion. Stanchion — это интерфейс, который сериализует HTTP-запросы к RiakCS.
Вкус Риака
Для начала давайте поиграем с Riak и создадим кластер на нашей локальной машине. У Basho есть отличная документация , самое сложное будет установить Erlang (и я имею в виду 2-минутную сделку), но опять же документы очень полезны и дают пошаговые инструкции практически для любой ОС.
Мне не нужно пересоздавать пошаговые инструкции, поскольку документы очень хороши, но суть в том, что с помощью краткого руководства мы можем создать кластер Riak на «localhost». Мы собираемся запустить пять узлов Riak (мы могли бы начать больше) и объединить их в кластер. Это так просто, как:
bin/riak start bin/riak-admin cluster join [email protected]
Где «dev1» был первым узлом Riak. Создание этого кластера перебалансирует кольцо:
================================= Membership ================================== Status Ring Pending Node ------------------------------------------------------------------------------- valid 100.0% 20.3% '[email protected]' valid 0.0% 20.3% '[email protected]' valid 0.0% 20.3% '[email protected]' valid 0.0% 20.3% '[email protected]' valid 0.0% 18.8% '[email protected]'
Команда «riak-admin» — это хороший CLI для управления кластером. Мы можем проверить членство только что созданного кластера, через некоторое время кольцо перебалансируется до ожидаемого состояния.
dev1/bin/riak-admin member-status ================================= Membership ================================== Status Ring Pending Node ------------------------------------------------------------------------------- valid 62.5% 20.3% '[email protected]' valid 9.4% 20.3% '[email protected]' valid 9.4% 20.3% '[email protected]' valid 9.4% 20.3% '[email protected]' valid 9.4% 18.8% '[email protected]' ------------------------------------------------------------------------------- Valid:5 / Leaving:0 / Exiting:0 / Joining:0 / Down:0 dev1/bin/riak-admin member-status ================================= Membership ================================== Status Ring Pending Node ------------------------------------------------------------------------------- valid 20.3% -- '[email protected]' valid 20.3% -- '[email protected]' valid 20.3% -- '[email protected]' valid 20.3% -- '[email protected]' valid 18.8% -- '[email protected]' -------------------------------------------------------------------------------
Затем вы можете протестировать кластер, поместив изображение, как описано в документации, и загрузив его в браузер (HTTP GET):
curl -XPUT http://127.0.0.1:10018/riak/images/1.jpg -H "Content-type: image/jpeg" --data-binary @image_name_.jpg
Откройте браузер для «http://127.0.0.1:10018/riak/images/1.jpg». Это так же просто, как 1, 2, 3.
Установка всего на Ubuntu 12.04
Чтобы двигаться вперед и построить полное S3-совместимое хранилище объектов, давайте настроим все на машине с Ubuntu 12.04. Вернитесь к установке «riak», получите ключи репозитория и настройте репозиторий «basho.list»:
curl http://apt.basho.com/gpg/basho.apt.key | sudo apt-key add - bash -c "echo deb http://apt.basho.com $(lsb_release -sc) main > /etc/apt/sources.list.d/basho.list" apt-get update
И возьмите «riak», «riak-cs» и «опору». Я не уверен, почему, но их замечательные документы заставляют вас скачивать .debs отдельно и использовать «dpkg».
apt-get install riak riak-cs stanchion
Убедитесь, что двоичные файлы находятся на вашем пути с «какими riak», «какими riak-cs» и «какими стойками», вы должны найти все в «/ usr / sbin». Вся конфигурация будет в «/ etc / riak», «/ etc / riak-cs» и «/ etc / stanchion», особенно в «app.config», который мы собираемся изменить перед тем, как начать все. Обратите внимание, что все двоичные файлы имеют хорошее описание использования, в том числе консоль, метод ping и перезапуск:
Usage: riak {start | stop| restart | reboot | ping | console | attach | attach-direct | ertspath | chkconfig | escript | version | getpid | top [-interval N] [-sort reductions|memory|msg_q] [-lines N] }
конфигурация
Прежде чем что-либо запускать, мы собираемся настроить каждый компонент, что означает редактирование файлов «app.config» в каждом соответствующем каталоге. Для «riak-cs» я только удостоверился, что установил «{anonymous_user_creation, true}», я ничего не сделал для настройки «стойки», так как я использовал порты по умолчанию и запускал все на «localhost» без «ssl». Просто убедитесь, что вы не запускаете никакое другое приложение на порту «8080», так как «riak-cs» будет использовать этот порт по умолчанию. Для настройки «riak» см. Документацию , он устанавливает другой бэкэнд, чем тот, который мы использовали на этапе «дегустации». ? После выполнения всех этих настроек вы сможете запустить все три компонента:
riak start riak-cs start stanchion start
Вы можете «пинговать» каждый компонент и проверять консоль с помощью «riak ping», «riak-cs ping» и «pingchion ping», я позволю вам выяснить доступ к консоли. Создайте пользователя-администратора для «riak-cs»:
curl -H 'Content-Type: application/json' -X POST http://localhost:8080/riak-cs/user \ --data '{"email":" [email protected]", "name":"admin user"}'
Если это возвращается успешно, это должно быть хорошим признаком того, что ваша установка работает правильно. В ответе мы узнали API и секретные ключи:
{"email":" [email protected]", "display_name":"foobar", "name":"admin user", "key_id":"KVTTBDQSQ1-DY83YQYID", "key_secret":"2mNGCBRoqjab1guiI3rtQmV3j2NNVFyXdUAR3A==", "id":"1f8c3a88c1b58d4b4369c1bd155c9cb895589d24a5674be789f02d3b94b22e7c", "status":"enabled"}
Давайте возьмем их и поместим в наш конфигурационный файл «riak-cs», в котором нужно установить переменные «admin_key» и «admin_secret». Затем перезапустите с помощью «riak-cs restart». Не забудьте также добавить их в конфигурационный файл «стойка» «/etc/stanchion/app.config» и перезапустить «Перезапуск стойки».
Использование нашего нового облачного хранилища с Boto
Поскольку Riak-CS является S3-совместимым облачным хранилищем, мы должны иметь возможность использовать S3-клиент, такой как Python Boto, для создания сегментов и хранения данных. Давай попробуем. Конечно, вам понадобится Boto: «apt-get install python-boto», а затем откройте интерактивную оболочку «python». Импортируйте модули и создайте соединение с «riak-cs»:
>>> from boto.s3.key import Key >>> from boto.s3.connection import S3Connection >>> from boto.s3.connection import OrdinaryCallingFormat >>> apikey='KVTTBDQSQ1-DY83YQYID' >>> secretkey='2mNGCBRoqjab1guiI3rtQmV3j2NNVFyXdUAR3A==' >>> cf=OrdinaryCallingFormat() >>> conn=S3Connection(aws_access_key_id=apikey,aws_secret_access_key=secretkey, is_secure=False,host='localhost',port=8080,calling_format=cf)
Теперь вы можете перечислить ведро, которое сначала будет пустым. Затем создайте корзину и сохраните в ней содержимое с различными ключами:
>>> conn.get_all_buckets() [] >>> bucket=conn.create_bucket('riakbucket') >>> k=Key(bucket) >>> k.key='firstkey' >>> k.set_contents_from_string('Object from first key') >>> k.key='secondkey' >>> k.set_contents_from_string('Object from second key') >>> b=conn.get_all_buckets()[0] >>> k=Key(b) >>> k.key='secondkey' >>> k.get_contents_as_string() 'Object from second key' >>> k.key='firstkey' >>> k.get_contents_as_string() 'Object from first key'
И это все, S3-совместимое хранилище объектов, поддерживаемое распределенной базой данных NoSQL, которая использует согласованное хеширование, все это в Erlang. Автоматизируйте все это с рецептом шеф-повара . Подключите это к облаку, совместимому с CloudStack EC2, используйте его в качестве вторичного хранилища для хранения шаблонов или сделайте его публичным предложением, и у вас появится второй компонент Cloud: хранилище. Сладкий … В моем следующем посте я покажу вам, как использовать его с CloudStack.