使用Docker在三台服务器上安装部署了1主2从3哨兵
192.168.140.197 master
192.168.140.198 slave
192.168.140.199 slave
安装Docker环境
创建配置文件存放目录
mkdir -p /data/disk/redis/data
下载Redis配置文件
cd /data/disk/redis/
wget http://download.redis.io/redis-stable/redis.conf
修改Redis.conf文件
# 修改bind 或者直接注释掉
bind 0.0.0.0
# 保护模式 配合bindip或者设置密码等访问
protected-mode no
# redis密码
requirepass 123456
# redis日志地址
logfile "/data/redis.log"
# 主节点密码 建议与主节点保值一致,否则故障切换时密码错误导致不同步
masterauth 123456
# 在slave的节点配置上添加 master上不需要
# 主节点IP 主节点端口地址
replicaof 192.168.140.197 6379
创建并启动节点
docker run -d --restart=always --privileged=true -p 6379:6379 \
-v /data/disk/redis/redis.conf:/etc/redis/redis.conf \
-v /data/disk/redis/data:/data \
--name redis redis:6.2.4 \
redis-server /etc/redis/redis.conf \
--appendonly yes
查看Redis状态
# 进入容器连接 redis客户端
docker exec -it redis redis-cli
# 输入密码
auth 123456
# 查看redis状态
info replication
# Master节点状态
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.140.199,port=6379,state=online,offset=1137958,lag=1
slave1:ip=192.168.140.198,port=6379,state=online,offset=1138098,lag=0
master_failover_state:no-failover
master_replid:8bbf12424cb844c55ef81eb0f677a68feef15ebf
master_replid2:9385ed583edd049d68454b2b42b05e7efe853594
master_repl_offset:1138098
second_repl_offset:1118607
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:364096
repl_backlog_histlen:774003
# Slave节点状态
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.140.197
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:1154590
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:8bbf12424cb844c55ef81eb0f677a68feef15ebf
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1154590
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1137236
repl_backlog_histlen:17355
# 如果从节点 master_link_status的值为down 查看一下redis.conf中设置的密码对不对
# 主节点requirepass与从节点的masterauth是否一样,不一样修改一样重新启动
验证是否同步
# Master节点
set bbhsky 123456
# Slave节点
get bbhsky
# 如果能正确获取到 证明搭建没问题了
哨兵模式Sentinel部署
哨兵节点建议为奇数,我们在三个redis服务器上分别部署(建议:单独一台、或多台服务器部署)
创建配置目录
mkdir /data/disk/redis-sentinel/data
下载并修改配置文件
cd /data/disk/redis-sentinel/
wget http://download.redis.io/redis-stable/sentinel.conf
# Reids Sentinel日志地址
logfile "/data/sentinel.log"
# mymaster 可以修改为自己的名称 但是配置内所有名称都需要改掉
# Master 节点的地址 和端口 后面的2 代表有2个sentinel认为主节点失败时开始选举新的主节点
sentinel monitor mymaster 192.168.140.197 6379 2
创建并启动节点
# 如果是在一台机器上启动3个哨兵,需要修改端口 例如:-p 26379:26379 -p 36379:26379 -p 46379:26379,这时候容器名称也需要改变;
docker run -it --restart=unless-stopped --privileged=true \
--name redis-sentinel -p 26379:26379 \
-v /data/disk/redis-sentinel/data:/data \
-v /data/disk/redis-sentinel/sentinel.conf:/usr/local/etc/redis/sentinel.conf \
-d redis \
redis-sentinel /usr/local/etc/redis/sentinel.conf
查看哨兵监控情况
# 进入容器连接 redis客户端
docker exec -it redis-sentinel redis-cli -p 26379
# 监控哨兵情况
127.0.0.1:26379> sentinel master mymaster
1) "name"
2) "mymaster"
3) "ip"
4) "192.168.140.197"
5) "port"
6) "6379"
7) "runid"
8) "7306162d9f6446b8f9baa91d1fd65064fba86cd6"
9) "flags"
10) "master"
11) "link-pending-commands"
12) "0"
13) "link-refcount"
14) "1"
15) "last-ping-sent"
16) "0"
17) "last-ok-ping-reply"
18) "860"
19) "last-ping-reply"
20) "860"
21) "down-after-milliseconds"
22) "30000"
23) "info-refresh"
24) "38"
25) "role-reported"
26) "master"
27) "role-reported-time"
28) "1115196"
29) "config-epoch"
30) "3"
31) "num-slaves"
32) "2"
33) "num-other-sentinels"
34) "3"
35) "quorum"
36) "2"
37) "failover-timeout"
38) "180000"
39) "parallel-syncs"
40) "1"
# name 监控名称
# ip 主节点IP
# port 主节点端口
# num-slaves 当前有几个从节点
# num-other-sentinels 有几个哨兵
# quorum 有几个哨兵失败重新选举
# failover-timeout 切换时间 秒