Установка и настройка Riak 2 и Python 3 на сервере Ubuntu 14.04

Riak – это нереляционное хранилище данных noSQL, сосредоточенное на  распределенной архитектуре баз данных. Последний релиз программы, Riak 2.1.1, позволяет создавать базы данных строгой консистентности, в которых данные обновляются при извлечении (в отличие от БД консистентности в конечном счёте, данные которых более доступны, но менее актуальны).

Riak относится к группе noSQL-реализаций типа «ключ-значение» (вместе с Redis, MemcacheDB, и Aerospike), а потому консистентность программы не оптимизирована для SQL-запросов, которым необходим весь набор данных.

Требования

Для выполнения руководства понадобится:

  • Свежий сервер Ubuntu 14.04;
  • Не-рутовый пользователь с правами sudo (подробнее об этом можно прочитать здесь).

1: Установка Riak

С выходом новой версии Riak 2.0 пакеты Riak переместились из репозитория apt на сервис packagecloud.io, потому сначала нужно добавить Riak в список пакетов apt. Для этого команда разработчиков Riak предоставляет удобный скрипт.

Чтобы загрузить скрипт:

curl -O https://packagecloud.io/install/repositories/basho/riak/script.deb.sh

Не запускайте скрипт сразу, сначала убедитесь, что он не содержит ничего лишнего или вредоносного.

less script.deb.sh

Чтобы загрузить пакеты по HTTPS, скрипт должен установить пакет apt-transport-https. Также он проверит сертификат, импортирует открытый ключ и обновит индекс пакетов.

Чтобы закрыть файл, нажмите q, а затем запустите скрипт:

sudo bash script.deb.sh

Установите Riak при помощи команды:

sudo apt-get install riak=2.1.1-1

2: Настройка Riak

После установки Riak нужно настроить и запустить.

Для начала оптимизируйте параметры Erlang VM. Рекомендуется внести в эти настройки две поправки: установить интервалы сканирования очереди и отключить сжатие нагрузки.

Откройте конфигурационный файл Riak 2.0 в текстовом редакторе:

sudo nano /etc/riak/riak.conf

Раскомментируйте строку erlang.schedulers.force_wakeup_interval = 500 и удалите пробел в начале этой строки (в нижеприведённом блоке кода она выделена красным):

. . .
## Set scheduler forced wakeup interval. All run queues will be
## scanned each Interval milliseconds. While there are sleeping
## schedulers in the system, one scheduler will be woken for each
...
## Default: 500
##
## Acceptable values:
##   - an integer
## erlang.schedulers.force_wakeup_interval = 500
. . .

Повторите эти действия и для строки erlang.schedulers.compaction_of_load = false:

. . .
## Enable or disable scheduler compaction of load. By default
## scheduler compaction of load is enabled. When enabled, load
## balancing will strive for a load distribution which causes as many
...
## Default: false
##
## Acceptable values:
##   - one of: true, false
## erlang.schedulers.compaction_of_load = false
. . .

Сохраните и закройте файл.

Чтобы запустить Riak, введите команду:

sudo riak start

На экране появится предупреждение:

!!!!
!!!! WARNING: ulimit -n is 1024; 65536 is the recommended minimum.
!!!!

Данное сообщение предупреждает о том, что лимит открытых файлов в системе слишком низок.

Примечание: Это значит, что система ограничивает количество одновременно открытых файловых дескрипторов; а дескриптор – это инструмент для записи, необходимый каждому процессу.

По умолчанию система поддерживает 1024 одновременно открытых дескриптора. Riak рекомендует повысить лимит до 65536; для этого обратитесь к официальной документации Riak.

Чтобы убедиться в том, что программа Riak успешно запущена, используйте:

sudo riak ping

Если всё работает должным образом, команда вернёт:

pong

В противном случае она выдаст ошибку.

Чтобы запустить ряд подготовленных тестов и проверок Riak, введите:

sudo riak-admin test

Данная команда выведет:

Successfully completed 1 read/write cycle to 'riak@127.0.0.1'

Теперь программа Riak запущена, и можно попробовать создать приложение для неё.

3: Создание приложения Python (опционально)

Этот дополнительный раздел расскажет, как создать тестовое приложение на основе связки Python+Riak.

Для начала проверьте версию Python:

python --version

Команда вернёт:

Python 2.7.6

Необходимо обновить Python до версии 3. Удалите устаревшие бинарные файлы:

sudo rm /usr/bin/python

На их месте создайте символьную ссылку на бинарные файлы Python 3:

sudo ln -s /usr/bin/python3 /usr/bin/python

Повторно запустите команду python –version, и она вернёт:

Python 3.4.0

Затем нужно становить Pip – менеджер пакетов Python, упрощающий процессы установки и управления пакетами.

Примечание: Более подробную информацию о Pip можно найти в руководстве «Общие инструменты Python».

Чтобы установить Pip, используйте:

sudo apt-get install python3-pip

Затем нужно установить клиент Python для Riak. Сначала установите несколько зависимостей:

sudo apt-get install python3-dev libffi-dev libssl-dev

А затем – сам клиент:

sudo pip3 install riak

Теперь можно написать простое приложение для связки Python+Riak. Создайте папку для хранения приложения и файл в ней:

mkdir ~/test
sudo nano ~/test/app.py

Вставьте в файл следующий код:

import riak
# connect to Riak
myClient = riak.RiakClient(pb_port=8087, protocol='pbc')
# create new Bucket
myBucket = myClient.bucket('test')
# store key-value pairs
val1 = 1
key1 = myBucket.new('one', data=val1)
key1.store()
val2 = "two"
key2 = myBucket.new('two', data=val2)
key2.store()
val3 = {"myValue": 3}
key3 = myBucket.new('three', data=val3)
key3.store()
# fetch the data
fetched1 = myBucket.get('one')
fetched2 = myBucket.get('two')
fetched3 = myBucket.get('three')
print('Value 1 correct: '+str(val1 == fetched1.data))
print('Value 2 correct: '+str(val2 == fetched2.data))
print('Value 3 correct: '+str(val3 == fetched3.data))

Чтобы протестировать приложение, запустите команду:

python ~/test/app.py

Она вернёт следующий результат:

/usr/local/lib/python3.4/dist-packages/riak/security.py:54: UserWarning: Found OpenSSL 1.0.1f 6 Jan 2014 version, but expected at least OpenSSL 1.0.1g.  Security may not support TLS 1.2.
warnings.warn(msg, UserWarning)

TLS 1.2 (Transport Layer Security) – это довольно надёжный протокол безопасности, разработанный на основе TLS 1.1; в целом, TLS является апгрейдом SSL. Однако Internet Explorer не всегда поддерживает TLS 1.1 и 1.2, более того, большинство браузеров, как правило, не поддерживают TLS 1.2, по умолчанию. Следовательно, для настройки и поддержки  соединения между приложением и хранилищем данных Riak нужно использовать SSL.

После этого команда вернёт:

Value 1 correct: True
Value 2 correct: True
Value 3 correct: True

Готово!

Заключение

Итак, теперь хранилище данных Riak 2 успешно установлено и соединено с Python3. В целом, Riak 2 можно настроить дл поддержки другого языка программирования.

Примечание: Инструкции по защите Riak можно найти в официальной документации.

Tags: , , , ,

Добавить комментарий