学习要求
利用Docker实现redis 集群的部署,实现3主3从集群配置,并在此基础上实现主从扩容、缩容。
学习准备
要求实验主机能够连接外网,已经正确安装Docker,并关闭防火墙和selinux。
学习步骤
- 创建6个docker容器实例,redis-node-1,redis-node-2,redis-node-3,redis-node-4,redis-node-5,redis-node-6
--cluster-enabled yes 开启redis集群
--appendonly yes 开启持久化
# docker run -d --name redis-node-1 --net host --privileged=true -v /data/redis/share/redis-node-1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381
# docker run -d --name redis-node-2 --net host --privileged=true -v /data/redis/share/redis-node-2:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6382
# docker run -d --name redis-node-3 --net host --privileged=true -v /data/redis/share/redis-node-3:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6383
# docker run -d --name redis-node-4 --net host --privileged=true -v /data/redis/share/redis-node-4:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6384
# docker run -d --name redis-node-5 --net host --privileged=true -v /data/redis/share/redis-node-5:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6385
# docker run -d --name redis-node-6 --net host --privileged=true -v /data/redis/share/redis-node-6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386
(2)进入容器redis-node-1
# docker exec -it redis-node-1 /bin/bash
(3)构建主从关系
#redis-cli --cluster create 192.168.111.147:6381 192.168.111.147:6382 192.168.111.147:6383 192.168.111.147:6384 192.168.111.147:6385 192.168.111.147:6386 --cluster-replicas 1
--cluster-replicas 1 表示为每个master创建一个slave节点
注意这条语句的含义:--------------------------ip地址要换成你自己的ip地址
redis-cli --cluster create
命令用于创建一个 Redis 集群。
192.168.111.147:6381 192.168.111.147:6382 192.168.111.147:6383 192.168.111.147:6384 192.168.111.147:6385 192.168.111.147:6386
:这是用于构建集群的 Redis 实例的地址和端口号。在这个例子中,六个实例分别在相同的主机(IP 地址为 192.168.111.147)上的不同端口上运行。每个实例都需要提供 host:port 的形式,用空格分隔。(也就是ip地址:端口号)这条命令执行之后
Redis 集群将使用提供的实例地址和端口创建,每个主节点都会有一个从节点。这样组成的集群将用于分布式存储和处理数据,具备高可用性和可伸缩性的特点。
共有 6 个主节点和 6 个从节点,总共 12 个节点。每个主节点负责指定的数据分片,而从节点则用于提供冗余和高可用性。注意,这个集群是在单个主机上构建的,这在实际生产环境中可能不太常见,通常在不同的主机上部署 Redis 节点以实现真正的分布式和高可用性
(4)进入6381节点,查看节点状态
# redis-cli -p 6381
[root@slave3 ~]# docker exec -it redis-node-1 /bin/bash
root@slave3:/data# redis-cli -p 6381
127.0.0.1:6381> keys
redis-cli -p 6381
是使用 Redis 客户端连接到指定端口号为 6381 的 Redis 服务器的命令。
redis-cli
:这是 Redis 客户端命令行工具的名称,用于与 Redis 服务器建立连接并执行命令。-p 6381
:这是选项参数-p
,用于指定 Redis 服务器的端口号。在此示例中,端口号设置为 6381。能够使用 Redis 客户端与运行在指定端口号为 6381 的 Redis 服务器进行交互。您可以在命令行中输入 Redis 命令,例如 SET、GET 等,以与 Redis 服务器进行通信并执行各种操作,如存储和检索数据,执行事务,处理数据结构等
(5)查看节点信息
root@slave3:/data# redis-cli -p 6381
127.0.0.1:6381> 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:7
cluster_my_epoch:7
cluster_stats_messages_ping_sent:106
cluster_stats_messages_pong_sent:108
cluster_stats_messages_sent:214
cluster_stats_messages_ping_received:108
cluster_stats_messages_pong_received:106
(5)重新进入6381节点,加入-c参数,优化路由
我进入6382节点,因为迁移了
root@slave3:/data# redis-cli -p 6381 -c
127.0.0.1:6381> set keys1 value1
-> Redirected to slot [11605] located at 192.168.10.203:6383
OK
192.168.10.203:6383> set keys2 value2
-> Redirected to slot [7478] located at 192.168.10.203:6382
OK
(6)查看节点信息
每个节点的槽位分配情况:
- 节点
10.90.6.82:6382
分配了 5462 个槽位,拥有 4 个键和 1 个从节点。- 节点
10.90.6.82:6383
分配了 5461 个槽位,拥有 4 个键和 1 个从节点。- 节点
10.90.6.82:6381
分配了 5461 个槽位,拥有 1 个键和 1 个从节点。集群中的主节点和从节点信息:
- 主节点
5fe2c732e6713d368326567450161e9f44272de8
(10.90.6.82:6382
)负责 5461 到 10922 的槽位范围,有 1 个从节点。- 主节点
abb3dde0a500eb4c5869c4789c25204dad05296c
(10.90.6.82:6383
)负责 10923 到 16383 的槽位范围,有 1 个从节点。- 主节点
2f672aab2c68a5093b9aec58af6098370234a93a
(10.90.6.82:6381
)负责 0 到 5460 的槽位范围,有 1 个从节点。其它检查结果:
- 所有节点就槽位配置达成一致。
- 所有的槽位(16384)都已被覆盖,没有空槽位。
(7)停止主机6381