基于docker容器如何搭建redis集群?
作者:xiaotong
- 三主三从启动6台redis容器实例
- 进入docker容器,指定redis主从服务器命令
- 查看主从服务器是否成功
开饭!!上干货
第一步:
docker run -d \
--name redis-node-1 \ # 指定容器的名称为 "redis-node-1"
--net host \ # 使用主机网络模式,容器将共享主机的网络命名空间
--privileged=true \ # 提供特权访问,允许容器内部执行一些特殊操作
-v /data/redis/share/redis-node-1:/data \ # 将容器内的 "/data" 目录挂载到主机上的 "/data/redis/share/redis-node-1" 目录
redis:6.0.8 \ # 使用 Redis 6.0.8 镜像作为容器的基础镜像
--cluster-enabled yes \ # 开启 Redis 集群功能
--appendonly yes \ # 开启 AOF 持久化模式
--port 6381 \ # 指定 Redis 使用的端口号为 6381,默认端口为 6379
命令如下可直接复制:
docker run -d --name redis-node-1 --net host --privileged=true -v /data/redis/share/redis-node-1:/data redis --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 --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 --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 --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 --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 --cluster-enabled yes --appendonly yes --port 6386
第二步:
redis-cli --cluster create 121.36.254.199:6381 121.36.254.199:6382 121.36.254.199:6383 121.36.254.199:6384 121.36.254.199:6385 121.36.254.199:6386 --cluster -replicas 1
下面是这个命令的逐步解释:
redis-cli --cluster create \
121.36.254.199:6381 \
121.36.254.199:6382 \
121.36.254.199:6383 \
121.36.254.199:6384 \
121.36.254.199:6385 \
121.36.254.199:6386 \
--cluster-replicas 1
这个命令使用了 redis-cli 工具来执行 Redis 集群的管理操作。其中:
-
--cluster create表示创建一个新的 Redis 集群。 -
后面的 IP 地址和端口号(例如:
121.36.254.199:6381)指定了要作为 Redis 节点的主节点使用的地址和端口号。你提供的命令中列出了 6 个节点,分别是121.36.254.199:6381、121.36.254.199:6382、121.36.254.199:6383、121.36.254.199:6384、121.36.254.199:6385和121.36.254.199:6386。 -
--cluster-replicas 1表示为每个主节点创建一个从节点,即每个主节点都会有一个对应的副本节点。
提一下哈希槽位算法:槽位的数量是16384
常用于分布式系统中的数据存储和负载均衡。它将数据的键或标识符映射到一个固定数量的哈希槽上,然后根据槽的数量将数据平均分布到多个节点上。
具体来说,哈希槽算法包括以下步骤:
-
确定槽数量:在使用哈希槽算法前,首先要确定槽的数量。通常,槽的数量是一个固定的值,可以手动配置或根据系统的需求来决定。
-
数据映射:对于每条数据,通过计算其键或标识符的哈希值,将其映射到一个特定的槽上。通常,哈希函数会将键的空间映射到槽的空间,保证一个键只映射到一个槽上。
-
数据分配:将所有数据按照哈希值映射到的槽进行分组。每个槽代表一个区间或范围,包含一部分数据。然后,将这些数据分配到不同的节点上,保证每个节点负责处理一部分槽内的数据。
-
负载均衡:为了实现负载均衡,可以根据节点的性能、负载情况或其他指标动态调整数据的分布。当节点加入或离开系统时,可以重新计算和迁移一部分槽上的数据,以达到负载均衡的目的。
哈希槽算法可以使得数据在分布式环境中均匀地分布到多个节点上,从而实现数据的水平扩展和负载均衡。它避免了数据倾斜和单点故障的问题,提高了系统的可扩展性和稳定性。同时,哈希槽算法还可以方便地进行节点的动态扩容和缩容,无需大规模迁移数据,减少了系统维护的成本和复杂性。
第三步:
redis-cli -p 6381
cluster info
根据你提供的输出,这是通过 Redis 命令行工具连接到端口号为6381的Redis实例并获取的集群信息。
-
cluster_state:ok表示集群状态正常。 -
cluster_slots_assigned:16384表示集群中共有16384个槽位,每个槽位可以存储一个键值对。 -
cluster_slots_ok:16384表示所有槽位都已成功分配给节点。 -
cluster_known_nodes:6表示集群中已知的节点数量为6。 -
cluster_size:3表示集群的规模为3,即有3个主节点和3个从节点。 -
cluster_current_epoch:6表示当前集群的纪元(epoch)为6。 -
cluster_my_epoch:1表示当前节点的纪元(epoch)为1。 -
cluster_stats_messages_*表示与集群消息交互的统计信息。
最后,通过执行 cluster nodes 命令获取的集群节点信息将以详细的格式显示。你可以查看集群节点的详细信息,例如节点ID、IP地址、端口号、角色(主节点或从节点)等。
cluster nodes 查看主从挂载关系
主6381>>>>>从6384
主6382>>>>>从6385
主6383>>>>>从6386