摘要:接触docker以来,似乎养成了一种习惯,安装什么应用软件都想往docker方向做,今天就想来尝试下使用docker搭建redis集群。
首先,我们需要理论知识:Redis Cluster
是Redis
的分布式解决方案,它解决了redis单机中心化的问题,分布式数据库——首要解决把整个数据集按照分区规则映射到多个节点的问题。
这边就需要知道分区规则——哈希分区规则。Redis Cluster
采用哈希分区规则中的虚拟槽分区。所有的键根据哈希函数映射到0 ~ 16383
,计算公式:slot = CRC16(key)&16383
。每一个节点负责维护一部分槽以及槽所映射的键值数据。
Public key for glibc-headers-2.17-222.el7.x86_64.rpm is not installed
role:master ,这显然不是我们所希望的。
redis-6379:172.17.0.2,redis-6380:172.17.0.3,redis-6381:172.17.0.4,redis-6382:172.17.0.5,redis-6383:172.17.0.6,redis-6384:172.17.0.7
info replication 信息
Gossip
协议彼此通信,达到感知对方的过程。
192.168.10.52:6379> CLUSTER MEET 172.17.0.3 6379 OK 192.168.10.52:6379> CLUSTER MEET 172.17.0.4 6379 OK 192.168.10.52:6379> CLUSTER MEET 172.17.0.5 6379 OK 192.168.10.52:6379> CLUSTER MEET 172.17.0.6 6379 OK 192.168.10.52:6379> CLUSTER MEET 172.17.0.7 6379 OK 192.168.10.52:6379> CLUSTER NODES 54cb5c2eb8e5f5aed2d2f7843f75a9284ef6785c 172.17.0.3:6379@16379 master - 0 1528697195600 1 connected f45f9109f2297a83b1ac36f9e1db5e70bbc174ab 172.17.0.4:6379@16379 master - 0 1528697195600 0 connected ae86224a3bc29c4854719c83979cb7506f37787a 172.17.0.7:6379@16379 master - 0 1528697195600 5 connected 98aebcfe42d8aaa8a3375e4a16707107dc9da683 172.17.0.6:6379@16379 master - 0 1528697194000 4 connected 0bbdc4176884ef0e3bb9b2e7d03d91b0e7e11f44 172.17.0.5:6379@16379 master - 0 1528697194995 3 connected 760e4d0039c5ac13d04aa4791c9e6dc28544d7c7 172.17.0.2:6379@16379 myself,master - 0 1528697195000 2 connected
当前已经使这六个节点组成集群,但是现在还无法工作,因为集群节点还没有分配槽(slot)。
-a 123456
CLUSTER ADDSLOTS
(error) ERR To set a master the node must be empty and without assigned slots
[root@df6ebce6f12a /]# tail -f /var/log/redis/redis-server.log
get key
初步认为是,node节点没有全部添加进去,添加之后,依然有上述问题。想到是跨主机访问,应该是路由寻址不了导致的。当初写上述教程的时候,docker是以默认的网络模式bridge模式运行的,毕竟当初是以学习整理文档为主,主要是单机访问。但是,实际应用化场景中,多是公网跨主机访问,问题明朗了,想着集群这东西最好还是设置成共享主机公网ip比较好,于是解决如下:
以上 引用: