基于docker容器如何搭建redis集群

125 阅读5分钟

基于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

Image.png

第二步:

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:6381121.36.254.199:6382121.36.254.199:6383121.36.254.199:6384121.36.254.199:6385121.36.254.199:6386

  • --cluster-replicas 1 表示为每个主节点创建一个从节点,即每个主节点都会有一个对应的副本节点。

Image.png

Image.png

提一下哈希槽位算法:槽位的数量是16384

常用于分布式系统中的数据存储和负载均衡。它将数据的键或标识符映射到一个固定数量的哈希槽上,然后根据槽的数量将数据平均分布到多个节点上。

具体来说,哈希槽算法包括以下步骤:

  1. 确定槽数量:在使用哈希槽算法前,首先要确定槽的数量。通常,槽的数量是一个固定的值,可以手动配置或根据系统的需求来决定。

  2. 数据映射:对于每条数据,通过计算其键或标识符的哈希值,将其映射到一个特定的槽上。通常,哈希函数会将键的空间映射到槽的空间,保证一个键只映射到一个槽上。

  3. 数据分配:将所有数据按照哈希值映射到的槽进行分组。每个槽代表一个区间或范围,包含一部分数据。然后,将这些数据分配到不同的节点上,保证每个节点负责处理一部分槽内的数据。

  4. 负载均衡:为了实现负载均衡,可以根据节点的性能、负载情况或其他指标动态调整数据的分布。当节点加入或离开系统时,可以重新计算和迁移一部分槽上的数据,以达到负载均衡的目的。

哈希槽算法可以使得数据在分布式环境中均匀地分布到多个节点上,从而实现数据的水平扩展和负载均衡。它避免了数据倾斜和单点故障的问题,提高了系统的可扩展性和稳定性。同时,哈希槽算法还可以方便地进行节点的动态扩容和缩容,无需大规模迁移数据,减少了系统维护的成本和复杂性。

第三步:

redis-cli -p 6381

cluster info

根据你提供的输出,这是通过 Redis 命令行工具连接到端口号为6381的Redis实例并获取的集群信息。

Image.png

  • 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 查看主从挂载关系

Image.png

 主6381>>>>>从6384

主6382>>>>>从6385

主6383>>>>>从6386