侧边栏壁纸
  • 累计撰写 39 篇文章
  • 累计创建 51 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

docker-compose部署redis主从+哨兵服务

叶子
2024-05-24 / 0 评论 / 0 点赞 / 96 阅读 / 4,273 字

服务分布

一主四从五哨兵

IP 节点分布主/备 Port 角色
10.250.** 6380 m1
10.16.** 6381 s1
10.16.** 6382 s2
10.16 .** 6383 s3
10.250.** 6384 s4
10.16.** 26380 sen1
10.250.** 26381 sen2
10.250.** 26382 sen3
10.250.** 26383 sen4
10.16.** 26384 sen5

docker-composr.yml

version: '3.3'
services:

  redis6380: # 服务名
    image: redis:3.0.7 # 使用的镜像
    container_name: redis6380 # docker启动的容器名称
    ports:
      - '6380:6380' # 启动的端口(本机:容器)
    volumes: # 挂载卷的位置(本机:容器),自己创建好目录即可,只需修改本机的目录路径,不需要修改容器的路径
      - /root/lzm-upgrade/6380/data:/data
      - /root/lzm-upgrade/redis6380.conf:/usr/local/etc/redis/redis.conf
    #配置文件启动命令
    command: redis-server /usr/local/etc/redis/redis.conf

  redis6381:
    image: redis:3.0.7
    container_name: redis6381
    ports:
      - '6381:6381'
    volumes:
      - /root/lzm-upgrade/6381/data:/data
      - /root/lzm-upgrade/redis6381.conf:/usr/local/etc/redis/redis.conf
    command: redis-server /usr/local/etc/redis/redis.conf
    depends_on: # 设置依赖关系,哨兵等待redis服务启动成功之后再启动
      - redis6380

  redis6382:
    image: redis:3.0.7
    container_name: redis6382
    ports:
      - '6382:6382'
    volumes:
      - /root/lzm-upgrade/6382/data:/data
      - /root/lzm-upgrade/redis6382.conf:/usr/local/etc/redis/redis.conf
    command: redis-server /usr/local/etc/redis/redis.conf
    depends_on: # 设置依赖关系,哨兵等待redis服务启动成功之后再启动
      - redis6380

  redis6383:
    image: redis:3.0.7
    container_name: redis6383
    ports:
      - '6383:6383'
    volumes:
      - /root/lzm-upgrade/6383/data:/data
      - /root/lzm-upgrade/redis6383.conf:/usr/local/etc/redis/redis.conf
    command: redis-server /usr/local/etc/redis/redis.conf
    depends_on: # 设置依赖关系,哨兵等待redis服务启动成功之后再启动
      - redis6380

  redis6384:
    image: redis:3.0.7
    container_name: redis6384
    ports:
      - '6384:6384'
    volumes:
      - /root/lzm-upgrade/6384/data:/data
      - /root/lzm-upgrade/redis6384.conf:/usr/local/etc/redis/redis.conf
    command: redis-server /usr/local/etc/redis/redis.conf
    depends_on: # 设置依赖关系,哨兵等待redis服务启动成功之后再启动
      - redis6380

  sentinel26380:
    image: redis:3.0.7
    container_name: sentinel26380
    ports:
      - '26380:26380'
    volumes:
      - /root/lzm-upgrade/26380/data:/data
      - /root/lzm-upgrade/sentinel26380.conf:/usr/local/etc/redis/sentinel.conf
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    depends_on: # 设置依赖关系,哨兵等待redis服务启动成功之后再启动
      - redis6380
      - redis6381
      - redis6382
      - redis6383
      - redis6384

  sentinel26381:
    image: redis:3.0.7
    container_name: sentinel26381
    ports:
      - '26381:26381'
    volumes:
      - /root/lzm-upgrade/26381/data:/data
      - /root/lzm-upgrade/sentinel26381.conf:/usr/local/etc/redis/sentinel.conf
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    depends_on:
      - redis6380
      - redis6381
      - redis6382
      - redis6383
      - redis6384

  sentinel26382:
    image: redis:3.0.7
    container_name: sentinel26382
    ports:
      - '26382:26382'
    volumes:
      - /root/lzm-upgrade/26382/data:/data
      - /root/lzm-upgrade/sentinel26382.conf:/usr/local/etc/redis/sentinel.conf
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    depends_on:
      - redis6380
      - redis6381
      - redis6382
      - redis6383
      - redis6384

  sentinel26383:
    image: redis:3.0.7
    container_name: sentinel26383
    ports:
      - '26383:26383'
    volumes:
      - /root/lzm-upgrade/26383/data:/data
      - /root/lzm-upgrade/sentinel26383.conf:/usr/local/etc/redis/sentinel.conf
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    depends_on:
      - redis6380
      - redis6381
      - redis6382
      - redis6383
      - redis6384

  sentinel26384:
    image: redis:3.0.7
    container_name: sentinel26384
    ports:
      - '26384:26384'
    volumes:
      - /root/lzm-upgrade/26384/data:/data
      - /root/lzm-upgrade/sentinel26384.conf:/usr/local/etc/redis/sentinel.conf
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    depends_on:
      - redis6380
      - redis6381
      - redis6382
      - redis6383
      - redis6384

redis6380.conf

# redis 服务器的端口号(默认:6380)
port 6380

# 绑定的 IP 地址,如果设置为 127.0.0.1,则只能本地访问;若设置为 0.0.0.0,则监听所有接口(默认:127.0.0.1)
bind 0.0.0.0 

# 设置密码,客户端连接时需要提供密码才能进行操作,如果不设置密码,可以注释掉此行(默认:无)
# requirepass foobared
requirepass bingo

# 是否以守护进程(daemon)模式运行,默认为 "no",设置为 "yes" 后 Redis 会在后台运行
daemonize no

# 设置日志级别(默认:notice)。可以是 debug、verbose、notice、warning
loglevel notice

# 设置日志文件的路径(默认:空字符串),如果不设置,日志会输出到标准输出
logfile "6380.log"

# 设置数据库数量(默认:16),Redis 使用数据库索引从 0 到 15
databases 16

# 是否启用 AOF 持久化,默认为 "no"。如果设置为 "yes",将在每个写操作执行时将其追加到文件中
appendonly no

# 设置 AOF 持久化的文件路径(默认:appendonly.aof)
appendfilename "appendonly6380.aof"

# 设置是否开启 RDB 持久化,默认为 "yes"。如果设置为 "no",禁用 RDB 持久化功能
save 900 1
save 300 10
save 60 10000

# 设置 RDB 持久化文件的名称(默认:dump.rdb)
dbfilename dump6380.rdb

masterauth bingo

redis6381.conf

# redis 服务器的端口号(默认:6381)
port 6381

# 绑定的 IP 地址,如果设置为 127.0.0.1,则只能本地访问;若设置为 0.0.0.0,则监听所有接口(默认:127.0.0.1)
bind 0.0.0.0 

# 设置密码,客户端连接时需要提供密码才能进行操作,如果不设置密码,可以注释掉此行(默认:无)
# requirepass foobared
requirepass bingo

# 是否以守护进程(daemon)模式运行,默认为 "no",设置为 "yes" 后 Redis 会在后台运行
daemonize no

# 设置日志级别(默认:notice)。可以是 debug、verbose、notice、warning
loglevel notice

# 设置日志文件的路径(默认:空字符串),如果不设置,日志会输出到标准输出
logfile "6381.log"

# 设置数据库数量(默认:16),Redis 使用数据库索引从 0 到 15
databases 16

# 是否启用 AOF 持久化,默认为 "no"。如果设置为 "yes",将在每个写操作执行时将其追加到文件中
appendonly no

# 设置 AOF 持久化的文件路径(默认:appendonly.aof)
appendfilename "appendonly6381.aof"

# 设置是否开启 RDB 持久化,默认为 "yes"。如果设置为 "no",禁用 RDB 持久化功能
save 900 1
save 300 10
save 60 10000

# 设置 RDB 持久化文件的名称(默认:dump.rdb)
dbfilename dump6381.rdb

masterauth bingo

slaveof 172.21.0.217 6380

redis6382.conf

# redis 服务器的端口号(默认:6382)
port 6382

# 绑定的 IP 地址,如果设置为 127.0.0.1,则只能本地访问;若设置为 0.0.0.0,则监听所有接口(默认:127.0.0.1)
bind 0.0.0.0 

# 设置密码,客户端连接时需要提供密码才能进行操作,如果不设置密码,可以注释掉此行(默认:无)
# requirepass foobared
requirepass bingo

# 是否以守护进程(daemon)模式运行,默认为 "no",设置为 "yes" 后 Redis 会在后台运行
daemonize no

# 设置日志级别(默认:notice)。可以是 debug、verbose、notice、warning
loglevel notice

# 设置日志文件的路径(默认:空字符串),如果不设置,日志会输出到标准输出
logfile "6382.log"

# 设置数据库数量(默认:16),Redis 使用数据库索引从 0 到 15
databases 16

# 是否启用 AOF 持久化,默认为 "no"。如果设置为 "yes",将在每个写操作执行时将其追加到文件中
appendonly no

# 设置 AOF 持久化的文件路径(默认:appendonly.aof)
appendfilename "appendonly6382.aof"

# 设置是否开启 RDB 持久化,默认为 "yes"。如果设置为 "no",禁用 RDB 持久化功能
save 900 1
save 300 10
save 60 10000

# 设置 RDB 持久化文件的名称(默认:dump.rdb)
dbfilename dump6382.rdb

masterauth bingo

slaveof 172.21.0.217 6380

redis6383.conf

# redis 服务器的端口号(默认:6383)
port 6383

# 绑定的 IP 地址,如果设置为 127.0.0.1,则只能本地访问;若设置为 0.0.0.0,则监听所有接口(默认:127.0.0.1)
bind 0.0.0.0 

# 设置密码,客户端连接时需要提供密码才能进行操作,如果不设置密码,可以注释掉此行(默认:无)
# requirepass foobared
requirepass bingo

# 是否以守护进程(daemon)模式运行,默认为 "no",设置为 "yes" 后 Redis 会在后台运行
daemonize no

# 设置日志级别(默认:notice)。可以是 debug、verbose、notice、warning
loglevel notice

# 设置日志文件的路径(默认:空字符串),如果不设置,日志会输出到标准输出
logfile "6383.log"

# 设置数据库数量(默认:16),Redis 使用数据库索引从 0 到 15
databases 16

# 是否启用 AOF 持久化,默认为 "no"。如果设置为 "yes",将在每个写操作执行时将其追加到文件中
appendonly no

# 设置 AOF 持久化的文件路径(默认:appendonly.aof)
appendfilename "appendonly6383.aof"

# 设置是否开启 RDB 持久化,默认为 "yes"。如果设置为 "no",禁用 RDB 持久化功能
save 900 1
save 300 10
save 60 10000

# 设置 RDB 持久化文件的名称(默认:dump.rdb)
dbfilename dump6383.rdb

masterauth bingo

slaveof 172.21.0.217 6380

redis6384.conf

# redis 服务器的端口号(默认:6384)
port 6384

# 绑定的 IP 地址,如果设置为 127.0.0.1,则只能本地访问;若设置为 0.0.0.0,则监听所有接口(默认:127.0.0.1)
bind 0.0.0.0 

# 设置密码,客户端连接时需要提供密码才能进行操作,如果不设置密码,可以注释掉此行(默认:无)
# requirepass foobared
requirepass bingo

# 是否以守护进程(daemon)模式运行,默认为 "no",设置为 "yes" 后 Redis 会在后台运行
daemonize no

# 设置日志级别(默认:notice)。可以是 debug、verbose、notice、warning
loglevel notice

# 设置日志文件的路径(默认:空字符串),如果不设置,日志会输出到标准输出
logfile "6384.log"

# 设置数据库数量(默认:16),Redis 使用数据库索引从 0 到 15
databases 16

# 是否启用 AOF 持久化,默认为 "no"。如果设置为 "yes",将在每个写操作执行时将其追加到文件中
appendonly no

# 设置 AOF 持久化的文件路径(默认:appendonly.aof)
appendfilename "appendonly6384.aof"

# 设置是否开启 RDB 持久化,默认为 "yes"。如果设置为 "no",禁用 RDB 持久化功能
save 900 1
save 300 10
save 60 10000

# 设置 RDB 持久化文件的名称(默认:dump.rdb)
dbfilename dump6384.rdb

masterauth bingo

slaveof 172.21.0.217 6380

sentinel26380.conf

# 服务器的端口号
port 26380

# 可访问的 IP 地址
bind 0.0.0.0

# 日志文件
logfile "sentinel26380.log"

# 监控的主机(格式为 sentinel monitor 主机名 主机ip 主机端口 多少个哨兵节点都认为主节点不可达时才会进行故障转移的数量)
sentinel monitor mymaster 172.21.0.217 6380 2

# 监控的主机密码(格式为 sentinel auth-pass 主机名 主机连接密码)
sentinel down-after-milliseconds mymaster 5000

sentinel failover-timeout mymaster 60000

# 指定在多少毫秒内,哨兵节点没有收到主节点的响应时,就会将主节点判定为下线状态(格式为 sentinel down-after-milliseconds 主机名 超时毫秒数)
sentinel auth-pass mymaster bingo

# 指定进行故障转移的超时时间,即在多少毫秒内完成故障转移操作(格式为 sentinel failover-timeout 主机名 主机连接密码)
sentinel config-epoch mymaster 0

# 这个配置项用于指定在进行故障转移时可以同时同步的从节点数量(格式为 sentinel parallel-syncs 主机名 主机连接密码)
sentinel leader-epoch mymaster 0

sentinel26381.conf

# 服务器的端口号
port 26381

# 可访问的 IP 地址
bind 0.0.0.0

# 日志文件
logfile "sentinel26381.log"

# 监控的主机(格式为 sentinel monitor 主机名 主机ip 主机端口 多少个哨兵节点都认为主节点不可达时才会进行故障转移的数量)
sentinel monitor mymaster 172.21.0.217 6380 2

# 监控的主机密码(格式为 sentinel auth-pass 主机名 主机连接密码)
sentinel down-after-milliseconds mymaster 5000

sentinel failover-timeout mymaster 60000

# 指定在多少毫秒内,哨兵节点没有收到主节点的响应时,就会将主节点判定为下线状态(格式为 sentinel down-after-milliseconds 主机名 超时毫秒数)
sentinel auth-pass mymaster bingo

# 指定进行故障转移的超时时间,即在多少毫秒内完成故障转移操作(格式为 sentinel failover-timeout 主机名 主机连接密码)
sentinel config-epoch mymaster 0

# 这个配置项用于指定在进行故障转移时可以同时同步的从节点数量(格式为 sentinel parallel-syncs 主机名 主机连接密码)
sentinel leader-epoch mymaster 0

sentinel26382.conf

# 服务器的端口号
port 26382

# 可访问的 IP 地址
bind 0.0.0.0

# 日志文件
logfile "sentinel26382.log"

# 监控的主机(格式为 sentinel monitor 主机名 主机ip 主机端口 多少个哨兵节点都认为主节点不可达时才会进行故障转移的数量)
sentinel monitor mymaster 172.21.0.217 6380 2

# 监控的主机密码(格式为 sentinel auth-pass 主机名 主机连接密码)
sentinel down-after-milliseconds mymaster 5000

sentinel failover-timeout mymaster 60000

# 指定在多少毫秒内,哨兵节点没有收到主节点的响应时,就会将主节点判定为下线状态(格式为 sentinel down-after-milliseconds 主机名 超时毫秒数)
sentinel auth-pass mymaster bingo

# 指定进行故障转移的超时时间,即在多少毫秒内完成故障转移操作(格式为 sentinel failover-timeout 主机名 主机连接密码)
sentinel config-epoch mymaster 0

# 这个配置项用于指定在进行故障转移时可以同时同步的从节点数量(格式为 sentinel parallel-syncs 主机名 主机连接密码)
sentinel leader-epoch mymaster 0


sentinel26383.conf

# 服务器的端口号
port 26383

# 可访问的 IP 地址
bind 0.0.0.0

# 日志文件
logfile "sentinel26383.log"

# 监控的主机(格式为 sentinel monitor 主机名 主机ip 主机端口 多少个哨兵节点都认为主节点不可达时才会进行故障转移的数量)
sentinel monitor mymaster 172.21.0.217 6380 2

# 监控的主机密码(格式为 sentinel auth-pass 主机名 主机连接密码)
sentinel down-after-milliseconds mymaster 5000

sentinel failover-timeout mymaster 60000

# 指定在多少毫秒内,哨兵节点没有收到主节点的响应时,就会将主节点判定为下线状态(格式为 sentinel down-after-milliseconds 主机名 超时毫秒数)
sentinel auth-pass mymaster bingo

# 指定进行故障转移的超时时间,即在多少毫秒内完成故障转移操作(格式为 sentinel failover-timeout 主机名 主机连接密码)
sentinel config-epoch mymaster 0

# 这个配置项用于指定在进行故障转移时可以同时同步的从节点数量(格式为 sentinel parallel-syncs 主机名 主机连接密码)
sentinel leader-epoch mymaster 0


sentinel26384.conf

# 服务器的端口号
port 26384

# 可访问的 IP 地址
bind 0.0.0.0

# 日志文件
logfile "sentinel26384.log"

# 监控的主机(格式为 sentinel monitor 主机名 主机ip 主机端口 多少个哨兵节点都认为主节点不可达时才会进行故障转移的数量)
sentinel monitor mymaster 172.21.0.217 6380 2

# 监控的主机密码(格式为 sentinel auth-pass 主机名 主机连接密码)
sentinel down-after-milliseconds mymaster 5000

sentinel failover-timeout mymaster 60000

# 指定在多少毫秒内,哨兵节点没有收到主节点的响应时,就会将主节点判定为下线状态(格式为 sentinel down-after-milliseconds 主机名 超时毫秒数)
sentinel auth-pass mymaster bingo

# 指定进行故障转移的超时时间,即在多少毫秒内完成故障转移操作(格式为 sentinel failover-timeout 主机名 主机连接密码)
sentinel config-epoch mymaster 0

# 这个配置项用于指定在进行故障转移时可以同时同步的从节点数量(格式为 sentinel parallel-syncs 主机名 主机连接密码)
sentinel leader-epoch mymaster 0

场景验证

  • 服务全部在线,验证读写 — 读写正常
  • 备环境全部down ,验证读、写 — 读写正常
  • 主环境全部down,验证读、写 — 读写正常
  • m1 down,验证读、写 — 读写正常
  • 随机down一个从,验证读、写 — 读写正常
  • 随机down两个从,验证读、写 — 读写正常
  • 随机down一个哨兵,验证读、写 — 读写正常
  • 随机down两个哨兵,验证读、写 — 读写正常
0

评论区