Docker 版 Redis 一主两从三哨兵完整搭建笔记

环境说明:

  • Redis 版本:redis:7.0.4

  • 宿主机 IP:192.168.7.7

  • 主库端口:6379,从库1端口:6380,从库2端口:6381

  • 哨兵端口:26379、26380、26381


一、准备工作

1.1 拉取 Redis 镜像

 docker pull redis:7.0.4

1.2 创建工作目录

 mkdir -p /mydata/redis-sentinel/{redis,sentinel}
 cd /mydata/redis-sentinel

1.3 创建 Docker 网络

 docker network create redis-net

二、搭建 Redis 主从集群(1 主 2 从)

2.1 启动主节点

 docker run -d \
   --name redis-master \
   --restart always \
   --network redis-net \
   -p 6379:6379 \
   redis:7.0.4 \
   redis-server \
     --requirepass 123456 \
     --masterauth 123456 \
     --appendonly yes \
     --protected-mode no \
     --slave-announce-ip 192.168.7.7 \
     --slave-announce-port 6379

2.2 启动从节点 1

 docker run -d \
   --name redis-slave-1 \
   --restart always \
   --network redis-net \
   -p 6380:6379 \
   redis:7.0.4 \
   redis-server \
     --requirepass 123456 \
     --masterauth 123456 \
     --appendonly yes \
     --protected-mode no \
     --slaveof redis-master 6379 \
     --slave-announce-ip 192.168.7.7 \
     --slave-announce-port 6380

2.3 启动从节点 2

 docker run -d \
   --name redis-slave-2 \
   --restart always \
   --network redis-net \
   -p 6381:6379 \
   redis:7.0.4 \
   redis-server \
     --requirepass 123456 \
     --masterauth 123456 \
     --appendonly yes \
     --protected-mode no \
     --slaveof redis-master 6379 \
     --slave-announce-ip 192.168.7.7 \
     --slave-announce-port 6381

2.4 验证主从状态

 docker exec -it redis-master redis-cli -a 123456 info replication

输出应显示:

 Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
 # Replication
 role:master
 connected_slaves:2
 slave0:ip=192.168.7.7,port=6380,state=online,offset=56,lag=0
 slave1:ip=192.168.7.7,port=6381,state=online,offset=56,lag=0
 master_failover_state:no-failover
 master_replid:1fa2cbe716e3941eae48d2e958780c51eeff90b3
 master_replid2:0000000000000000000000000000000000000000
 master_repl_offset:56
 second_repl_offset:-1
 repl_backlog_active:1
 repl_backlog_size:1048576
 repl_backlog_first_byte_offset:1
 repl_backlog_histlen:56


三、搭建三个哨兵节点

3.1 创建哨兵配置文件

 cd /mydata/redis-sentinel/sentinel

创建 sentinel1.conf

 cat > sentinel1.conf <<'EOF'
 port 26379
 protected-mode no
 sentinel monitor mymaster 192.168.7.7 6379 2
 sentinel auth-pass mymaster 123456
 sentinel down-after-milliseconds mymaster 5000
 sentinel failover-timeout mymaster 10000
 EOF

创建 sentinel2.conf

 cat > sentinel2.conf <<'EOF'
 port 26379
 protected-mode no
 sentinel monitor mymaster 192.168.7.7 6379 2
 sentinel auth-pass mymaster 123456
 sentinel down-after-milliseconds mymaster 5000
 sentinel failover-timeout mymaster 10000
 EOF

创建 sentinel3.conf

 cat > sentinel3.conf <<'EOF'
 port 26379
 protected-mode no
 sentinel monitor mymaster 192.168.7.7 6379 2
 sentinel auth-pass mymaster 123456
 sentinel down-after-milliseconds mymaster 5000
 sentinel failover-timeout mymaster 10000
 EOF

3.2 启动哨兵节点

启动哨兵 1

 docker run -d \
   --name redis-sentinel-1 \
   --restart always \
   --network redis-net \
   -p 26379:26379 \
   -v /mydata/redis-sentinel/sentinel/sentinel1.conf:/etc/redis/sentinel.conf \
   redis:7.0.4 \
   redis-sentinel /etc/redis/sentinel.conf

启动哨兵 2

 docker run -d \
   --name redis-sentinel-2 \
   --restart always \
   --network redis-net \
   -p 26380:26379 \
   -v /mydata/redis-sentinel/sentinel/sentinel2.conf:/etc/redis/sentinel.conf \
   redis:7.0.4 \
   redis-sentinel /etc/redis/sentinel.conf

启动哨兵 3

 docker run -d \
   --name redis-sentinel-3 \
   --restart always \
   --network redis-net \
   -p 26381:26379 \
   -v /mydata/redis-sentinel/sentinel/sentinel3.conf:/etc/redis/sentinel.conf \
   redis:7.0.4 \
   redis-sentinel /etc/redis/sentinel.conf


四、验证集群状态

4.1 查看哨兵监控的主节点信息

 docker exec -it redis-sentinel-1 redis-cli -p 26379 sentinel master mymaster

输出示例:

  1) "name"
  2) "mymaster"
  3) "ip"
  4) "192.168.7.7"
  5) "port"
  6) "6379"
  7) "runid"
  8) "acea7d6d39a23b569a5f967b029a21a4cf706473"
  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) "481"
 19) "last-ping-reply"
 20) "481"
 21) "down-after-milliseconds"
 22) "5000"
 23) "info-refresh"
 24) "3888"
 25) "role-reported"
 26) "master"
 27) "role-reported-time"
 28) "13964"
 29) "config-epoch"
 30) "0"
 31) "num-slaves"
 32) "2"
 33) "num-other-sentinels"
 34) "2"
 35) "quorum"
 36) "2"
 37) "failover-timeout"
 38) "10000"
 39) "parallel-syncs"
 40) "1"

4.2 查看从节点信息

 docker exec -it redis-sentinel-1 redis-cli -p 26379 sentinel slaves mymaster

4.3 查看哨兵集群信息

 docker exec -it redis-sentinel-1 redis-cli -p 26379 sentinel sentinels mymaster

4.4 查看哨兵日志

 docker logs redis-sentinel-1