docker pull leaon/redis-cluster:0.0.1
# 不能设置密码,否则集群启动时会连接不上
# Redis服务器可以跨网络访问
bind 0.0.0.0
# 修改端口号(6个容器,分别配置7001,7002,7003,7004,7005,7006)
port 7001
# Redis后台启动
daemonize yes
# 开启aof持久化
appendonly yes
# 开启集群
cluster-enabled yes
# 集群的配置 配置文件首次启动自动生成(可以不配置)
cluster-config-file nodes_7001.conf
# 请求超时(可以不配置)
cluster-node-timeout 5000
# ${local_path} 替换自己电脑的目录,将修改好的redis.conf 放置到该目录下
${local_path}/node1/redis-conf
# ${local_path} 替换自己电脑的目录
${local_path}/node1/data
每个Redis集群中的节点都需要打开两个TCP连接。一个连接用于正常的给Client提供服务,比如7001,还有一个额外的端口(通过在这个端口号上加10000)作为数据端口,比如17001。第二个端口(本例中就是17001)用于集群总线,这是一个用二进制协议的点对点通信信道。这个集群总线(Cluster bus)用于节点的失败侦测、配置更新、故障转移授权,等等。客户端从来都不应该尝试和这些集群总线端口通信,它们只应该和正常的Redis命令端口进行通信。注意,确保在你的防火墙中开放着两个端口,否则,Redis集群节点之间将无法通信。
命令端口和集群总线端口的偏移量总是10000。
注意,如果想要集群按照你想的那样工作,那么集群中的每个节点应该:
也就是,要想集群正常工作,集群中的每个节点需要做到以下两点:
如果你没有开放TCP端口,你的集群可能不会像你期望的那样工作。集群总线用一个不同的二进制协议通信,用于节点之间的数据交换
docker run -id \
--restart=always \
-p 7001:7001 \
-p 17001:17001 \
--name redis-node1 \
-v ${local_path}/node1/redis-conf:/usr/local/redis-conf \
-v ${local_path}/node1/data:/var/opt/redis leaon/redis-cluster:0.0.1
docker run -id \
--restart=always \
-p 7002:7002 \
-p 17002:17002 \
--name redis-node2 \
-v ${local_path}/node2/redis-conf:/usr/local/redis-conf \
-v ${local_path}/node2/data:/var/opt/redis leaon/redis-cluster:0.0.1
docker run -id \
--restart=always \
-p 7003:7003 \
-p 17003:17003 \
--name redis-node3 \
-v ${local_path}/node3/redis-conf:/usr/local/redis-conf \
-v ${local_path}/node3/data:/var/opt/redis leaon/redis-cluster:0.0.1
docker run -id \
--restart=always \
-p 7004:7004 \
-p 17004:17004 \
--name redis-node4 \
-v ${local_path}/node4/redis-conf:/usr/local/redis-con
-v ${local_path}/node4/data:/var/opt/redis leaon/redis-cluster:0.0.1
docker run -id \
--restart=always \
-p 7005:7005 \
-p 17005:17005 \
--name redis-node5 \
-v ${local_path}/node5/redis-conf:/usr/local/redis-conf \
-v ${local_path}/node5/data:/var/opt/redis leaon/redis-cluster:0.0.1
docker run -id \
--restart=always \
-p 7006:7006 \
-p 17006:17006 \
--name redis-node6 \
-v ${local_path}/node6/redis-conf:/usr/local/redis-conf \
-v ${local_path}/node6/data:/var/opt/redis leaon/redis-cluster:0.0.1
docker ps

docker pull leaon/redis-cluster-manager:0.0.1
docker run -it \
--rm \
-e PASSWORD="leon"\
-e SLAVE_NODE_COUNT=1 \
-e NODES_ADDR="192.168.2.87:7001 192.168.2.87:7002 192.168.2.87:7003 192.168.2.87:7004 192.168.2.87:7005 192.168.2.87:7006" \
-e REDIS_CLI="redis-cli -h 192.168.2.87 -p 7001 -a leon -c"\
-e SINGLE_NODE_ADDR="192.168.2.87:7001"\
--name redis-cluster-manager \
leaon/redis-cluster-manager:0.0.1 create
创建需要使用到以下两个环境变量
SLAVE_NODE_COUNT: 每个主节点有几个从节点NODES_ADDR: 使用各个节点来创建集群其他环境变量
PASSWORD: 设置密码需要的环境变量REDIS_CLI: 使用redis客户端命令连接redis集群SINGLE_NODE_ADDR: 单个节点测连接地址,用于测试集成各个节点是否正常成功显示的日志
Can I set the above configuration? 输入 yes>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.2.87:7001
192.168.2.87:7002
192.168.2.87:7003
Adding replica 192.168.2.87:7005 to 192.168.2.87:7001
Adding replica 192.168.2.87:7006 to 192.168.2.87:7002
Adding replica 192.168.2.87:7004 to 192.168.2.87:7003
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 60cf975871484e1ecf2e4eb3c1981ea2d666cc22 192.168.2.87:7001
slots:0-5460 (5461 slots) master
M: e7fe5954d2a3270a302b6ef21c43e0250997176d 192.168.2.87:7002
slots:5461-10922 (5462 slots) master
M: 5899457dc8744b30047e5bc3d1ca65333aaba736 192.168.2.87:7003
slots:10923-16383 (5461 slots) master
S: db51b5fa0f85f49cb99105121914c79649ded6f6 192.168.2.87:7004
replicates e7fe5954d2a3270a302b6ef21c43e0250997176d
S: 98c057216ebda124f8257270f753897cf151c42f 192.168.2.87:7005
replicates 5899457dc8744b30047e5bc3d1ca65333aaba736
S: ef09b78086ffcc08ec5fcbe4bfcb2465b5bed899 192.168.2.87:7006
replicates 60cf975871484e1ecf2e4eb3c1981ea2d666cc22
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join..
>>> Performing Cluster Check (using node 192.168.2.87:7001)
M: 60cf975871484e1ecf2e4eb3c1981ea2d666cc22 192.168.2.87:7001
slots:0-5460 (5461 slots) master
1 additional replica(s)
M: 5899457dc8744b30047e5bc3d1ca65333aaba736 172.17.0.1:7003
slots:10923-16383 (5461 slots) master
1 additional replica(s)
S: ef09b78086ffcc08ec5fcbe4bfcb2465b5bed899 172.17.0.1:7006
slots: (0 slots) slave
replicates 60cf975871484e1ecf2e4eb3c1981ea2d666cc22
S: 98c057216ebda124f8257270f753897cf151c42f 172.17.0.1:7005
slots: (0 slots) slave
replicates 5899457dc8744b30047e5bc3d1ca65333aaba736
M: e7fe5954d2a3270a302b6ef21c43e0250997176d 172.17.0.1:7002
slots:5461-10922 (5462 slots) master
1 additional replica(s)
S: db51b5fa0f85f49cb99105121914c79649ded6f6 172.17.0.1:7004
slots: (0 slots) slave
replicates e7fe5954d2a3270a302b6ef21c43e0250997176d
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
docker run -it \
--rm \
leaon/redis-cluster:0.0.1 \
redis-cli -h 192.168.2.87 -p 7001 cluster nodes
5899457dc8744b30047e5bc3d1ca65333aaba736 172.17.0.1:7003@17003 master - 0 1626240193858 3 connected 10923-16383
ef09b78086ffcc08ec5fcbe4bfcb2465b5bed899 172.17.0.1:7006@17006 slave 60cf975871484e1ecf2e4eb3c1981ea2d666cc22 0 1626240194880 6 connected
60cf975871484e1ecf2e4eb3c1981ea2d666cc22 172.17.0.2:7001@17001 myself,master - 0 1626240193000 1 connected 0-5460
98c057216ebda124f8257270f753897cf151c42f 172.17.0.1:7005@17005 slave 5899457dc8744b30047e5bc3d1ca65333aaba736 0 1626240195890 5 connected
e7fe5954d2a3270a302b6ef21c43e0250997176d 172.17.0.1:7002@17002 master - 0 1626240194000 2 connected 5461-10922
db51b5fa0f85f49cb99105121914c79649ded6f6 172.17.0.1:7004@17004 slave e7fe5954d2a3270a302b6ef21c43e0250997176d 0 1626240192837 4 connected
slave ef09b78086ffcc08ec5fcbe4bfcb2465b5bed899 master 60cf975871484e1ecf2e4eb3c1981ea2d666cc22 0-5460
slave db51b5fa0f85f49cb99105121914c79649ded6f6 master e7fe5954d2a3270a302b6ef21c43e0250997176d 5461-10922
slave 98c057216ebda124f8257270f753897cf151c42f master 5899457dc8744b30047e5bc3d1ca65333aaba736 10923-16383
192.168.2.87:7001> config set masterauth leon
192.168.2.87:7001> config set requirepass leon
192.168.2.87:7001> auth leon
192.168.2.87:7001> config rewrite
docker run -it \
--rm \
leaon/redis-cluster:0.0.1 \
redis-cli -h 192.168.2.87 -p 7001 -c

操作完成退出容器执行exit
docker run -it \
--rm \
leaon/redis-cluster:0.0.1 \
redis-cli -h 192.168.2.87 -p 7002 -c

docker run -it \
--rm \
leaon/redis-cluster:0.0.1 \
redis-cli -h 192.168.2.87 -p 7003 -c

docker run -it \
--rm \
leaon/redis-cluster:0.0.1 \
redis-cli -h 192.168.2.87 -p 7004 -c

docker run -it \
--rm \
leaon/redis-cluster:0.0.1 \
redis-cli -h 192.168.2.87 -p 7005 -c

docker run -it \
--rm \
leaon/redis-cluster:0.0.1 \
redis-cli -h 192.168.2.87 -p 7006 -c

docker run -it \
--rm \
leaon/redis-cluster:0.0.1 \
redis-cli -h 192.168.2.87 -p 7001 -a leon -c

执行 set name leon 连接的是7001节点数据被分配到了5798槽在7002 节点上
docker run -it \
--rm \
-e PASSWORD="leon"\
-e SLAVE_NODE_COUNT=1 \
-e NODES_ADDR="192.168.2.87:7001 192.168.2.87:7002 192.168.2.87:7003 192.168.2.87:7004 192.168.2.87:7005 192.168.2.87:7006" \
-e REDIS_CLI="redis-cli -h 192.168.2.87 -p 7001 -a leon -c"\
-e SINGLE_NODE_ADDR="192.168.2.87:7001"\
--name redis-cluster-manager \
leaon/redis-cluster-manager:0.0.1 checkNode

Content type
Image
Digest
Size
288.2 MB
Last updated
about 5 years ago
docker pull leaon/redis-cluster-manager:0.0.1