Riak CS (Almacenamiento en la Nube) – es un software fácil de usar para organizar el almacenamiento de objetos, que funciona sobre Riak KV. Riak (KV) es una base de datos NoSQL distribuida tipo «clave-valor». Riak CS está diseñada para proporcionar simplicidad, disponibilidad y distribución del almacenamiento en la nube a cualquier escala, y puede ser utilizada para construir arquitecturas en la nube — tanto públicas como privadas — o como almacenamiento de infraestructura para aplicaciones y servicios de alta carga. La API de Riak CS es compatible con Amazon S3 y soporta la generación de informes sobre diversas situaciones.

Este artículo es una traducción libre de la guía oficial del sistema Riak CS versión 2.1.1
En el sistema de almacenamiento Riak CS, tres componentes trabajan juntos, lo que significa que es necesario configurar cada componente para que funcione con los otros componentes:
- Riak (KV) – es un sistema de base de datos que actúa como un sistema final.
- Riak CS — es la capa de almacenamiento en la nube sobre Riak, que proporciona almacenamiento y capacidades API, almacena archivos y metadatos en Riak, y luego los entrega a los usuarios finales.
- Stanchion — gestiona solicitudes que involucran entidades globalmente únicas, como buckets y usuarios en una instancia de Riak. Por ejemplo, crear usuarios, crear o eliminar buckets.
Además, también puede configurar un cliente S3 para usar en la comunicación con el sistema Riak CS.
Debe planificar tener un nodo Riak por cada nodo Riak CS en su sistema. Los nodos Riak y Riak CS pueden ejecutarse en diferentes máquinas físicas, pero en la mayoría de los casos es preferible ejecutar un nodo Riak y un nodo Riak CS en la misma máquina física. Suponiendo que una máquina física tenga suficiente capacidad para satisfacer las necesidades de ambos nodos Riak y Riak CS, generalmente verá un mejor rendimiento debido a la reducción de latencias de red.
Si su sistema consta de varios nodos, la configuración es principalmente establecer la comunicación entre los componentes. Otras configuraciones, como dónde se almacenarán los archivos de registro, tienen valores predeterminados y solo necesitan cambios si desea utilizar valores no estándar.
Configuración de componentes del sistema. Configuración de Riak KV para CS
Dado que Riak CS es una aplicación desarrollada sobre Riak, es muy importante prestar atención a la configuración de Riak cuando se inicia Riak CS. Este documento sirve como una guía para configurar Riak, así como un documento de referencia que describe parámetros de configuración importantes.
Antes de la configuración, asegúrese de que Riak KV y Riak CS estén instalados en cada nodo de su clúster. Stanchion, por otro lado, solo debe estar instalado en un nodo en todo el clúster.

Backends para Riak CS
Por defecto, el backend utilizado por Riak es Bitcask, pero el paquete Riak CS incluye un backend especial que debe ser utilizado por el clúster de Riak que forma parte del sistema Riak CS. En la versión estándar hay un backend Multi que se ofrece con Riak.
Los mismos buckets de Riak utilizados dentro de Riak CS utilizan índices secundarios, que ahora requieren un backend LevelDB. Otras partes del sistema Riak CS pueden beneficiarse al utilizar el backend Bitcask. El uso de un backend Multi ejemplar está incluido en Riak CS para aprovechar las ventajas de ambos backends para lograr la mejor combinación de rendimiento y funcionalidad. La siguiente sección describe cómo configurar correctamente Riak para usar este backend Multi.
Backend es lo que Riak utilizará para almacenar datos. Riak KV tiene varios backends disponibles: Bitcask, LevelDB, Memory y Multi.
Además, el sistema de cálculo de almacenamiento utiliza Riak MapReduce para agregar archivos en buckets. Esto significa que debe informar a todos los nodos de Riak dónde buscar los archivos preparados de Riak CS antes de calcular el almacenamiento.
Varios otros parámetros deben modificarse para configurar el nodo Riak como parte del sistema Riak CS, como la dirección IP y la dirección IP y el puerto para la comunicación a través de Protocol Buffers. Otras configuraciones se pueden cambiar si es necesario. Las secciones siguientes describen cómo configurar el nodo Riak para funcionar como parte del sistema Riak CS.
Configuración del backend de Riak
En primer lugar, se editan los archivos de configuración riak.conf o advanced.config/app.config. Estos archivos pueden estar ubicados en los directorios /etc/riak o /opt/riak/etc. De forma predeterminada, Riak utiliza el backend Bitcask. Lo primero que necesitamos hacer es cambiar el archivo de configuración eliminando la siguiente línea:
RIAK.CONF
## Delete this line:
storage_backend = bitcaskADVANCED.CONFIG
{riak_kv,
[ %% Eliminar esta línea:
{storage_backend, riak_kv_bitcask_backend},
]}APP.CONFIG
{riak_kv,
[ %% Eliminar esta línea:
{storage_backend, riak_kv_bitcask_backend},
]}A continuación, necesitamos mostrar la necesidad de los módulos RiakCS para Riak y indicar a Riak que use el backend configurado que proporciona Riak CS. Necesitamos utilizar para esto el archivo advanced.config o app.config y agregar las siguientes opciones:
ADVANCED.CONFIG
{eleveldb, [
{total_leveldb_mem_percent, 30}
]},
{riak_kv, [
%% Otras configuraciones
{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"}
]}
]},
%% Otras configuraciones
]}
APP.CONFIG
{eleveldb, [
{total_leveldb_mem_percent, 30}
]},
{riak_kv, [
%% Otras configuraciones
{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"}
]}
]},
%% Otras configuraciones
]}Es muy importante señalar que muchos de estos valores dependerán de las variaciones de directorios específicas de su sistema operativo, así que siga las instrucciones en consecuencia. Por ejemplo, el parámetro add_paths asume que Riak CS está instalado en /usr/lib/riak-cs, mientras que los parámetros data_root suponen que Riak está instalado en /var/lib. (Nota: en mi caso, fue add_paths — /usr/lib64/riak-cs/).
Esta configuración asume que Riak CS está instalado en la misma máquina que Riak. Si no, el paquete necesita ser copiado a un host separado.
Configuración de creación de siblings
Ahora, necesitamos configurar el parámetro allow_mult en verdadero. Podemos agregar una línea en el archivo de configuración riak.conf, o en la sección riak_core de advanced.config o app.config.
RIAK.CONF
buckets.default.allow_mult = trueADVANCED.CONFIG
{riak_core, [
%% Otras configuraciones
{default_bucket_props, [{allow_mult, true}]},
%% Otras configuraciones
]}APP.CONFIG
{riak_core, [
%% Otras configuraciones
{default_bucket_props, [{allow_mult, true}]},
%% Otras configuraciones
]}Esto permitirá a Riak crear siblings, que son necesarios para el funcionamiento de Riak CS. Si se conecta a Riak CS usando una biblioteca cliente, no se preocupe: no tendrá que resolver conflictos, ya que todas las operaciones de Riak CS están estrictamente coordinadas de acuerdo con su definición.
Sibling es un método de almacenamiento de múltiples objetos bajo una misma clave para que el objeto tenga diferentes valores en diferentes nodos.
Nota: allow_mult
Cualquier nodo Riak, que también soporte Riak CS, tendrá siempre el valor true para el parámetro allow_mult. Riak CS reiniciará si el valor es false.
Configuración del nombre del nodo y dirección IP
Cada nodo Riak tiene un nombre que se puede especificar en riak.conf en la opción nodename. Si utilizas un archivo de configuración app.config, necesitas crear un archivo llamado vm.args en el mismo directorio donde se encuentra app.config, y especificar el nombre del nodo usando la bandera -name. Recomendamos nombrar los nodos en el formato @. Así que si tienes tres nodos en ejecución en un mismo host 100.0.0.1, puedes llamarlos riak1@100.0.0.1, riak2@100.0.0.1, y riak3@100.0.0.1 o darles nombres más específicos, como test_cluster1@100.0.0.1, user_data3@100.0.0.1 y así sucesivamente. El siguiente ejemplo muestra cómo cambiar el nombre del nodo a riak1@127.0.0.1, que funcionará en el host local.
RIAK.CONF
nodename = riak1@127.0.0.1 VM.ARGS
-name riak1@127.0.0.1Debes asignar nombres a todos los nodos antes de iniciar y añadirlos al clúster.
Prueba de configuración
Ahora que se han realizado todas las configuraciones necesarias del nodo, podemos intentar iniciar Riak:
SHELL
riak start Nota: La respuesta en mi caso fue:

Aquí hay que esperar un poco. Luego puedes empezar la prueba del nodo en ejecución.
SHELL
riak pingSi la respuesta es pong, significa que Riak está en funcionamiento: si la respuesta es Node not responding to pings, significa que algo salió mal.
Nota: La respuesta en mi caso fue:

Si el nodo no se inició correctamente, consulta el registro erlang.log.1 en el directorio /log del nodo, si puedes identificar el problema. Uno de los errores más comunes es invalid_storage_backend, que indica que la ruta a la biblioteca Riak CS en advanced.config o en app.config es incorrecta (o que Riak CS no está instalado en el servidor). A pesar de este error, asegúrate de no haber cambiado de riak_cs_kv_multi_backend a riak_kv_multi_backend.
Configuración de Riak para usar buffers de protocolo (protocol buffers)
Las configuraciones de los buffers de protocolo de Riak se encuentran en riak.conf o en la sección riak_api en los archivos advanced.config o app.config, que están ubicados en el directorio /etc/riak/. Por defecto, el host tiene la dirección IP 127.0.0.1 y el puerto 8087. Necesitas cambiarlos si planeas ejecutar Riak y Riak CS fuera de un entorno local. Sustituye la dirección IP 127.0.0.1 del nodo Riak y el puerto 8087 por los adecuados.
RIAK.CONF
listener.protobuf.internal = 10.0.2.10:10001ADVANCED.CONF
{riak_api, [
%% Otras configuraciones
{pb, ["10.0.2.10", 10001]},
%% Otras configuraciones
]}APP.CONFIG
riak_api, [
%% Otras configuraciones
{pb, ["10.0.2.10", 10001]},
%% Otras configuraciones
]}Nota:El valor del parámetro listener.protobuf.internal en el archivo riak.conf (o el valor del parámetro pb en el archivo advanced.conf / app.config) debe coincidir con los valores para riak_host en el archivo riak-cs.config de Riak CS y en el archivo stanchion.conf (o riak_host respectivamente en los archivos advanced.config/app.config).
Nota sobre el número de puerto
Puede ser necesario un número de puerto diferente si el puerto entra en conflicto con los puertos utilizados por otra aplicación o si está utilizando un balanceador de carga o un servidor proxy.
También se recomienda que los usuarios se aseguren de que el tamaño de Riak protobuf.backlog (o en los archivos advanced.config/app.config esto es pb_backlog) sea igual o mayor que el tamaño pool.request.size especificado para Riak CS en riak-cs.config (o request_pool_size en los archivos advanced.config/app.config).
Si el valor de pool.request.size en Riak CS ha sido cambiado, entonces el valor de protobuf.backlog también debe actualizarse en Riak.
Otras configuraciones de Riak
Los archivos riak.conf y advanced.config incluyen otras configuraciones que ajustan la creación de archivos de registro y la ruta donde se almacenan. Estas configuraciones tienen valores predeterminados y deberían funcionar en la mayoría de los casos. Para más información, recomendamos leer nuestra documentación sobre archivos de configuración.
Configuración de la dirección IP para Riak
Al configurar IP para Riak, debe asegurarse de que los nodos de Riak tengan una dirección IP única, ya sea que esté trabajando con un solo nodo o agregando más nodos al sistema. La dirección IP de Riak se encuentra en riak.conf o, si está utilizando el archivo app.config, en el archivo de configuración vm.args, que se encuentra en el mismo directorio en /etc/riak (o en /opt/riak/etc/ en otros sistemas operativos).
Inicialmente, la línea que contiene la dirección IP de Riak apunta al host local en este lugar:
RIAK.CONF
nodename = riak@127.0.0.1VM.ARGS
-name riak@127.0.0.1Reemplace 127.0.0.1 con la dirección IP preferida o el nombre del host del nodo de Riak.
Configuraciones de rendimiento y capacidad
Por razones de rendimiento, recomendamos encarecidamente agregar valores a los archivos de configuración de Riak riak.conf o vm.args, ubicados en /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 65536Desactivación de JavaScript MapReduce
Se recomienda no utilizar JavaScript MapReduce obsoleto con ninguna versión de Riak CS. Por razones de rendimiento, debe desactivar la máquina virtual que ejecuta operaciones de JavaScript MapReduce configurando el archivo de configuración riak.conf, o en la sección riak_kv de 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, [
%% Otras configuraciones
{map_js_vm_count, 0},
{reduce_js_vm_count, 0},
{hook_js_vm_count, 0}
%% Otras configuraciones
]}APP.CONFIG
{riak_kv, [
%% Otras configuraciones
{map_js_vm_count, 0},
{reduce_js_vm_count, 0},
{hook_js_vm_count, 0}
%% Otras configuraciones
]}A continuación, necesitamos configurar los componentes restantes del sistema Riak CS.
Fuente: habr.com
