Статьи

Взгляд на Riak CS от Basho

Это сообщение от Себастьяна Гоасгуена из блога 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 dev1@127.0.0.1

Где «dev1» был первым узлом Riak. Создание этого кластера перебалансирует кольцо:

    ================================= Membership ==================================
    Status     Ring    Pending    Node
    -------------------------------------------------------------------------------
    valid     100.0%     20.3%    'dev1@127.0.0.1'
    valid       0.0%     20.3%    'dev2@127.0.0.1'
    valid       0.0%     20.3%    'dev3@127.0.0.1'
    valid       0.0%     20.3%    'dev4@127.0.0.1'
    valid       0.0%     18.8%    'dev5@127.0.0.1'

Команда «riak-admin» — это хороший CLI для управления кластером. Мы можем проверить членство только что созданного кластера, через некоторое время кольцо перебалансируется до ожидаемого состояния.

    dev1/bin/riak-admin member-status
    ================================= Membership ==================================
    Status     Ring    Pending    Node
    -------------------------------------------------------------------------------
    valid      62.5%     20.3%    'dev1@127.0.0.1'
    valid       9.4%     20.3%    'dev2@127.0.0.1'
    valid       9.4%     20.3%    'dev3@127.0.0.1'
    valid       9.4%     20.3%    'dev4@127.0.0.1'
    valid       9.4%     18.8%    'dev5@127.0.0.1'
    -------------------------------------------------------------------------------
    Valid:5 / Leaving:0 / Exiting:0 / Joining:0 / Down:0
   
    dev1/bin/riak-admin member-status
    ================================= Membership ==================================
    Status     Ring    Pending    Node
    -------------------------------------------------------------------------------
    valid      20.3%      --      'dev1@127.0.0.1'
    valid      20.3%      --      'dev2@127.0.0.1'
    valid      20.3%      --      'dev3@127.0.0.1'
    valid      20.3%      --      'dev4@127.0.0.1'
    valid      18.8%      --      'dev5@127.0.0.1'
    -------------------------------------------------------------------------------

Затем вы можете протестировать кластер, поместив изображение, как описано в документации, и загрузив его в браузер (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":"
 foobar@example.com", "name":"admin user"}'

Если это возвращается успешно, это должно быть хорошим признаком того, что ваша установка работает правильно. В ответе мы узнали API и секретные ключи:

    {"email":"
 foobar@example.com",
     "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.