Riak CS (Облачное Хранилище) – лесно за използване софтуер за организиране на обектно хранилище, работещ върху Riak KV. Riak (KV) е разпределена NoSQL база данни тип «ключ-стойност(key-value)». Riak CS е проектирана да осигури простота, достъпност и разпределение на облачно хранилище с всякакъв мащаб и може да се използва за изграждане на облачни архитектури – както публични, така и частни – или като инфраструктурно хранилище за високо натоварени приложения и услуги. API на Riak CS е съвместим с Amazon 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 MapReduce за обобщаване на файлове в бакети. Това означава, че трябва да уведомите всички възли на Riak къде да търсят подготвени файлове Riak CS преди изчисляване на съхранението.
Няколко други параметри трябва да бъдат променени, за да се настрои възел Riak като част от системата Riak CS, като 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 = bitcaskADVANCED.CONFIG
{riak_kv,
[ %% Изтрийте този ред:
{storage_backend, riak_kv_bitcask_backend},
]}APP.CONFIG
{riak_kv,
[ %% Изтрийте този ред:
{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, [
%% Други конфигурации
{add_paths, ["/usr/lib/riak-cs/lib/riak_cs-2.1.1/ebin"]},
{storage_backend, riak_cs_kv_multi_backend},
{multi_backend_prefix_list, [{<>, 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"}
]}
]},
%% Други конфигурации
]}
APP.CONFIG
{eleveldb, [
{total_leveldb_mem_percent, 30}
]},
{riak_kv, [
%% Други конфигурации
{add_paths, ["/usr/lib/riak-cs/lib/riak_cs-2.1.1/ebin"]},
{storage_backend, riak_cs_kv_multi_backend},
{multi_backend_prefix_list, [{<>, 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"}
]}
]},
%% Други конфигурации
]}Много е важно да отбележим, че множество от тези стойности ще зависят от вариации в директориите, специфични за вашата операционна система, затова следвайте инструкциите в съответствие с тях. Например, параметърът 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
buckets.default.allow_mult = trueADVANCED.CONFIG
{riak_core, [
%% Други конфигурации
{default_bucket_props, [{allow_mult, true}]},
%% Други конфигурации
]}APP.CONFIG
{riak_core, [
%% Други конфигурации
{default_bucket_props, [{allow_mult, true}]},
%% Други конфигурации
]}Това ще позволи на 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 не в локална среда. Заменете IP адреса 127.0.0.1 на възела Riak и порт 8087 на подходящия.
RIAK.CONF
listener.protobuf.internal = 10.0.2.10:10001ADVANCED.CONF
{riak_api, [
%% Други конфигурации
{pb, ["10.0.2.10", 10001]},
%% Други конфигурации
]}APP.CONFIG
riak_api, [
%% Други конфигурации
{pb, ["10.0.2.10", 10001]},
%% Други конфигурации
]}Бележка:Стойността на параметъра 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.1VM.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 = 65536VM.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, [
%% Други конфигурации
{map_js_vm_count, 0},
{reduce_js_vm_count, 0},
{hook_js_vm_count, 0}
%% Други конфигурации
]}APP.CONFIG
{riak_kv, [
%% Други конфигурации
{map_js_vm_count, 0},
{reduce_js_vm_count, 0},
{hook_js_vm_count, 0}
%% Други конфигурации
]}Следва да настроим останалите компоненти на системата Riak CS.
Източник: habr.com
