docker学习(10)—使用docker安装redis集群

1、创建容器,创建6个redis实例
docker create --name redis-node-1 --net host --privileged=true -v /data/redis/share/redis-node-1:/data redis:5.0.7 --cluster-enabled yes --appendonly yes --port 6381
docker create --name redis-node-2 --net host --privileged=true -v /data/redis/share/redis-node-2:/data redis:5.0.7 --cluster-enabled yes --appendonly yes --port 6382
docker create --name redis-node-3 --net host --privileged=true -v /data/redis/share/redis-node-3:/data redis:5.0.7 --cluster-enabled yes --appendonly yes --port 6383
docker create --name redis-node-4 --net host --privileged=true -v /data/redis/share/redis-node-4:/data redis:5.0.7 --cluster-enabled yes --appendonly yes --port 6384
docker create --name redis-node-5 --net host --privileged=true -v /data/redis/share/redis-node-5:/data redis:5.0.7 --cluster-enabled yes --appendonly yes --port 6385
docker create --name redis-node-6 --net host --privileged=true -v /data/redis/share/redis-node-6:/data redis:5.0.7 --cluster-enabled yes --appendonly yes --port 6386

说明:
docker create:创建容器的命令,但不启动它
--name redis-node-1:容器的名字,例如:redis-node-1
--net host:docker网络,使用宿主机的IP和端口
--privileged=true:docker容器权限,获取宿主机root权限
-v /data/redis/share/redis-node-1:/data:容器的data目录,映射到宿主机/data/redis/share/redis-node-1
redis:5.0.7:redis镜像名称和版本号
--cluster-enabled yes:redis.conf的配置,开启redis集群
--appendonly yes:redis.conf的配置,开启数据持久化
--port 6381:redis.conf的配置,redis端口号

2、建立目录
mkdir -p /data/redis/share/redis-node-1
mkdir -p /data/redis/share/redis-node-2
mkdir -p /data/redis/share/redis-node-3
mkdir -p /data/redis/share/redis-node-4
mkdir -p /data/redis/share/redis-node-5
mkdir -p /data/redis/share/redis-node-6

3、启动容器
docker start redis-node-1 redis-node-2 redis-node-3 redis-node-4 redis-node-5 redis-node-6

4、查看容器
docker ps

5、进入节点redis-node-1容器中
docker exec -it redis-node-1 /bin/bash

6、redis集群配置
redis-cli --cluster create 192.168.1.138:6381 192.168.1.138:6382 192.168.1.138:6383 192.168.1.138:6384 192.168.1.138:6385 192.168.1.138:6386 --cluster-replicas 1
说明:
--cluster create:表示创建集群
六个容器:表示集群里有六台服务器
--cluster-replicas 1:表示为每个master创建一个slave

主从是redis自己协商出来的,没有固定哪个是主,哪个是从。重启之后角色会变化

7、执行结果说明

>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460   #给主节点分配槽的位数
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.1.138:6385 to 192.168.1.138:6381
Adding replica 192.168.1.138:6386 to 192.168.1.138:6382
Adding replica 192.168.1.138:6384 to 192.168.1.138:6383
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: c790b5f9584777ba8d9f96be5fe42b2efe646635 192.168.1.138:6381   #给主节点分配槽的位数
   slots:[0-5460] (5461 slots) master
M: 691e5855e8f274a6ea61dc95dbed89da87ed6053 192.168.1.138:6382
   slots:[5461-10922] (5462 slots) master
M: f9200d36046d8325817c8014155e8f9950760da4 192.168.1.138:6383
   slots:[10923-16383] (5461 slots) master
S: 33add5fdf6d9cc3eb8656c865403a34b237b4b73 192.168.1.138:6384   #从节点复制了主节点
   replicates 691e5855e8f274a6ea61dc95dbed89da87ed6053
S: b264b25c716863096d0c2fe39483130cbfeba894 192.168.1.138:6385
   replicates f9200d36046d8325817c8014155e8f9950760da4
S: d7bbc7bb0b501b421d527f6c302a8abe00aa535b 192.168.1.138:6386
   replicates c790b5f9584777ba8d9f96be5fe42b2efe646635
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.1.138:6381)
M: c790b5f9584777ba8d9f96be5fe42b2efe646635 192.168.1.138:6381
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 33add5fdf6d9cc3eb8656c865403a34b237b4b73 192.168.1.138:6384
   slots: (0 slots) slave
   replicates 691e5855e8f274a6ea61dc95dbed89da87ed6053
S: d7bbc7bb0b501b421d527f6c302a8abe00aa535b 192.168.1.138:6386
   slots: (0 slots) slave
   replicates c790b5f9584777ba8d9f96be5fe42b2efe646635
S: b264b25c716863096d0c2fe39483130cbfeba894 192.168.1.138:6385
   slots: (0 slots) slave
   replicates f9200d36046d8325817c8014155e8f9950760da4
M: 691e5855e8f274a6ea61dc95dbed89da87ed6053 192.168.1.138:6382
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
M: f9200d36046d8325817c8014155e8f9950760da4 192.168.1.138:6383
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.   #如果创建成功,会显示以上信息

8、使用cluster info命令查看集群状态
redis-cli -h 192.168.1.138 -p 6381 -c
cluster info

显示及说明:
cluster_state:ok #集群状态
cluster_slots_assigned:16384 #被分配槽的位数
cluster_slots_ok:16384 #正确分配的槽位
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6 #当前节点数
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:1263
cluster_stats_messages_pong_sent:1174
cluster_stats_messages_sent:2437
cluster_stats_messages_ping_received:1169
cluster_stats_messages_pong_received:1263
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:2437

9、使用cluster nodes命令查看节点状态
cluster nodes
显示及说明:
33add5fdf6d9cc3eb8656c865403a34b237b4b73 192.168.1.138:6384@16384 slave 691e5855e8f274a6ea61dc95dbed89da87ed6053 0 1626942677191 4 connected
d7bbc7bb0b501b421d527f6c302a8abe00aa535b 192.168.1.138:6386@16386 slave c790b5f9584777ba8d9f96be5fe42b2efe646635 0 1626942677000 6 connected
b264b25c716863096d0c2fe39483130cbfeba894 192.168.1.138:6385@16385 slave f9200d36046d8325817c8014155e8f9950760da4 0 1626942675184 5 connected
691e5855e8f274a6ea61dc95dbed89da87ed6053 192.168.1.138:6382@16382 master - 0 1626942676000 2 connected 5461-10922
f9200d36046d8325817c8014155e8f9950760da4 192.168.1.138:6383@16383 master - 0 1626942675000 3 connected 10923-16383
c790b5f9584777ba8d9f96be5fe42b2efe646635 192.168.1.138:6381@16381 myself,master - 0 1626942674000 1 connected 0-5460