服务分布
一主四从五哨兵
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两个哨兵,验证读、写 — 读写正常
评论区