Almacenamiento en la nube de Riak. Parte 1. Configuración de Riak KV

Riak CS (Cloud Storage) es un software de almacenamiento de objetos fácil de usar que se ejecuta sobre Riak KV. Riak (KV) es una base de datos distribuida de valores-clave NoSQL. Riak CS está diseñado para proporcionar simplicidad, disponibilidad y distribución de almacenamiento en la nube de cualquier tamaño, y se puede utilizar para construir arquitecturas en la nube, tanto públicas como privadas, o como almacenamiento de infraestructura para aplicaciones y servicios con mucha carga. La API de Riak CS es compatible con Amazon S3 y admite la capacidad de generar informes para diversas situaciones.



imagen


Este artículo es una traducción gratuita del manual oficial para la versión 2.1.1 del sistema Riak CS



En el sistema de almacenamiento Riak CS, tres componentes trabajan juntos, lo que significa que cada componente debe estar configurado para trabajar con otros componentes:



  • Riak (KV) es un sistema de base de datos que actúa como un sistema final.
  • Riak CS es una capa de almacenamiento en la nube sobre Riak que proporciona capacidades de almacenamiento y API, almacena archivos y metadatos en Riak y luego los transfiere a los usuarios finales.
  • Stanchion : administra consultas que involucran entidades únicas a nivel mundial, como depósitos y usuarios en una instancia de Riak. Por ejemplo, crear usuarios, crear o eliminar depósitos.


Además, también puede configurar el cliente S3 para su uso en mensajería con el sistema Riak CS.



Debe planear tener un nodo Riak para 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 sola máquina física tiene suficiente energía para satisfacer las necesidades de los nodos Riak y Riak CS, generalmente verá un mejor rendimiento debido a la menor latencia de la red.



Si su sistema consta de varios nodos, la configuración se trata principalmente de establecer la comunicación entre los componentes. Otras configuraciones, como dónde y dónde se almacenarán los archivos de registro, tienen valores predeterminados y solo deben cambiarse 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 construida sobre Riak, es muy importante prestar atención a la configuración de Riak al iniciar Riak CS. Este documento es tanto una guía de configuración de Riak como un documento de referencia para describir parámetros de configuración importantes.



Asegúrese de que Riak KV y Riak CS estén instalados en cada nodo de su clúster antes de configurar. Stanchion, por otro lado, solo debe instalarse en un nodo en todo el clúster.



imagen


Backends para Riak CS



Por defecto, el backend usado por Riak es Bitcask, pero el paquete Riak CS incluye un backend especial que debe ser usado por el clúster Riak que es parte del sistema Riak CS. La versión normal tiene un backend Multi estándar que se envía con Riak.



Los mismos depósitos de Riak que Riak CS utiliza internamente utilizan índices secundarios que ahora requieren el backend de LevelDB. Otras partes del sistema Riak CS pueden beneficiarse del backend de Bticask. El uso del backend Multi ejemplar está incluido en Riak CS para aprovechar 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 Multi-backend.



El backend es lo que utilizará Riak para guardar los datos. Riak KV tiene varios backends en su arsenal: Bitcask, LevelDB, Memory y Multi.


Además, el sistema de cálculo de almacenamiento usa Riak MapReduse para resumir archivos en depósitos. Esto significa que debe indicar a todos los nodos Riak dónde buscar los archivos Riak CS aprovisionados antes de calcular el almacenamiento.



Se deben cambiar varios otros parámetros para configurar el host Riak como parte del sistema Riak CS, como la dirección IP y la dirección IP y el puerto para mensajería a través de Protocol Buffers. El resto de la configuración se puede cambiar si es necesario. Las siguientes secciones describen cómo configurar un nodo Riak para que funcione como parte de un sistema Riak CS.



Configuración del backend de Riak



Primero, se editan los archivos de configuración riak.conf o advanced.config / app.config. Estos archivos se pueden ubicar en los directorios / etc / riak o / opt / riak / etc. De forma predeterminada, Riak usa el backend de Bitcask. Lo primero que debemos hacer es modificar el archivo de configuración eliminando la siguiente línea:



RIAK.CONF



## Delete this line:
storage_backend = bitcask


CONFIGURACIÓN AVANZADA



{riak_kv,
 [ %% Delete this line: 
{storage_backend, riak_kv_bitcask_backend},
 ]}


APP.CONFIG



{riak_kv, 
  [ %% Delete this line:
    {storage_backend, riak_kv_bitcask_backend},
]}


A continuación, debemos mostrar la necesidad de módulos RiakCS para Riak y decirle a Riak que use el backend personalizado de Riak CS. Necesitamos usar el archivo advanced.config o app.config para esto y agregar las siguientes opciones:



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
]}


Es muy importante tener en cuenta que muchos de estos valores dependerán de las variaciones de directorio 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 asumen que Riak está instalado en / var / lib. (Nota. En mi caso fue add_paths - / usr / lib64 / riak-cs /).



Esta configuración asume que el Riak CS está instalado en la misma máquina que el Riak. Si no es así, el paquete debe copiarse en un host separado.



Configurar la creación de hermanos



Ahora, debemos establecer el parámetro allow_mult en verdadero. Podemos agregar una línea en el archivo de configuración riak.conf, o una sección riak_core en advanced.config o app.config.



RIAK.CONF



buckets.default.allow_mult = true




CONFIGURACIÓN AVANZADA

{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
]}


Esto permitirá a Riak crear los hermanos que Riak CS necesita para funcionar. Si se está conectando a Riak CS utilizando la biblioteca cliente, no se preocupe: no tiene que resolver conflictos, ya que todas las operaciones de Riak CS son estrictamente consistentes según su definición.



Hermano es una forma de almacenar varios objetos en una clave para que el objeto tenga diferentes valores en diferentes nodos.


Nota: allow_mult

Cualquier nodo Riak que también admita Riak CS siempre tendrá el parámetro allow_mult establecido en verdadero. Riak CS reiniciará el inicio si el valor es falso.


Configuración del nombre de host y la dirección IP



Cada nodo de Riak tiene un nombre que se puede especificar en riak.conf con la opción nodename. Si está utilizando el archivo de configuración app.config, debe crear un archivo llamado vm.args en el mismo directorio que app.config y especificar el nombre de host con la marca -name. Le recomendamos que asigne un nombre a los nodos en formato @. Entonces, si tiene tres nodos en ejecución en el mismo host 100.0.0.1, puede nombrarlos riak1@100.0.0.1, riak2@100.0.0.1 y riak3@100.0.0.1, o puede nombrarlos 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 de host 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.1


Debe nombrar todos los nodos antes de comenzar y agregarlos al clúster.



Prueba de afinación



Ahora que se han completado todas las configuraciones de nodo necesarias, podemos intentar iniciar Riak:



SHELL



 riak start 


Aprox. La respuesta en mi caso:



imagen



Aquí hay que esperar un poco. Luego, puede comenzar a probar el nodo en ejecución.



CÁSCARA



 riak ping


Si la respuesta es pong, entonces Riak se está ejecutando: si la respuesta es Node no responde a los pings, entonces algo salió mal.



Aprox. La respuesta en mi caso:



imagen



si el nodo no se inició correctamente, mire el registro erlang.log.1 en el directorio / log del nodo si se puede identificar el problema. Uno de los errores más comunes es invalid_storage_backend. Lo que indica que la ruta a la biblioteca Riak CS en advanced.config o app.config es incorrecta (o Riak CS no está instalado en el servidor). A pesar de este error, asegúrese de no haber cambiado de riak_cs_kv_multi_backend a riak_kv_multi_backend.



Configuración de Riak para utilizar búferes de protocolo



La configuración del búfer del protocolo Riak se encuentra en la sección riak.conf o riak_api en los archivos advanced.config o app.config, que se encuentran en el directorio / etc / riak /. De forma predeterminada, el host tiene una dirección IP 127.0.0.1 y un puerto 8087. Deberá cambiarlos si planea ejecutar Riak y Riak CS fuera de su entorno local. Reemplace 127.0.0.1 con la IP de host de Riak y el puerto 8087 con uno adecuado.



RIAK.CONF



 listener.protobuf.internal = 10.0.2.10:10001


AVANZADO.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
]}


Nota: El valor del parámetro listener.protobuf.internal en riak.conf (o el valor del parámetro pb en el archivo advanced.conf / app.config) debe coincidir con los valores de riak_host en Riak CS riak-cs.config y Stanchion stanchion.conf (o riak_host respectivamente en archivos advanced.config / app.config).


Nota sobre el número de puerto Es

posible que necesite 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 equilibrador 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 pb_backlog en los archivos advanced.config / app.config) sea igual o mayor que el tamaño de pool.request.size especificado para Riak CS en riak-cs.config (o request_pool_size en los archivos advanced.config / app.conf).



Si se ha cambiado el valor de pool.request.size en Riak CS, entonces el valor de protobuf.backlog en Riak también debe actualizarse.



Otras configuraciones de Riak



Los archivos riak.conf y advanced.config incluyen otras configuraciones que configuran cómo se generan los archivos de registro y dónde se guardan. Estas configuraciones tienen valores predeterminados y deberían funcionar en la mayoría de los casos. Para obtener más información, recomendamos leer nuestra documentación sobre archivos de configuración.



Configurar una dirección IP para Riak



Al configurar una dirección IP para Riak, debe asegurarse de que los nodos 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 está contenida en riak.conf o, si está utilizando el archivo app.config, en el archivo de configuración vm.args, que se encuentra allí en el directorio / etc / riak (o / opt / riak / etc / en otros sistemas operativos ).



Inicialmente, la línea que contiene la dirección IP de Riak apunta al host local en esta ubicación:



RIAK.CONF



 nodename = riak@127.0.0.1


VM.ARGS



 -name riak@127.0.0.1


Reemplace 127.0.0.1 con su dirección IP preferida o el nombre de host del host Riak.



Configuración de rendimiento y ancho de banda



Por razones de rendimiento, recomendamos encarecidamente agregar valores a los archivos de configuración Riak riak.conf o vm.args ubicados en el directorio / etc / riak / o / 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


Desactivar JavaScript MapReduce



Se recomienda no utilizar JavaScript MapReduce obsoleto junto con ninguna versión de Riak CS. Por razones de rendimiento, debe deshabilitar la máquina virtual que realiza operaciones de MapReduce de JavaScript estableciendo en 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 


CONFIGURACIÓN AVANZADA



{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
]}


A continuación, debemos configurar los componentes restantes del sistema Riak CS.



Enlaces



Almacenamiento en la nube de Riak. Parte 1. Configuración de Riak KV

Riak Cloud Storage. Parte 2. Configuración del componente Riak CS

Riak Cloud Storage. Parte 3. Stanchion, Proxy y Load Balancing, S3 Client



Manual original.



All Articles