Установка и настройка Riak 2 и Python 3 на сервере Ubuntu 14.04
Python, Ubuntu | Комментировать запись
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: NoSQL, Python 3, Riak, Riak 2, Ubuntu 14.04