Riak CS (Cloud Storage) – software facile da usare per organizzare lo storage degli oggetti, che funziona sopra Riak KV. Riak (KV) è un database NoSQL distribuito di tipo "chiave-valore". Riak CS è progettato per garantire facilità, disponibilità e distribuzione dello storage cloud di qualsiasi scala e può essere utilizzato per costruire architetture cloud – sia pubbliche che private – o come storage infrastrutturale per applicazioni e servizi ad alta richiesta. L'API di Riak CS è compatibile con Amazon S3 e supporta la possibilità di ottenere report su varie situazioni.

Questo articolo è una traduzione libera del manuale ufficiale del sistema Riak CS versione 2.1.1
Nel sistema di storage Riak CS, tre componenti lavorano insieme, il che significa che è necessaria la configurazione di ogni componente per funzionare con gli altri componenti:
- Riak (KV) – sistema di database che agisce come sistema finale.
- Riak CS – strato di storage cloud sopra Riak, che fornisce storage e funzionalità dell'API, memorizza file e metadati in Riak e li trasmette poi agli utenti finali.
- Stanchion – gestisce le richieste coinvolgenti entità globalmente uniche, come bucket e utenti nell'istanza di Riak. Ad esempio, la creazione di utenti, la creazione o la rimozione di bucket.
Inoltre, puoi anche configurare un client S3 per utilizzarlo nella comunicazione con il sistema Riak CS.
Devi pianificare la presenza di un nodo Riak per ogni nodo Riak CS nel tuo sistema. I nodi Riak e Riak CS possono essere eseguiti su macchine fisiche diverse, ma nella maggior parte dei casi è preferibile eseguire un nodo Riak e un nodo Riak CS sulla stessa macchina fisica. Assumendo che una macchina fisica abbia potenza sufficiente per soddisfare le esigenze di entrambi i nodi Riak e Riak CS, è probabile che tu ottenga una migliore prestazione grazie alla riduzione dei ritardi di rete.
Se il tuo sistema è composto da più nodi, la configurazione riguarda principalmente l'impostazione della comunicazione tra i componenti. Altre impostazioni, come dove saranno memorizzati i file di log, hanno valori di default e necessitano di modifiche solo se desideri utilizzare valori non standard.
Configurazione dei componenti di sistema. Configurazione di Riak KV per CS
Poiché Riak CS è un'applicazione sviluppata sopra Riak, è molto importante prestare attenzione alla configurazione di Riak quando viene avviato Riak CS. Questo documento è sia una guida alla configurazione di Riak che un documento di riferimento per la descrizione di parametri di configurazione importanti.
Prima di procedere alla configurazione, assicurati che Riak KV e Riak CS siano installati su ogni nodo del tuo cluster. Stanchion, al contrario, deve essere installato solo su un nodo in tutto il cluster.

Backend per Riak CS
Per impostazione predefinita, il backend utilizzato da Riak è Bitcask, ma il pacchetto Riak CS include un backend speciale che deve essere utilizzato dal cluster Riak facente parte del sistema Riak CS. La versione standard comprende un backend Multi che viene fornito con Riak.
Gli stessi bucket di Riak utilizzati all'interno di Riak CS utilizzano indici secondari, che ora richiedono il backend LevelDB. Altre parti del sistema Riak CS possono trarre vantaggio dall'utilizzo del backend Bitcask. L'uso dell'esemplare backend Multi è incluso in Riak CS per sfruttare i vantaggi di entrambi questi backend per ottenere il miglior equilibrio di prestazioni e funzionalità. Nella sezione seguente verrà descritta la corretta configurazione di Riak per utilizzare questo backend Multi.
Backend è ciò che Riak utilizzerà per salvare i dati. Riak KV dispone di diversi backend: Bitcask, LevelDB, Memory e Multi.
Inoltre, il sistema di calcolo dello storage utilizza Riak MapReduce per sommare file nei bucket. Ciò significa che devi informare tutti i nodi Riak su dove cercare i file preparati di Riak CS prima di calcolare lo storage.
Alcuni altri parametri devono essere modificati per configurare il nodo Riak come parte del sistema Riak CS, come l'indirizzo IP e l'indirizzo IP e la porta per la comunicazione tramite Protocol Buffers. Le altre impostazioni possono essere modificate se necessario. Le sezioni successive descrivono come configurare il nodo Riak per funzionare come parte del sistema Riak CS.
Configurazione del backend Riak
In primo luogo, vengono modificati i file di configurazione riak.conf o advanced.config/app.config. Questi file possono trovarsi in /etc/riak o nella directory /opt/riak/etc. Per impostazione predefinita, Riak utilizza il backend Bitcask. La prima cosa che dobbiamo fare è modificare il file di configurazione rimuovendo la seguente riga:
RIAK.CONF
## Delete this line:
storage_backend = bitcaskADVANCED.CONFIG
{riak_kv,
[ %% Elimina questa riga:
{storage_backend, riak_kv_bitcask_backend},
]}APP.CONFIG
{riak_kv,
[ %% Elimina questa riga:
{storage_backend, riak_kv_bitcask_backend},
]}Successivamente, dobbiamo dimostrare la necessità dei moduli RiakCS per Riak e indicare a Riak di utilizzare il backend configurato che supporta Riak CS. Dobbiamo utilizzare per questo il file advanced.config o app.config e aggiungere le seguenti opzioni:
ADVANCED.CONFIG
{eleveldb, [
{total_leveldb_mem_percent, 30}
]},
{riak_kv, [
%% Altre configurazioni
{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"}
]}
]},
%% Altre configurazioni
]}
APP.CONFIG
{eleveldb, [
{total_leveldb_mem_percent, 30}
]},
{riak_kv, [
%% Altre configurazioni
{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"}
]}
]},
%% Altre configurazioni
]}È molto importante notare che molti di questi valori dipenderanno dalle variazioni delle directory specifiche per il tuo sistema operativo, quindi segui le istruzioni di conseguenza. Ad esempio, il parametro add_paths presume che Riak CS sia installato in /usr/lib/riak-cs, mentre i parametri data_root presuppongono che Riak sia installato in /var/lib. (Nota: nel mio caso era add_paths — /usr/lib64/riak-cs/).
Questa configurazione presuppone che Riak CS sia installato sulla stessa macchina di Riak. Se non è così, il pacchetto deve essere copiato su un host separato.
Impostazione della creazione di sibling
Adesso dobbiamo configurare il parametro allow_mult su true. Possiamo aggiungere una riga nel file di configurazione riak.conf, oppure nella sezione riak_core in advanced.config o app.config.
RIAK.CONF
buckets.default.allow_mult = trueADVANCED.CONFIG
{riak_core, [
%% Altre configurazioni
{default_bucket_props, [{allow_mult, true}]},
%% Altre configurazioni
]}APP.CONFIG
{riak_core, [
%% Altre configurazioni
{default_bucket_props, [{allow_mult, true}]},
%% Altre configurazioni
]}Questo permetterà a Riak di creare i sibling necessari per il funzionamento di Riak CS. Se ci si connette a Riak CS tramite una libreria client, non preoccuparti: non dovrai risolvere conflitti, poiché tutte le operazioni di Riak CS sono rigorosamente concordate in base alla loro definizione.
Sibling — è un modo per memorizzare più oggetti in una singola chiave affinché l'oggetto abbia valori diversi su nodi diversi.
Nota: allow_mult
Qualsiasi nodo Riak che supporta anche Riak CS avrà sempre un valore true per il parametro allow_mult. Riak CS riavvierà se il valore è false.
Impostazione del nome del nodo e dell'indirizzo IP
Ogni nodo Riak ha un nome che può essere specificato in riak.conf nell'opzione nodename. Se utilizzi un file di configurazione app.config, devi creare un file chiamato vm.args nella stessa directory in cui si trova app.config e specificare il nome del nodo utilizzando il flag -name. Ti consigliamo di assegnare nomi ai nodi nel formato @. Quindi, se hai tre nodi in esecuzione su un unico host 100.0.0.1, puoi chiamarli riak1@100.0.0.1, riak2@100.0.0.1 e riak3@100.0.0.1 o puoi dare loro nomi più specifici, come test_cluster1@100.0.0.1, user_data3@100.0.0.1 e così via. L'esempio sottostante dimostra la modifica del nome del nodo in riak1@127.0.0.1, che funzionerà sulla macchina locale.
RIAK.CONF
nodename = riak1@127.0.0.1 VM.ARGS
-name riak1@127.0.0.1Devi specificare nomi per tutti i nodi prima di avviarli e inserirli nel cluster.
Test di configurazione
Ora che tutte le impostazioni necessarie del nodo sono state completate, possiamo provare a avviare Riak:
SHELL
riak start Nota. La risposta nel mio caso:

Qui è necessario attendere un momento. Solo allora puoi avviare il test del nodo in esecuzione.
SHELL
riak pingSe la risposta sarà pong, significa che Riak è in esecuzione: se invece la risposta è Node not responding to pings, significa che qualcosa è andato storto.
Nota. La risposta nel mio caso:

Se il nodo si è avviato in modo errato, controlla il registro erlang.log.1 nella directory /log del nodo, se è possibile identificare il problema. Uno degli errori più comuni è invalid_storage_backend, che indica che il percorso alla libreria Riak CS in advanced.config o in app.config è errato (o che Riak CS non è installato sul server). Nonostante questo errore, assicurati di non aver cambiato da riak_cs_kv_multi_backend a riak_kv_multi_backend.
Impostazione di Riak per l'uso dei protocolli buffers
Le impostazioni dei protocolli buffers di Riak si trovano in riak.conf o nella sezione riak_api in advanced.config o in app.config, che si trovano nella directory /etc/riak/. Di default, l'host ha l'indirizzo IP 127.0.0.1 e la porta 8087. Devi cambiarli se intendi eseguire Riak e Riak CS non in un ambiente locale. Sostituisci l'indirizzo IP 127.0.0.1 del nodo Riak e la porta 8087 con quelli appropriati.
RIAK.CONF
listener.protobuf.internal = 10.0.2.10:10001ADVANCED.CONF
{riak_api, [
%% Altre configurazioni
{pb, ["10.0.2.10", 10001]},
%% Altre configurazioni
]}APP.CONFIG
riak_api, [
%% Altre configurazioni
{pb, ["10.0.2.10", 10001]},
%% Altre configurazioni
]Nota:Il valore del parametro listener.protobuf.internal in riak.conf (o il valore del parametro pb in advanced.conf / app.config) deve corrispondere ai valori per riak_host in Riak CS riak-cs.config e Stanchion stanchion.conf (o riak_host rispettivamente in advanced.config/app.config).
Nota sul numero di porta
Potrebbe essere necessario un numero di porta diverso se il porto confligge con i porti utilizzati da un'altra applicazione o se stai utilizzando un bilanciatore di carico o un server proxy.
Si raccomanda inoltre che gli utenti verifichino che la dimensione del Riak protobuf.backlog (o in advanced.config/app.config questo è pb_backlog) sia uguale o maggiore della dimensione pool.request.size specificata per Riak CS in riak-cs.config (o request_pool_size in advanced.config/app.conf).
Se il valore di pool.request.size in Riak CS è stato modificato, anche il valore di protobuf.backlog in Riak deve essere aggiornato.
Altre impostazioni di Riak
I file riak.conf e advanced.config includono altre impostazioni che configurano la creazione di file di registro e il percorso di salvataggio. Queste impostazioni hanno valori predefiniti e dovrebbero funzionare nella maggior parte dei casi. Per ulteriori informazioni, si consiglia di leggere la nostra documentazione sui file di configurazione.
Configurazione dell'indirizzo IP per Riak
Durante la configurazione Indirizzi IP per Riak devi assicurarti che i nodi Riak abbiano un indirizzo IP unico, sia che tu stia lavorando con un solo nodo o aggiungendo ulteriori nodi al sistema. L'indirizzo IP di Riak è contenuto in riak.conf oppure - se stai utilizzando il file app.config - nel file di configurazione vm.args, che si trova nella cartella /etc/riak (o in /opt/riak/etc/ in altri sistemi operativi).
Inizialmente, la riga contenente l'indirizzo IP di Riak indica l'host locale qui:
RIAK.CONF
nodename = riak@127.0.0.1VM.ARGS
-name riak@127.0.0.1Sostituisci 127.0.0.1 con l'indirizzo IP o il nome host preferito per il nodo Riak.
Impostazioni delle prestazioni e della larghezza di banda
Per motivi di prestazioni, ti raccomandiamo vivamente di aggiungere valori ai file di configurazione di Riak riak.conf o vm.args, situati nelle cartelle /etc/riak/ o /opt/riak/etc.
RIAK.CONF
erlang.max_ports = 65536VM.ARGS
## This setting should already be present for recent Riak installs.
-env ERL_MAX_PORTS 65536Disabilitazione di JavaScript MapReduce
Si raccomanda di non utilizzare il JavaScript MapReduce obsoleto con nessuna versione di Riak CS. Per motivi di prestazioni, dovresti disabilitare la macchina virtuale eseguendo operazioni di JavaScript MapReduce configura impostando nel file di configurazione riak.conf, o nel settore riak_kv di advanced.conf o app.config:
RIAK.CONF
javascript.map_pool_size = 0
javascript.reduce_pool_size = 0
javascript.hook_pool_size = 0 ADVANCED.CONFIG
{riak_kv, [
%% Altre configurazioni
{map_js_vm_count, 0},
{reduce_js_vm_count, 0},
{hook_js_vm_count, 0}
%% Altre configurazioni
]}APP.CONFIG
{riak_kv, [
%% Altre configurazioni
{map_js_vm_count, 0},
{reduce_js_vm_count, 0},
{hook_js_vm_count, 0}
%% Altre configurazioni
]}Successivamente dobbiamo configurare i restanti componenti del sistema Riak CS.
Fonte: habr.com
