[Redis learning (2)] le enseña cómo instalar redis en Windows y crear un clúster

El artículo anterior ha introducido la instalación de redis en Windows.

Primero introduzca el concepto de clúster

Introducción al clúster de Redis

El clúster de Redis es un ensamblado que permite compartir datos entre varios nodos de Redis .

El clúster de Redis no admite comandos que procesan varias claves, porque esto requiere mover datos entre diferentes nodos, que no pueden lograr el rendimiento como Redis y pueden causar errores impredecibles en condiciones de carga alta.

Los clústeres de Redis brindan un cierto grado de disponibilidad a través de la partición y continúan procesando comandos en el entorno real cuando un nodo está inactivo o inaccesible. Ventajas del clúster de Redis:

  • Divida automáticamente los datos en diferentes nodos.
  • El comando puede continuar procesándose en caso de falla o imposibilidad de acceder a algunos nodos de todo el clúster.

Fragmentación de datos del clúster de Redis

El clúster de Redis no usa hash consistente, pero introduce el concepto de  ranura hash .

El clúster de Redis tiene 16384 ranuras hash, y CRC16 y módulo 16384 verifican cada clave para determinar qué ranura colocar. Cada nodo del clúster es responsable de una parte de la ranura hash. Por ejemplo, si el clúster actual tiene 3 nodos , entonces:

  • El nodo A contiene ranuras hash de 0 a 5500.
  • El nodo B contiene las ranuras hash 5501 a 11000.
  • El nodo C contiene las ranuras hash 11001 a 16384.

Esta estructura es fácil de agregar o eliminar nodos. Por ejemplo, si quiero agregar un nuevo nodo D, necesito agregar algunas ranuras de los nodos A, B, C a D. Si quiero eliminar el nodo A, necesito agregar Mueva las ranuras a los nodos B y C, y luego elimine el nodo A sin ranuras del clúster. Dado que mover la ranura hash de un nodo a otro no detiene el servicio, no importa si agrega, elimina o cambia La cantidad de ranuras hash de un nodo no hará que el clúster no esté disponible.

Modelo de replicación maestro-esclavo del clúster de Redis

Para que el clúster siga disponible cuando algunos nodos fallan o la mayoría de los nodos no pueden comunicarse, el clúster utiliza un modelo de replicación maestro-esclavo, y cada nodo tendrá N-1 réplicas.

En nuestro ejemplo, un clúster con tres nodos A, B y C, sin un modelo de replicación, si el nodo B falla, todo el clúster pensará que carece de ranuras en el rango de 5501-11000 y no se puede utilizar.

Sin embargo, si agregamos un nodo esclavo A1, B1, C1 a cada nodo cuando se crea el clúster (o después de un período de tiempo), entonces todo el clúster constará de tres nodos maestros y tres nodos esclavos, de modo que después del nodo B falla, el clúster elegirá B1 como el nuevo nodo maestro para continuar sirviendo, y todo el clúster no estará disponible porque no se puede encontrar la ranura

Pero cuando fallan B y B1, el clúster no está disponible.

Garantía de consistencia de Redis

Redis no garantiza una sólida coherencia de los datos, lo que significa que, en la práctica, el clúster puede perder operaciones de escritura en determinadas condiciones.

La primera razón es porque el clúster usa replicación asincrónica. El proceso de operación de escritura:

  • El cliente escribe un comando en el nodo maestro B.
  • El nodo maestro B responde el estado del comando al cliente.
  • El nodo maestro replica la operación de escritura en sus nodos esclavos B1, B2 y B3.

La copia del comando por parte del nodo maestro ocurre después de que se devuelve la respuesta del comando, porque si cada solicitud de comando de procesamiento necesita esperar a que se complete la operación de replicación, entonces la velocidad de solicitud del comando de procesamiento del nodo maestro se reducirá considerablemente; debemos concentrarnos en el rendimiento y consistencia Haga una compensación entre. Nota: el clúster de Redis puede proporcionar métodos de escritura síncronos en el futuro. Otra situación en la que los comandos se pueden perder en un clúster de Redis es que el clúster tiene una partición de red y un cliente está aislado de una pequeña cantidad de instancias, incluido al menos un nodo maestro.

Por ejemplo, suponga que el clúster contiene seis nodos A, B, C, A1, B1 y C1, donde A, B y C son los nodos maestros, A1, B1 y C1 son los nodos esclavos de A, B y C, y hay un cliente El extremo Z1 asume que hay una partición de red en el clúster, luego el clúster puede dividirse en dos partes. La mayoría de las partes incluyen los nodos A, C, A1, B1 y C1, y un una pequeña porción incluye el nodo B y el cliente Z1.

Z1仍然能够向主节点B中写入, 如果网络分区发生时间较短,那么集群将会继续正常运作,如果分区的时间足够让大部分的一方将B1选举为新的master,那么Z1写入B中得数据便丢失了.

注意, 在网络分裂出现期间, 客户端 Z1 可以向主节点 B 发送写命令的最大时间是有限制的, 这一时间限制称为节点超时时间(node timeout), 是 Redis 集群的一个重要的配置选项:


下面我们来搭建集群

1. 安装Ruby并配置环境

首先我们来配置环境变量 SSL_CERT_FILE 

首先在这里下载证书 http://curl.haxx.se/ca/cacert.pem, 然后再环境变量里设置 SSL_CERT_FILE 这个环境变量,并指向 cacert.pem 文件。(我这里在D盘建了一个文件夹rubyinstaller,把文件放在了里面)



环境配置好之后安装Ruby,Windows可以安装RubyInstaller,下载地址: 

https://rubyinstaller.org/

下载之后解压 解压完之后会有一个Ruby22文件夹,然后进入文件夹中打开命令行依次输入命令进行配置

ruby -v

gem -v

gem sources

gem install redis




2.搭建集群

要让集群正常运作至少需要三个主节点,不过在刚开始试用集群功能时, 强烈建议使用六个节点: 其中三个为主节点, 而其余三个则是各个主节点的从节点。 这里我们搭建一个伪分布式,使用6个redis实例来模拟

1.)首先我们再D盘redis文件夹下面创建6个文件夹 7000~7005 依次代表使用端口号7000~7005



2.)我们在7000~7005这6个文件夹下面新建 redis.conf 文件

Luego escriba el siguiente contenido en él, se recomienda copiar y pegar uno después de escribir, pero recuerde cambiar el número de puerto por el número de puerto de la carpeta correspondiente

puerto 7000 (número de puerto de la carpeta correspondiente) 
habilitado para 
clúster cluster-config-file nodes.conf 
cluster-node-timeout 5000 
appendonly sí
 
 
Luego, redis-server.exe en la carpeta redis se copia y pega en la carpeta 7000 ~ 7005 a su vez
Como se muestra

 
 
3.) Inicie 6 servicios redis en secuencia
Abra la línea de comando debajo de cada carpeta  
Ingrese el comando (no apague después de comenzar)
redis-server.exe redis.conf


4.) Crea un clúster de inicio

Dado que el archivo redis-trib.rb es necesario para crear e iniciar el clúster, es un programa Ruby que envía comandos especiales a la instancia para completar la creación de un nuevo clúster, verificar el clúster o volver a compartirlo.

Este archivo no está incluido en el archivo de instalación de redis de Windows. Necesitamos descargar Redis del sitio web oficial. La versión de Redis del sitio web oficial es la versión de Linux . En la carpeta src del código fuente, copie redis-trib.rb al Directorio de instalación de Redis en esta máquina.

También puede ir aquí para descargar http://download.csdn.net/download/a447332241/9930662

Finalmente, ingrese al directorio donde se encuentra el archivo redis-trib.rb y ejecute: 

ruby redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005

Este comando se utiliza aquí para crear un nuevo clúster La opción –replicas 1 significa que queremos crear un nodo esclavo para cada nodo maestro en el clúster. Los otros parámetros que siguen son la lista de direcciones de esta instancia de clúster, 3 maestros y 3 esclavos

redis-trib imprimirá una configuración esperada para que la vea. Si cree que no hay problema, puede ingresar sí, y redis-trib aplicará esta configuración al clúster para que cada nodo pueda comenzar a comunicarse entre sí.


De esta manera, se configura nuestro clúster.

5.) Prueba 

 Ingrese redis-cli.exe -h 127.0.0.1 -p 7001 -c en la carpeta redis

 En nombre nuestro, conéctese al servicio redis del puerto 7001


Estrategia de distribución de datos del clúster de Redis:

Se usa un método llamado ranura hash para asignar datos. El clúster de redis asigna 16384 ranuras por defecto. Cuando establecemos una clave, usaremos el algoritmo CRC16 para obtener el módulo para obtener la ranura y luego dividir la clave en Para los nodos en el intervalo de la ranura hash, el algoritmo específico es: CRC16 (clave)% 16384

Tenga en cuenta que: debe haber tres nodos maestros después de eso, de lo contrario fallará al crear un clúster. Los intervalos de ranuras asumidos por los tres nodos son:

 El nodo A cubre 0-5460; el
    nodo B cubre 5461-10922; el
    nodo C cubre 10923-16383

Por lo tanto, en la figura anterior, de acuerdo con el algoritmo de ranura hash del clúster de redis: CRC16 ('nombre')% 16384 
se asigna al servicio de redis en el puerto 7002.

En este punto, la configuración de Redis Cluster en Windows está completa

Documento chino de Redis http://www.redis.cn/topics/cluster-tutorial.html

En el próximo artículo, usaremos jedis para integrarnos con Spring


Supongo que te gusta

Origin blog.csdn.net/a447332241/article/details/77115634
Recomendado
Clasificación