Riak CS (Cloud Storage) – лёгкое в использовании программное обеспечение для организации хранилища объектов, работающее поверх Riak KV. Riak (KV) это распределённая NoSQL база данных типа «ключ-значение(key-value)». Riak CS спроектирована так, чтобы обеспечить простоту, доступность, распределённость облачного хранилища любого масштаба, и может использоваться для построения облачных архитектур — как публичных, так и частных — или как инфраструктурного хранилища для высоко нагруженных приложений и сервисов. Riak CS API совместим с Amazon S3 и поддерживает возможность получения отчётов по различным ситуациям.
Данная статья это вольный перевод официального руководства по системе Riak CS версии 2.1.1
В системе хранения Riak CS, три компонента работают совместно друг с другом, что означает обязательную настройку каждого компонента для работы с другими компонентами:
Дополнительно вы так же можете настроить S3 клиент для использовании в обмене сообщениями с Riak CS системой.
Вы должны спланировать наличие одного узла Riak для каждого узла Riak CS в вашей системе. Riak и Riak CS узлы могут быть запущены на разных физических машинах, но в большинстве случаях предпочтительнее запускать один узел Riak и один узел Riak CS на той же самой физической машине. Предполагая, одна физическая машина имеет достаточную мощность, чтобы удовлетворить потребности обоих узлов Riak и Riak CS, как правило вы увидите лучшую производительность из-за уменьшения сетевых задержек.
Если ваша система состоит из нескольких узлов, конфигурация в первую очередь представляет собой настройку коммуникации между компонентами. Другие настройки, такие как и где будут храниться лог-файлы, имеют значения по умолчанию и нуждаются в изменениях только если вы захотите использовать нестандартные значения.
Так как Riak CS это приложение разработанное поверх Riak, очень важно обратить внимание на вашу конфигурацию Riak, когда запускается Riak CS. Этот документ одновременно является руководством по конфигурированию Riak, а так же справочным документом по описанию важных конфигурационных параметров.
Перед настройкой убедитесь, что Riak KV и Riak CS установлены на каждом узле в вашем кластере. Stanchion, напротив, должен быть установлен только на одном узле во всём кластере.
По умолчанию бэкэнд используемый Riak это Bitcask, но Riak CS пакет включает специальный бэкэнд, который должен быть использован Riak кластером, являющегося частью Riak CS системы. В обычной версии есть стандартный Multi бэкэнд, который поставляется с Riak.
Одни и те же Riak бакеты, используемые внутри Riak’ ом CS, используют вторичные индексы, которые теперь требуют LevelDB бэкэнд. Другие части Riak CS системы могут извлечь выгоду используя Bticask бэкэнд. Использование образцового Multi бэкенд включено в Riak CS, чтобы воспользоваться преимуществами обоих этих бэкэндов для достижения наилучшего сочетания производительности и функциональности. В следующем разделе описывается, как правильно настроить Riak для использования этого Multi-бэкенда.
Дополнительно, система расчёта хранения данных использует Riak MapReduse для суммирования файлов в бакеты. Это означает, что вы должны сообщить всем узлам Riak, где искать подготовленные файлы Riak CS перед вычислением хранения.
Несколько другие параметры должны быть изменены, чтобы настроить узел Riak, как часть системы Riak CS, такие как IP-адрес и IP-адрес и порт для обмена сообщениями через Protocol Buffers. Остальные настройки можно изменить, если в этом есть необходимость. Следующие разделы описывают как настроить узел Riak для работы как части системы Riak CS.
Во-первых, редактируются riak.conf или advanced.config/app.config конфигурационные файлы. Эти файлы могут быть расположены в /etc/riak или в /opt/riak/etc директориях. По умолчанию, Riak использует Bitcask бэкэнд. Первую вещь, которую нам нужно сделать, это изменить конфигурационный файл путём удаления следующей строки:
RIAK.CONF
ADVANCED.CONFIG
APP.CONFIG
Далее, нам нужно показать необходимость модулей RiakCS для Riak и указать Riak для использования настроенного бэкэнда обеспечивающего Riak CS. Нам нужно использовать для этого advanced.config или app.config файл и внести следующие опции:
ADVANCED.CONFIG
APP.CONFIG
Очень важно отметить, что множество из этих значений будут зависеть от вариаций директорий специфичных для вашей операционной системы, поэтому выполняйте инструкции в соответствии с ними. Например, параметр add_paths предполагает, что Riak CS установлен в /usr/lib/riak-cs, когда параметры data_root предполагают, что Riak установлен в /var/lib. (Прим. В моем случае это было add_paths — /usr/lib64/riak-cs/).
Эта конфигурация предполагает, что Riak CS установлен на одной и той же машине, что и Riak. Если нет, то пакет нуждается в копировании в отдельный хост.
Сейчас, нам нужно настроить параметр allow_mult в значение true. Мы можем добавить строчку в конфигурационном файле riak.conf, или раздел riak_core в advanced.config или app.config.
RIAK.CONF
ADVANCED.CONFIG
APP.CONFIG
Это позволит Riak создавать сайблинги, которые необходимы для функционирования Riak CS. Если вы подключаетесь к Riak CS с помощью клиентской библиотеки, не беспокойтесь: вам не придётся разрешать конфликты, так как все Riak CS операции строго согласованы в соответствии со своим определением.
Каждый узел Riak имеет имя, которое может быть указано в riak.conf в опции nodename. Если вы используется конфигурационный файл app.config, вам необходимо создать файл с именем vm.args в той же директории, где и расположен app.config, и указать имя узла используя флаг -name. Мы рекомендуем задать имена узлам в формате @. И так если вы имеете три запущенных узла на одном хосте 100.0.0.1, вы можете назвать их riak1@100.0.0.1, riak2@100.0.0.1, и riak3@100.0.0.1 или вы может дать имена более специфические, такие как test_cluster1@100.0.0.1, user_data3@100.0.0.1 и так далее. Пример ниже демонстрирует изменение имени узла на имя riak1@127.0.0.1, которое будет работать на локальном хосте.
RIAK.CONF
VM.ARGS
Вы должны задать имена всем узлам перед запуском и включением их в кластер.
Сейчас, когда все необходимые настройки узла были выполнены, мы можем попытаться запустить Riak:
SHELL
Прим. Ответ в моём случае:
Здесь нужно подождать немного. Потом уже можно начать тест запущенного узла.
SHELL
Если ответ будет pong, значит Riak запущен: если же ответ Node not responding to pings, значит, что-то пошло не так.
Прим. Ответ в моём случае:
Если узел стартовал некорректно, посмотрите журнал erlang.log.1 в директории /log узла, если проблему возможно идентифицировать. Одна из самых распространённых ошибок это invalid_storage_backend. Который указывает, что путь к библиотеки Riak CS в advanced.config или в app.config неверный( или Riak CS не установлен на сервере). Несмотря на эту ошибку, убедитесь, что вы не изменили с riak_cs_kv_multi_backend на riak_kv_multi_backend.
Настройки буферов протокола Riak находятся в riak.conf или в riak_api разделе в advanced.config или app.config файлах, которые расположены в /etc/riak/ директории. По умолчанию хост имеет IP-адрес 127.0.0.1 и порт 8087. Вам нужно их изменить, если вы планируете запускать Riak и Riak CS не в локальном окружении. Замените 127.0.0.1 IP-адрес узла Riak и порт 8087 на подходящий.
RIAK.CONF
ADVANCED.CONF
APP.CONFIG
Также рекомендуется, чтобы пользователи убедились, что размер Riak protobuf.backlog (или в advanced.config/app.config файлах это pb_backlog) равняется или больше чем размер pool.request.size, указанный для Riak CS в riak-cs.config (или request_pool_size в advanced.config/ app.conf файлах).
Если значение pool.request.size в Riak CS было изменено, то значение protobuf.backlog так же в Riak должно быть обновлено.
Файлы riak.conf и advanced.config включают другие настройки, которые настраивают создание журнальных файлов и пути их сохранения. Эти настройки имеют значения по умолчанию и должны работать в большинстве случаев. Для большей информации, мы рекомендуем прочитать нашу документацию о конфигурационных файлах.
При настройке IP-адреса для Riak вы должны быть уверенны, что узлы Riak имеют уникальный IP-адрес, будь-то бы вы работаете всего с одним узлом или добавляете ещё дополнительные узлы к системе. IP-адрес Riak содержится в riak.conf или — если вы используете app.config файл — в vm.args конфигурационном файле, который расположен там же в /etc/riak директории (или в /opt/riak/etc/ в других операционных системах).
Первоначально, строка содержащая IP-адрес Riak указывает на локальный хост в этом месте:
RIAK.CONF
VM.ARGS
Замените 127.0.0.1 на предпочитаемый IP-адрес или имя хоста узла Riak.
Из-за причин производительности, мы настоятельно рекомендуем добавить значения в конфигурационные файлы Riak riak.conf или vm.args, расположенных в /etc/riak/ или /opt/riak/etc директории.
RIAK.CONF
VM.ARGS
Рекомендуется не использовать устаревший JavaScript MapReduce в связке с любой версией Riak CS. Из-за причин производительности, вы должны отключить виртуальную машину, выполняющую операции JavaScript MapReduce настройкой в riak.conf конфигурационном файле, или в riak_kv разделе advanced.conf или app.config:
RIAK.CONF
ADVANCED.CONFIG
APP.CONFIG
Далее нам нужно настроить оставшиеся компоненты системы Riak CS.
Riak Cloud Storage. Часть 1. Настройка Riak KV
Riak Cloud Storage. Часть 2. Настройка компонента Riak CS
Riak Cloud Storage. Часть 3. Stanchion, Proxy и балансировка нагрузки, клиент S3
Оригинал руководства.
Данная статья это вольный перевод официального руководства по системе Riak CS версии 2.1.1
В системе хранения Riak CS, три компонента работают совместно друг с другом, что означает обязательную настройку каждого компонента для работы с другими компонентами:
- Riak (KV) – система баз данных, которая действует как конечная система.
- Riak CS — слой облачного хранилища поверх Riak, которая предоставляет хранение и возможности API, хранит файлы и метаданные в Riak, и передаёт их затем конечным пользователям.
- Stanchion — управляет запросами с участием глобально уникальных сущностей, такими как бакеты и пользователями в экземпляре Riak. Например, создание пользователей, создание или удаление бакетов.
Дополнительно вы так же можете настроить S3 клиент для использовании в обмене сообщениями с Riak CS системой.
Вы должны спланировать наличие одного узла Riak для каждого узла Riak CS в вашей системе. Riak и Riak CS узлы могут быть запущены на разных физических машинах, но в большинстве случаях предпочтительнее запускать один узел Riak и один узел Riak CS на той же самой физической машине. Предполагая, одна физическая машина имеет достаточную мощность, чтобы удовлетворить потребности обоих узлов Riak и Riak CS, как правило вы увидите лучшую производительность из-за уменьшения сетевых задержек.
Если ваша система состоит из нескольких узлов, конфигурация в первую очередь представляет собой настройку коммуникации между компонентами. Другие настройки, такие как и где будут храниться лог-файлы, имеют значения по умолчанию и нуждаются в изменениях только если вы захотите использовать нестандартные значения.
Настройка компонентов системы. Настройка Riak KV для CS
Так как Riak CS это приложение разработанное поверх Riak, очень важно обратить внимание на вашу конфигурацию Riak, когда запускается Riak CS. Этот документ одновременно является руководством по конфигурированию Riak, а так же справочным документом по описанию важных конфигурационных параметров.
Перед настройкой убедитесь, что Riak KV и Riak CS установлены на каждом узле в вашем кластере. Stanchion, напротив, должен быть установлен только на одном узле во всём кластере.
Бэкэнды для Riak CS
По умолчанию бэкэнд используемый Riak это Bitcask, но Riak CS пакет включает специальный бэкэнд, который должен быть использован Riak кластером, являющегося частью Riak CS системы. В обычной версии есть стандартный Multi бэкэнд, который поставляется с Riak.
Одни и те же Riak бакеты, используемые внутри Riak’ ом CS, используют вторичные индексы, которые теперь требуют LevelDB бэкэнд. Другие части Riak CS системы могут извлечь выгоду используя Bticask бэкэнд. Использование образцового Multi бэкенд включено в Riak CS, чтобы воспользоваться преимуществами обоих этих бэкэндов для достижения наилучшего сочетания производительности и функциональности. В следующем разделе описывается, как правильно настроить Riak для использования этого Multi-бэкенда.
Бэкэнд — это то, что Riak будет использовать для сохранения данных. В арсенале Riak KV имеется несколько бэкэндов: Bitcask, LevelDB, Memory и Multi.
Дополнительно, система расчёта хранения данных использует Riak MapReduse для суммирования файлов в бакеты. Это означает, что вы должны сообщить всем узлам Riak, где искать подготовленные файлы Riak CS перед вычислением хранения.
Несколько другие параметры должны быть изменены, чтобы настроить узел Riak, как часть системы Riak CS, такие как IP-адрес и IP-адрес и порт для обмена сообщениями через Protocol Buffers. Остальные настройки можно изменить, если в этом есть необходимость. Следующие разделы описывают как настроить узел Riak для работы как части системы Riak CS.
Настройка Riak бэкэнда
Во-первых, редактируются riak.conf или advanced.config/app.config конфигурационные файлы. Эти файлы могут быть расположены в /etc/riak или в /opt/riak/etc директориях. По умолчанию, Riak использует Bitcask бэкэнд. Первую вещь, которую нам нужно сделать, это изменить конфигурационный файл путём удаления следующей строки:
RIAK.CONF
## Delete this line:
storage_backend = bitcask
ADVANCED.CONFIG
{riak_kv,
[ %% Delete this line:
{storage_backend, riak_kv_bitcask_backend},
]}
APP.CONFIG
{riak_kv,
[ %% Delete this line:
{storage_backend, riak_kv_bitcask_backend},
]}
Далее, нам нужно показать необходимость модулей RiakCS для Riak и указать Riak для использования настроенного бэкэнда обеспечивающего Riak CS. Нам нужно использовать для этого advanced.config или app.config файл и внести следующие опции:
ADVANCED.CONFIG
{eleveldb, [
{total_leveldb_mem_percent, 30}
]},
{riak_kv, [
%% Other configs
{add_paths, ["/usr/lib/riak-cs/lib/riak_cs-2.1.1/ebin"]},
{storage_backend, riak_cs_kv_multi_backend},
{multi_backend_prefix_list, [{<<"0b:">>, be_blocks}]},
{multi_backend_default, be_default},
{multi_backend, [
{be_default, riak_kv_eleveldb_backend, [
{data_root, "/var/lib/riak/leveldb"}
]},
{be_blocks, riak_kv_bitcask_backend, [
{data_root, "/var/lib/riak/bitcask"}
]}
]},
%% Other configs
]}
APP.CONFIG
{eleveldb, [
{total_leveldb_mem_percent, 30}
]},
{riak_kv, [
%% Other configs
{add_paths, ["/usr/lib/riak-cs/lib/riak_cs-2.1.1/ebin"]},
{storage_backend, riak_cs_kv_multi_backend},
{multi_backend_prefix_list, [{<<"0b:">>, be_blocks}]},
{multi_backend_default, be_default},
{multi_backend, [
{be_default, riak_kv_eleveldb_backend, [
{data_root, "/var/lib/riak/leveldb"}
]},
{be_blocks, riak_kv_bitcask_backend, [
{data_root, "/var/lib/riak/bitcask"}
]}
]},
%% Other configs
]}
Очень важно отметить, что множество из этих значений будут зависеть от вариаций директорий специфичных для вашей операционной системы, поэтому выполняйте инструкции в соответствии с ними. Например, параметр add_paths предполагает, что Riak CS установлен в /usr/lib/riak-cs, когда параметры data_root предполагают, что Riak установлен в /var/lib. (Прим. В моем случае это было add_paths — /usr/lib64/riak-cs/).
Эта конфигурация предполагает, что Riak CS установлен на одной и той же машине, что и Riak. Если нет, то пакет нуждается в копировании в отдельный хост.
Hастройка создания сайблингов
Сейчас, нам нужно настроить параметр allow_mult в значение true. Мы можем добавить строчку в конфигурационном файле riak.conf, или раздел riak_core в advanced.config или app.config.
RIAK.CONF
buckets.default.allow_mult = true
ADVANCED.CONFIG
{riak_core, [
%% Other configs
{default_bucket_props, [{allow_mult, true}]},
%% Other configs
]}
APP.CONFIG
{riak_core, [
%% Other configs
{default_bucket_props, [{allow_mult, true}]},
%% Other configs
]}
Это позволит Riak создавать сайблинги, которые необходимы для функционирования Riak CS. Если вы подключаетесь к Riak CS с помощью клиентской библиотеки, не беспокойтесь: вам не придётся разрешать конфликты, так как все Riak CS операции строго согласованы в соответствии со своим определением.
Сайблинг — это способ хранения нескольких объектов в одном ключе для того, чтобы объект имел разные значения на разных узлах.
Примечание: allow_mult
Любой узел Riak, который также поддерживает Riak CS, будет все время иметь значение true параметра allow_mult. Riak CS будет сбрасывать запуск, если значение будет false.
Настройка имени узла и IP-адреса
Каждый узел Riak имеет имя, которое может быть указано в riak.conf в опции nodename. Если вы используется конфигурационный файл app.config, вам необходимо создать файл с именем vm.args в той же директории, где и расположен app.config, и указать имя узла используя флаг -name. Мы рекомендуем задать имена узлам в формате @. И так если вы имеете три запущенных узла на одном хосте 100.0.0.1, вы можете назвать их riak1@100.0.0.1, riak2@100.0.0.1, и riak3@100.0.0.1 или вы может дать имена более специфические, такие как test_cluster1@100.0.0.1, user_data3@100.0.0.1 и так далее. Пример ниже демонстрирует изменение имени узла на имя riak1@127.0.0.1, которое будет работать на локальном хосте.
RIAK.CONF
nodename = riak1@127.0.0.1
VM.ARGS
-name riak1@127.0.0.1
Вы должны задать имена всем узлам перед запуском и включением их в кластер.
Тест настройки
Сейчас, когда все необходимые настройки узла были выполнены, мы можем попытаться запустить Riak:
SHELL
riak start
Прим. Ответ в моём случае:
Здесь нужно подождать немного. Потом уже можно начать тест запущенного узла.
SHELL
riak ping
Если ответ будет pong, значит Riak запущен: если же ответ Node not responding to pings, значит, что-то пошло не так.
Прим. Ответ в моём случае:
Если узел стартовал некорректно, посмотрите журнал erlang.log.1 в директории /log узла, если проблему возможно идентифицировать. Одна из самых распространённых ошибок это invalid_storage_backend. Который указывает, что путь к библиотеки Riak CS в advanced.config или в app.config неверный( или Riak CS не установлен на сервере). Несмотря на эту ошибку, убедитесь, что вы не изменили с riak_cs_kv_multi_backend на riak_kv_multi_backend.
Настройка Riak для использования буферов протокола(protocol buffers)
Настройки буферов протокола Riak находятся в riak.conf или в riak_api разделе в advanced.config или app.config файлах, которые расположены в /etc/riak/ директории. По умолчанию хост имеет IP-адрес 127.0.0.1 и порт 8087. Вам нужно их изменить, если вы планируете запускать Riak и Riak CS не в локальном окружении. Замените 127.0.0.1 IP-адрес узла Riak и порт 8087 на подходящий.
RIAK.CONF
listener.protobuf.internal = 10.0.2.10:10001
ADVANCED.CONF
{riak_api, [
%% Other configs
{pb, ["10.0.2.10", 10001]},
%% Other configs
]}
APP.CONFIG
riak_api, [
%% Other configs
{pb, ["10.0.2.10", 10001]},
%% Other configs
]}
Примечание:Значение параметра listener.protobuf.internal в riak.conf (или значение параметра pb в advanced.conf / app.config) файле должны соответствовать значениям для riak_host в Riak CS riak-cs.config и Stanchion stanchion.conf (или riak_host соответственно в advanced.config/app.config) файлах.
Заметка о номере порта
Может потребоваться другой номер порта, если порт конфликтует с портами, используемым другим приложением или если вы использует балансировщик нагрузки или прокси-сервер.
Также рекомендуется, чтобы пользователи убедились, что размер Riak protobuf.backlog (или в advanced.config/app.config файлах это pb_backlog) равняется или больше чем размер pool.request.size, указанный для Riak CS в riak-cs.config (или request_pool_size в advanced.config/ app.conf файлах).
Если значение pool.request.size в Riak CS было изменено, то значение protobuf.backlog так же в Riak должно быть обновлено.
Другие настройки Riak
Файлы riak.conf и advanced.config включают другие настройки, которые настраивают создание журнальных файлов и пути их сохранения. Эти настройки имеют значения по умолчанию и должны работать в большинстве случаев. Для большей информации, мы рекомендуем прочитать нашу документацию о конфигурационных файлах.
Настройка IP-адреса для Riak
При настройке IP-адреса для Riak вы должны быть уверенны, что узлы Riak имеют уникальный IP-адрес, будь-то бы вы работаете всего с одним узлом или добавляете ещё дополнительные узлы к системе. IP-адрес Riak содержится в riak.conf или — если вы используете app.config файл — в vm.args конфигурационном файле, который расположен там же в /etc/riak директории (или в /opt/riak/etc/ в других операционных системах).
Первоначально, строка содержащая IP-адрес Riak указывает на локальный хост в этом месте:
RIAK.CONF
nodename = riak@127.0.0.1
VM.ARGS
-name riak@127.0.0.1
Замените 127.0.0.1 на предпочитаемый IP-адрес или имя хоста узла Riak.
Настройки производительности и пропускной способности
Из-за причин производительности, мы настоятельно рекомендуем добавить значения в конфигурационные файлы Riak riak.conf или vm.args, расположенных в /etc/riak/ или /opt/riak/etc директории.
RIAK.CONF
erlang.max_ports = 65536
VM.ARGS
## This setting should already be present for recent Riak installs.
-env ERL_MAX_PORTS 65536
Отключение JavaScript MapReduce
Рекомендуется не использовать устаревший JavaScript MapReduce в связке с любой версией Riak CS. Из-за причин производительности, вы должны отключить виртуальную машину, выполняющую операции JavaScript MapReduce настройкой в riak.conf конфигурационном файле, или в riak_kv разделе advanced.conf или app.config:
RIAK.CONF
javascript.map_pool_size = 0
javascript.reduce_pool_size = 0
javascript.hook_pool_size = 0
ADVANCED.CONFIG
{riak_kv, [
%% Other configs
{map_js_vm_count, 0},
{reduce_js_vm_count, 0},
{hook_js_vm_count, 0}
%% Other configs
]}
APP.CONFIG
{riak_kv, [
%% Other configs
{map_js_vm_count, 0},
{reduce_js_vm_count, 0},
{hook_js_vm_count, 0}
%% Other configs
]}
Далее нам нужно настроить оставшиеся компоненты системы Riak CS.
Ссылки
Riak Cloud Storage. Часть 1. Настройка Riak KV
Riak Cloud Storage. Часть 2. Настройка компонента Riak CS
Riak Cloud Storage. Часть 3. Stanchion, Proxy и балансировка нагрузки, клиент S3
Оригинал руководства.