Autor | faraón
Fuente | comunidad Java china
Anteriormente hablamos de "optimización del rendimiento Redis de los 13 reglamentos militares! " Uno de los
La versión 3.0 es el racimo Racimo Redis Redis Redis programas puestos en marcha, los datos se distribuyen en diferentes áreas de servicio, con el fin de reducir la dependencia de un único sistema, el nodo maestro, y puede mejorar considerablemente el rendimiento de lectura y escritura Redis y servicios.
REDIS todos los datos en 16.384 ranuras (slots), en el que cada nodo es responsable de una parte de la ranura, cuando un grupo Redis conexión de cliente, será una ranura de configuración de cluster, de modo que pueda ser directamente comando de solicitud al nodo de procesamiento correspondiente.
Redis Cluster es el modo sin agente modo descentralizado de la operación, la gran cantidad de comandos enviados por el cliente estará directamente relacionado con el nodo de ejecución, por lo que en la mayoría de los casos no hay necesidad de enviar la orden de petición, sólo para completar la solicitud o remitir el caso a la siguiente en respuesta, el rendimiento sigue siendo único servidor de clúster Redis está muy cerca de un solo nodo, por lo que en teoría, cuando el nodo maestro es equivalente al doble del rendimiento de procesamiento de solicitud de extensión horizontal también se dobla, por lo que es el cúmulo Redis el rendimiento es muy alto.
Redis Cluster Arquitectura figura siguiente:
S construido cúmulo Redis
Hay Redis clústeres para la construcción de dos maneras, una es utilizar la fuente Redis herramienta de creación de cluster proporcionado construir rápidamente entorno de clúster Redis, y la otra forma es crear un archivo de configuración Redis entorno de clúster de forma manual.
1. Rápida estableció Redis Cluster
crear-cluster herramienta en utils / directorio-cluster crear, como se muestra a continuación:
./Create-cluster empezar a utilizar el comando puede crear un clúster rápida Redis, haga lo siguiente:
1$ ./create-cluster start # 创建集群
2Starting 30001
3Starting 30002
4Starting 30003
5Starting 30004
6Starting 30005
7Starting 30006
Lo siguiente que necesitamos para crear más de seis nodos por mandato de creación para formar un clúster, haga lo siguiente:
1[@iZ2ze0nc5n41zomzyqtksmZ:create-cluster]$ ./create-cluster create # 组建集群
2>>> Performing hash slots allocation on 6 nodes...
3Master[0] -> Slots 0 - 5460
4Master[1] -> Slots 5461 - 10922
5Master[2] -> Slots 10923 - 16383
6Adding replica 127.0.0.1:30005 to 127.0.0.1:30001
7Adding replica 127.0.0.1:30006 to 127.0.0.1:30002
8Adding replica 127.0.0.1:30004 to 127.0.0.1:30003
9>>> Trying to optimize slaves allocation for anti-affinity
10[WARNING] Some slaves are in the same host as their master
11M: 445f2a86fe36d397613839d8cc1ae6702c976593 127.0.0.1:30001
12 slots:[0-5460] (5461 slots) master
13M: 63bb14023c0bf58926738cbf857ea304bff8eb50 127.0.0.1:30002
14 slots:[5461-10922] (5462 slots) master
15M: 864d4dfe32e3e0b81a64cec8b393bbd26a65cbcc 127.0.0.1:30003
16 slots:[10923-16383] (5461 slots) master
17S: 64828ab44566fc5ad656e831fd33de87be1387a0 127.0.0.1:30004
18 replicates 445f2a86fe36d397613839d8cc1ae6702c976593
19S: 0b17b00542706343583aa73149ec5ff63419f140 127.0.0.1:30005
20 replicates 63bb14023c0bf58926738cbf857ea304bff8eb50
21S: e35f06ca9b700073472d72001a39ea4dfcb541cd 127.0.0.1:30006
22 replicates 864d4dfe32e3e0b81a64cec8b393bbd26a65cbcc
23Can I set the above configuration? (type 'yes' to accept): yes
24>>> Nodes configuration updated
25>>> Assign a different config epoch to each node
26>>> Sending CLUSTER MEET messages to join the cluster
27Waiting for the cluster to join
28.
29>>> Performing Cluster Check (using node 127.0.0.1:30001)
30M: 445f2a86fe36d397613839d8cc1ae6702c976593 127.0.0.1:30001
31 slots:[0-5460] (5461 slots) master
32 1 additional replica(s)
33M: 864d4dfe32e3e0b81a64cec8b393bbd26a65cbcc 127.0.0.1:30003
34 slots:[10923-16383] (5461 slots) master
35 1 additional replica(s)
36S: e35f06ca9b700073472d72001a39ea4dfcb541cd 127.0.0.1:30006
37 slots: (0 slots) slave
38 replicates 864d4dfe32e3e0b81a64cec8b393bbd26a65cbcc
39S: 0b17b00542706343583aa73149ec5ff63419f140 127.0.0.1:30005
40 slots: (0 slots) slave
41 replicates 63bb14023c0bf58926738cbf857ea304bff8eb50
42M: 63bb14023c0bf58926738cbf857ea304bff8eb50 127.0.0.1:30002
43 slots:[5461-10922] (5462 slots) master
44 1 additional replica(s)
45S: 64828ab44566fc5ad656e831fd33de87be1387a0 127.0.0.1:30004
46 slots: (0 slots) slave
47 replicates 445f2a86fe36d397613839d8cc1ae6702c976593
48[OK] All nodes agree about slots configuration.
49>>> Check for open slots...
50>>> Check slots coverage...
51[OK] All 16384 slots covered.
En el proceso de aplicación le preguntará por 30001,30002,30003 como un nodo maestro, el 30004,30005,30006 como su nodo esclavo, entre Yes realiza completa.
En primer lugar, podemos utilizar Redis-CLI para conectarse a un clúster, el comando es la siguiente:
1$ redis-cli -c -p 30001
En la información del nodo utilizando el comando para ver los nodos de clúster, el comando es el siguiente:
1127.0.0.1:30001> cluster nodes
2864d4dfe32e3e0b81a64cec8b393bbd26a65cbcc 127.0.0.1:30003@40003 master - 0 1585125835078 3 connected 10923-16383
3e35f06ca9b700073472d72001a39ea4dfcb541cd 127.0.0.1:30006@40006 slave 864d4dfe32e3e0b81a64cec8b393bbd26a65cbcc 0 1585125835078 6 connected
40b17b00542706343583aa73149ec5ff63419f140 127.0.0.1:30005@40005 slave 63bb14023c0bf58926738cbf857ea304bff8eb50 0 1585125835078 5 connected
563bb14023c0bf58926738cbf857ea304bff8eb50 127.0.0.1:30002@40002 master - 0 1585125834175 2 connected 5461-10922
6445f2a86fe36d397613839d8cc1ae6702c976593 127.0.0.1:30001@40001 myself,master - 0 1585125835000 1 connected 0-5460
764828ab44566fc5ad656e831fd33de87be1387a0 127.0.0.1:30004@40004 slave 445f2a86fe36d397613839d8cc1ae6702c976593 0 1585125835000 4 connected
可以看出 30001、30002、30003 都为主节点,30001 对应的槽位是 0-5460,30002 对应的槽位是 5461-10922,30003 对应的槽位是 10923-16383,总共有槽位 16384 个 (0 ~ 16383)。
30002 correspondiente ranura correspondiente a la ranura es 5461-10922,30003 10923 a 16383, es decir, un total de 16.384 ranuras (de 0 a 16.383).
crear-cluster enfoque, aunque construido rápidamente, pero el modo principal del clúster construir a partir de un número fijo de nodos y un patrón de asignación de intervalos es fijo, y se montan en el mismo servidor, que se utiliza sólo para un entorno de prueba.
Después de la prueba se ha completado, se puede utilizar el siguiente comando para cerrar y limpiar el clúster:
1$ ./create-cluster stop # 关闭集群
2Stopping 30001
3Stopping 30002
4Stopping 30003
5Stopping 30004
6Stopping 30005
7Stopping 30006
8$ ./create-cluster clean # 清理集群
2. Manualmente configurar Redis Cluster
Debido a las restricciones Create-propio clúster, en el entorno de producción real, tenemos que añadir manualmente manera Redis para construir una configuración de clúster, para lo cual primero ponemos Redis copiar los archivos de instalación en el nodo 1 al paquete Nodo6, porque queremos instalar seis nodos, 3 desde el maestro 3, como se muestra a continuación:
A continuación configurar e iniciar el cluster Redis.
① configurar un perfil
Redis.conf tenemos que modificar los archivos dentro de cada nodo, establecer el cúmulo sí habilitado para clúster representa el modo de apertura, y modificar sus respectivos puertos, seguimos utilizando Dao 30001 30006, 3000X conjunto por el puerto.
② para comenzar cada nodo
Después de configurar redis.conf, podemos empezar a todos los nodos, el comando es el siguiente:
1cd /usr/local/soft/mycluster/node1
2./src/redis-server redis.conf
③ crear un clúster y asignar ranuras
Hemos puesto en marcha previamente seis nodos, pero estos no están interconectados los nodos dentro de sus grupos de, por lo que entonces tenemos que conectar estos nodos a un clúster y especificar la ranura correspondiente para ellos, ejecute el siguiente comando :
1redis-cli --cluster create 127.0.0.1:30001 127.0.0.1:30002 127.0.0.1:30003 127.0.0.1:30004 127.0.0.1:30005 127.0.0.1:30006 --cluster-replicas 1
Donde la pluralidad de nodos con más tarde Crear, estos nodos como un nodo representa todo el clúster, el clúster-réplicas representan un nodo maestro designado en el cluster a partir del número de nodos, cada uno representado como un nodo maestro de un conjunto de nodos.
Después de ejecutar el comando CREATE, el sistema asignará las funciones y los hitos del cronograma de asignación de turnos para nosotros, de la siguiente manera:
1>>> Performing hash slots allocation on 6 nodes...
2Master[0] -> Slots 0 - 5460
3Master[1] -> Slots 5461 - 10922
4Master[2] -> Slots 10923 - 16383
5Adding replica 127.0.0.1:30005 to 127.0.0.1:30001
6Adding replica 127.0.0.1:30006 to 127.0.0.1:30002
7Adding replica 127.0.0.1:30004 to 127.0.0.1:30003
8>>> Trying to optimize slaves allocation for anti-affinity
9[WARNING] Some slaves are in the same host as their master
10M: bdd1c913f87eacbdfeabc71befd0d06c913c891c 127.0.0.1:30001
11 slots:[0-5460] (5461 slots) master
12M: bdd1c913f87eacbdfeabc71befd0d06c913c891c 127.0.0.1:30002
13 slots:[5461-10922] (5462 slots) master
14M: bdd1c913f87eacbdfeabc71befd0d06c913c891c 127.0.0.1:30003
15 slots:[10923-16383] (5461 slots) master
16S: bdd1c913f87eacbdfeabc71befd0d06c913c891c 127.0.0.1:30004
17 replicates bdd1c913f87eacbdfeabc71befd0d06c913c891c
18S: bdd1c913f87eacbdfeabc71befd0d06c913c891c 127.0.0.1:30005
19 replicates bdd1c913f87eacbdfeabc71befd0d06c913c891c
20S: bdd1c913f87eacbdfeabc71befd0d06c913c891c 127.0.0.1:30006
21 replicates bdd1c913f87eacbdfeabc71befd0d06c913c891c
22Can I set the above configuration? (type 'yes' to accept):
Como puede verse a partir de la información anterior, la Redis 30001,30002,30003 tiene la intención de establecer el nodo maestro, y la ranura se asigna a ellos, la ranura correspondiente es 0-5460,30002 30001 correspondiente a la ranura correspondiente es 5461-10922,30003 ranura es 10.923 a 16.383, 30.005 y 30.001 se proporciona desde el nodo, 30006 a 30002 del nodo, el nodo se establece en 30.004, sólo tenemos que confirmar la entrada y realiza la asignación de sí 30003, de la siguiente manera:
1Can I set the above configuration? (type 'yes' to accept): yes
2>>> Nodes configuration updated
3>>> Assign a different config epoch to each node
4>>> Sending CLUSTER MEET messages to join the cluster
5Waiting for the cluster to join
6....
7>>> Performing Cluster Check (using node 127.0.0.1:30001)
8M: 887397e6fefe8ad19ea7569e99f5eb8a803e3785 127.0.0.1:30001
9 slots:[0-5460] (5461 slots) master
10 1 additional replica(s)
11S: abec9f98f9c01208ba77346959bc35e8e274b6a3 127.0.0.1:30005
12 slots: (0 slots) slave
13 replicates 887397e6fefe8ad19ea7569e99f5eb8a803e3785
14S: 1a324d828430f61be6eaca7eb2a90728dd5049de 127.0.0.1:30004
15 slots: (0 slots) slave
16 replicates f5958382af41d4e1f5b0217c1413fe19f390b55f
17S: dc0702625743c48c75ea935c87813c4060547cef 127.0.0.1:30006
18 slots: (0 slots) slave
19 replicates 3da35c40c43b457a113b539259f17e7ed616d13d
20M: 3da35c40c43b457a113b539259f17e7ed616d13d 127.0.0.1:30002
21 slots:[5461-10922] (5462 slots) master
22 1 additional replica(s)
23M: f5958382af41d4e1f5b0217c1413fe19f390b55f 127.0.0.1:30003
24 slots:[10923-16383] (5461 slots) master
25 1 additional replica(s)
26[OK] All nodes agree about slots configuration.
27>>> Check for open slots...
28>>> Check slots coverage...
29[OK] All 16384 slots covered.
Aceptar pantalla representa todo el clúster se ha lanzado con éxito.
A continuación, utilizar Redis-CLI para conectar y comprobar el estado de funcionamiento de la agrupación, de la siguiente manera:
1$ redis-cli -c -p 30001 # 连接到集群
2127.0.0.1:30001> cluster info # 查看集群信息
3cluster_state:ok # 状态正常
4cluster_slots_assigned:16384 # 槽位数
5cluster_slots_ok:16384 # 正常的槽位数
6cluster_slots_pfail:0
7cluster_slots_fail:0
8cluster_known_nodes:6 # 集群的节点数
9cluster_size:3 # 集群主节点数
10cluster_current_epoch:6
11cluster_my_epoch:1
12cluster_stats_messages_ping_sent:130
13cluster_stats_messages_pong_sent:127
14cluster_stats_messages_sent:257
15cluster_stats_messages_ping_received:122
16cluster_stats_messages_pong_received:130
17cluster_stats_messages_meet_received:5
18cluster_stats_messages_received:257
Descripción de los campos relacionados se han identificado en el código anterior, y no lo repita aquí.
adiciones de nodos dinámicos y deleciones
En algunos casos, se necesita en función de la situación real del negocio, el grupo ya se está ejecutando dinámicamente agregar o nodos de borrado, entonces tenemos que hacer lo siguiente.
1. Aumentar el nodo maestro
Añadir una manera: la agrupación se reúnen
El uso del clúster se encuentran ip: comando de puerto puede ser añadido a un nodo de clúster, ejecute el siguiente comando:
1127.0.0.1:30001> cluster meet 127.0.0.1 30007
2OK
3127.0.0.1:30001> cluster nodes
4dc0702625743c48c75ea935c87813c4060547cef 127.0.0.1:30006@40006 slave 3da35c40c43b457a113b539259f17e7ed616d13d 0 1585142916000 6 connected
5df0190853a53d8e078205d0e2fa56046f20362a7 127.0.0.1:30007@40007 master - 0 1585142917740 0 connected
6f5958382af41d4e1f5b0217c1413fe19f390b55f 127.0.0.1:30003@40003 master - 0 1585142916738 3 connected 10923-16383
73da35c40c43b457a113b539259f17e7ed616d13d 127.0.0.1:30002@40002 master - 0 1585142913000 2 connected 5461-10922
8abec9f98f9c01208ba77346959bc35e8e274b6a3 127.0.0.1:30005@40005 slave 887397e6fefe8ad19ea7569e99f5eb8a803e3785 0 1585142917000 5 connected
9887397e6fefe8ad19ea7569e99f5eb8a803e3785 127.0.0.1:30001@40001 myself,master - 0 1585142915000 1 connected 0-5460
101a324d828430f61be6eaca7eb2a90728dd5049de 127.0.0.1:30004@40004 slave f5958382af41d4e1f5b0217c1413fe19f390b55f 0 1585142916000 4 connected
Puede verse puerto 30007 y se añade a los nodos de la agrupación, y se ha convertido en el nodo maestro se proporciona.
Añadir Segunda forma: complemento nodo
Uso Redis-cli --cluster complemento nodo de añadir un nodo IP: puerto de un nodo de clúster ip: puerto también se puede añadir un nodo al clúster, ejecute el siguiente comando:
1$ redis-cli --cluster add-node 127.0.0.1:30008 127.0.0.1:30001
2>>> Adding node 127.0.0.1:30008 to cluster 127.0.0.1:30001
3>>> Performing Cluster Check (using node 127.0.0.1:30001)
4M: 887397e6fefe8ad19ea7569e99f5eb8a803e3785 127.0.0.1:30001
5 slots:[0-5460] (5461 slots) master
6 1 additional replica(s)
7S: dc0702625743c48c75ea935c87813c4060547cef 127.0.0.1:30006
8 slots: (0 slots) slave
9 replicates 3da35c40c43b457a113b539259f17e7ed616d13d
10M: df0190853a53d8e078205d0e2fa56046f20362a7 127.0.0.1:30007
11 slots: (0 slots) master
12M: f5958382af41d4e1f5b0217c1413fe19f390b55f 127.0.0.1:30003
13 slots:[10923-16383] (5461 slots) master
14 1 additional replica(s)
15M: 1d09d26fd755298709efe60278457eaa09cefc26 127.0.0.1:30008
16 slots: (0 slots) master
17M: 3da35c40c43b457a113b539259f17e7ed616d13d 127.0.0.1:30002
18 slots:[5461-10922] (5462 slots) master
19 1 additional replica(s)
20S: abec9f98f9c01208ba77346959bc35e8e274b6a3 127.0.0.1:30005
21 slots: (0 slots) slave
22 replicates 887397e6fefe8ad19ea7569e99f5eb8a803e3785
23S: 1a324d828430f61be6eaca7eb2a90728dd5049de 127.0.0.1:30004
24 slots: (0 slots) slave
25 replicates f5958382af41d4e1f5b0217c1413fe19f390b55f
26[OK] All nodes agree about slots configuration.
27>>> Check for open slots...
28>>> Check slots coverage...
29[OK] All 16384 slots covered.
30[ERR] Node 127.0.0.1:30008 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
30008 Como puede verse por los resultados anteriores también han establecido al nodo nodo maestro.
2. Añadir el nodo
Uso grupo de mando de duplicados NODEID se puede establecer como el nodo actual al nodo objetivo desde el nodo, ejecute el comando siguiente:
1127.0.0.1:30008> cluster replicate df0190853a53d8e078205d0e2fa56046f20362a7
2OK
3127.0.0.1:30008> cluster nodes
4df0190853a53d8e078205d0e2fa56046f20362a7 127.0.0.1:30007@40007 master - 0 1585147827000 0 connected
5abec9f98f9c01208ba77346959bc35e8e274b6a3 127.0.0.1:30005@40005 slave 887397e6fefe8ad19ea7569e99f5eb8a803e3785 0 1585147827000 1 connected
61a324d828430f61be6eaca7eb2a90728dd5049de 127.0.0.1:30004@40004 slave f5958382af41d4e1f5b0217c1413fe19f390b55f 0 1585147823000 3 connected
7887397e6fefe8ad19ea7569e99f5eb8a803e3785 127.0.0.1:30001@40001 master - 0 1585147826000 1 connected 0-5460
8dc0702625743c48c75ea935c87813c4060547cef 127.0.0.1:30006@40006 slave 3da35c40c43b457a113b539259f17e7ed616d13d 0 1585147826930 2 connected
9f5958382af41d4e1f5b0217c1413fe19f390b55f 127.0.0.1:30003@40003 master - 0 1585147826000 3 connected 10923-16383
101d09d26fd755298709efe60278457eaa09cefc26 127.0.0.1:30008@40008 myself,slave df0190853a53d8e078205d0e2fa56046f20362a7 0 1585147823000 7 connected
113da35c40c43b457a113b539259f17e7ed616d13d 127.0.0.1:30002@40002 master - 0 1585147827933 2 connected 5461-10922
Se puede observar que se ha pasado de 30008 a 30007 del nodo.
3. Eliminar nodo
El uso de racimo se olvide de comandos NODEID puede eliminar un nodo de clúster. Esta orden es una orden y se reúnen de tiempo diferente, los nodos de borrado necesitan utilizar nodos Id fueron retirados, se puede pedir a través de los nodos del clúster para ver información de identificación para todos los nodos, donde la combinación de 40 cartas y el frente de cada fila de la matriz es el nodo Id, como se muestra a continuación:
Ejecute el siguiente comando:
1127.0.0.1:30001> cluster forget df0190853a53d8e078205d0e2fa56046f20362a7
2OK
En este caso utilizamos los nodos del clúster del sistema para ver la información en todos los nodos del clúster:
1127.0.0.1:30001> cluster nodes
2dc0702625743c48c75ea935c87813c4060547cef 127.0.0.1:30006@40006 slave 3da35c40c43b457a113b539259f17e7ed616d13d 0 1585143789940 6 connected
3f5958382af41d4e1f5b0217c1413fe19f390b55f 127.0.0.1:30003@40003 master - 0 1585143791000 3 connected 10923-16383
43da35c40c43b457a113b539259f17e7ed616d13d 127.0.0.1:30002@40002 master - 0 1585143789000 2 connected 5461-10922
5abec9f98f9c01208ba77346959bc35e8e274b6a3 127.0.0.1:30005@40005 slave 887397e6fefe8ad19ea7569e99f5eb8a803e3785 0 1585143789000 5 connected
6887397e6fefe8ad19ea7569e99f5eb8a803e3785 127.0.0.1:30001@40001 myself,master - 0 1585143786000 1 connected 0-5460
71a324d828430f61be6eaca7eb2a90728dd5049de 127.0.0.1:30004@40004 slave f5958382af41d4e1f5b0217c1413fe19f390b55f 0 1585143791945 4 connected
Antes de que el puerto puede ser visto como 30007 nodos se han eliminado para nuestro éxito.
resumen
En este artículo se habla grupo conjunto Redis dos maneras: crear-cluster de inicio y crear clúster, el primer enfoque, mientras más rápido, pero sólo puede crear un número fijo de nodos maestro y esclavo, y todos los nodos en el mismo servidor, que sólo se puede utilizar para entornos de prueba. También hablamos de Redis principal del clúster agregar de forma dinámica, y los nodos de eliminación de cualquier función de nodo.
Espero que esta ayuda que, con las manos arriba que ~
【Fin】
prevención de epidemias, la forma de volver a trabajar en paralelo? Tianyun lanzó artificial programa de monitoreo de datos de inteligencia! Al final de cómo hacer avanzar la prevención, en lugar de después de los hechos? 20:00 Jueves , el día de la nube de datos VP Yong para revelar la respuesta! Escaneado del siguiente Fanger Wei inscripción gratuita código de ~
lectura recomendada
☞ respuesta Ali "para luchar contra una gran cantidad de la cuenta personal de Taobao estaba cerrada"; carta micro enfrentan conjuntamente nuevo virus corona libro de hackers Maratón; Kubernetes 1,18 liberación | Geeks titulares
☞ Siri automáticamente diales 911, Google construyó sitio de detección, los medicamentos de prueba de IBM, la lucha internacional contra el SARS en acción!
☞ La vida es corta, no sólo a usar Python, sino también en su uso en VSCode
☞ estudiantes de la escuela secundaria rural contraatacar mente: certificados de tamaño natural, recibida fabricantes Ali, Tencent, gotas invitados entrevistas
Nos fijamos en cada punto, en serio como favorito
Haga clic para leer el texto original, inscribirse para participar