本篇文章不包含理论解释,直接开始集群(三主三从)搭建
理论篇请跳转

环境

centos7
docker 26.1.4
redis latest (7.4.2)

服务器搭建以及环境配置

请查看本系列前几篇博客 默认已搭建好三个虚拟机并安装配置好docker
相关博客:
vagrant+virtualbox实现centos7安装
Linux安装Docker教程(详解)

一. 环境准备

docker pull redis

在这里插入图片描述

# 查看拉取的docker镜像
docker images

在这里插入图片描述

创建docker网络,保证所有redis容器可以互通

docker network create redis-cluster-network

二. redis配置文件创建

  1. 三台机器上都创建好文件夹 用来存放配置文件 每个文件夹里都建好data文件夹作为工作目录
  • 101机器:
sudo mkdir -p /usr/local/redis-docker/node-6379/data
sudo mkdir -p /usr/local/redis-docker/node-6382/data
  • 102机器
sudo mkdir -p /usr/local/redis-docker/node-6380/data
sudo mkdir -p /usr/local/redis-docker/node-6383/data
  • 103机器
sudo mkdir -p /usr/local/redis-docker/node-6381/data
sudo mkdir -p /usr/local/redis-docker/node-6384/data
  1. 设置六个节点的配置文件

注意:配置文件中masterauth一定要设置,因为是集群,哪个节点都有可能变为从库 那就需要masterauth去连接主库,还有还有还有,cluster-announce-ip 一定要设置,不然他可能会选docker的内部网段

  • 节点1配置文件 (redis-6379.conf) - 在机器101上
# 端口
port 6379
# 启用 Redis 集群模式
cluster-enabled yes
# 指定用于保存集群节点配置的文件名。这个文件是自动维护的,并非当前的配置文件名
cluster-config-file nodes-6379.conf
# 节点超时时间,超过次响应时间则认为此节点失效
cluster-node-timeout 5000
# 集群节点IP,填写宿主机ip
cluster-announce-ip 192.168.43.101
#集群节点映射端口
cluster-announce-port 6379
#集群总线端口
cluster-announce-bus-port 16379
# 启用AOF作为持久化方式
appendonly yes
# redis密码  protected-mode只会在无密码时生效,设置了密码就无需再修改protected-mode为no
requirepass 123456
# 与requirepass 指定主节点的密码
masterauth 123456
# 指定 Redis 工作目录的位置,包括 RDB 快照文件、AOF 文件以及集群配置文件等都将存储在这个目录下
# 注意这是docker中的挂载点 并非本地位置
dir /data
  • 节点2配置文件 (redis-6380.conf) - 在机器102上
# 端口
port 6380
# 启用 Redis 集群模式
cluster-enabled yes
# 指定用于保存集群节点配置的文件名。这个文件是自动维护的,并非当前的配置文件名
cluster-config-file nodes-6380.conf
# 节点超时时间,超过次响应时间则认为此节点失效
cluster-node-timeout 5000
# 集群节点IP,填写宿主机ip
cluster-announce-ip 192.168.43.102
#集群节点映射端口
cluster-announce-port 6380
#集群总线端口
cluster-announce-bus-port 16380
# 启用AOF作为持久化方式
appendonly yes
# redis密码  protected-mode只会在无密码时生效,设置了密码就无需再修改protected-mode为no
requirepass 123456
# 与requirepass 指定主节点的密码
masterauth 123456
# 指定 Redis 工作目录的位置,包括 RDB 快照文件、AOF 文件以及集群配置文件等都将存储在这个目录下
# 注意这是docker中的挂载点 并非本地位置
dir /data
  • 节点3配置文件 (redis-6381conf) - 在机器103上
port 6381
# 启用 Redis 集群模式
cluster-enabled yes
# 指定用于保存集群节点配置的文件名。这个文件是自动维护的,并非当前的配置文件名
cluster-config-file nodes-6381.conf
# 节点超时时间,超过次响应时间则认为此节点失效
cluster-node-timeout 5000
# 集群节点IP,填写宿主机ip
cluster-announce-ip 192.168.43.103
#集群节点映射端口
cluster-announce-port 6381
#集群总线端口
cluster-announce-bus-port 16381
# 启用AOF作为持久化方式
appendonly yes
# redis密码  protected-mode只会在无密码时生效,设置了密码就无需再修改protected-mode为no
requirepass 123456
# 与requirepass 指定主节点的密码
masterauth 123456
# 指定 Redis 工作目录的位置,包括 RDB 快照文件、AOF 文件以及集群配置文件等都将存储在这个目录下
# 注意这是docker中的挂载点 并非本地位置
dir /data
  • 节点4配置文件 (redis-6382.conf) - 在机器101上
port 6382
# 启用 Redis 集群模式
cluster-enabled yes
# 指定用于保存集群节点配置的文件名。这个文件是自动维护的,并非当前的配置文件名
cluster-config-file nodes-6382.conf
# 节点超时时间,超过次响应时间则认为此节点失效
cluster-node-timeout 5000
# 集群节点IP,填写宿主机ip
cluster-announce-ip 192.168.43.101
#集群节点映射端口
cluster-announce-port 6382
#集群总线端口
cluster-announce-bus-port 16382
# 启用AOF作为持久化方式
appendonly yes
# redis密码  protected-mode只会在无密码时生效,设置了密码就无需再修改protected-mode为no
requirepass 123456
# 与requirepass 指定主节点的密码
masterauth 123456
# 指定 Redis 工作目录的位置,包括 RDB 快照文件、AOF 文件以及集群配置文件等都将存储在这个目录下
# 注意这是docker中的挂载点 并非本地位置
dir /data
  • 节点5配置文件 (redis-6383.conf) - 在机器102上
port 6383
# 启用 Redis 集群模式
cluster-enabled yes
# 指定用于保存集群节点配置的文件名。这个文件是自动维护的,并非当前的配置文件名
cluster-config-file nodes-6383.conf
# 节点超时时间,超过次响应时间则认为此节点失效
cluster-node-timeout 5000
# 集群节点IP,填写宿主机ip
cluster-announce-ip 192.168.43.102
#集群节点映射端口
cluster-announce-port 6383
#集群总线端口
cluster-announce-bus-port 16383
# 启用AOF作为持久化方式
appendonly yes
# redis密码  protected-mode只会在无密码时生效,设置了密码就无需再修改protected-mode为no
requirepass 123456
# 与requirepass 指定主节点的密码
masterauth 123456
# 指定 Redis 工作目录的位置,包括 RDB 快照文件、AOF 文件以及集群配置文件等都将存储在这个目录下
# 注意这是docker中的挂载点 并非本地位置
dir /data
  • 节点6配置文件 (redis-6384.conf) - 在机器103上
port 6384
# 启用 Redis 集群模式
cluster-enabled yes
# 指定用于保存集群节点配置的文件名。这个文件是自动维护的,并非当前的配置文件名
cluster-config-file nodes-6384.conf
# 节点超时时间,超过次响应时间则认为此节点失效
cluster-node-timeout 5000
# 集群节点IP,填写宿主机ip
cluster-announce-ip 192.168.43.103
#集群节点映射端口
cluster-announce-port 6384
#集群总线端口
cluster-announce-bus-port 16384
# 启用AOF作为持久化方式
appendonly yes
# redis密码  protected-mode只会在无密码时生效,设置了密码就无需再修改protected-mode为no
requirepass 123456
# 与requirepass 指定主节点的密码
masterauth 123456
# 指定 Redis 工作目录的位置,包括 RDB 快照文件、AOF 文件以及集群配置文件等都将存储在这个目录下
# 注意这是docker中的挂载点 并非本地位置
dir /data

三. 启动所有redis节点

以节点1举例

docker run -d --name redis-6379 \
--network redis-cluster-network \
--restart=always \
-p 6379:6379 \
-p 16379:16379 \
-v /usr/local/redis-docker/node-6379/redis-6379.conf:/usr/local/etc/redis/redis.conf \
-v /usr/local/redis-docker/node-6379/data:/data \
redis:latest \
redis-server /usr/local/etc/redis/redis.conf

四. 创建集群

  1. 在101服务器执行创建集群命令
docker exec -it redis-6379 env REDISCLI_AUTH=123456 redis-cli --cluster create \
    192.168.43.101:6379 192.168.43.102:6380 192.168.43.103:6381 \
    192.168.43.101:6382 192.168.43.102:6383 192.168.43.103:6384 \
    --cluster-replicas 1 \
    --cluster-yes

如果是一个机器安装了六个节点模拟,可以使用docker容器名称代替ip

docker exec -it redis-6379 env REDISCLI_AUTH=123456 redis-cli --cluster create \
    redis-6379:6379 redis-6380:6380 redis-6381:6381 \
    redis-6382:6382 redis-6383:6383 redis-6384:6384 \
    --cluster-replicas 1 \
    --cluster-yes

在这里插入图片描述
2. 验证集群状态

docker exec -it redis-6379 redis-cli -h 192.168.43.101 -p 6379 -a "123456" cluster nodes

在这里插入图片描述

可视化工具连接

连接类型一定要选择cluster/集群
不需要填写User 直接输入密码即可,密码就是配置文件的requirepass
在这里插入图片描述

易错点

  1. 从节点中不要配置replicaof
    • 在 Redis 集群模式中,主从复制是通过集群本身自动管理的,不需要显式地使用 replicaof 指令。
    • 如果指定了replicaof会在启动redis从节点时报错replicaof directive not allowed in cluster mode
  1. 创建集群时要指定ip,而不是容器名
    • 如果是在同一台设备创建了六个容器,创建集群时可以直接使用容器名
      docker exec -it redis-6379 env REDISCLI_AUTH=123456 redis-cli --cluster create
      redis-6379:6379 redis-6380:6380 redis-6381:6381
      redis-6382:6382 redis-6383:6383 redis-6384:6384
      –cluster-replicas 1
      –cluster-yes
  1. 创建集群时 Waiting for the cluster to join 一直等待
    • 测试一下网络连通性
    • 确保每个 Redis 容器不仅暴露了客户端连接的端口(如 6379),还暴露了集群总线端口(如 16379)
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐