环境

角色 | IP | Port
——- | — sentinel-26379 | 127.0.0.1 | 26379
sentinel-26380 | 127.0.0.1 | 26380 sentinel-26381 | 127.0.0.1 | 26381 master-7000 | 127.0.0.1 | 7000 slave-7001 | 127.0.0.1 | 7001 slave-7002 | 127.0.0.1 | 7002

配置

主节点

配置

redis-7000.conf:

1
2
3
4
5
6
daemonize yes
pidfile /var/run/redis-7000.pid
port 7000
logfile "7000.log"
dbfilename dump-7000.rdb
dir /opt/redis/data

启动

1
redis-server redis-7000.conf

从节点

配置

1
2
3
4
sed "s/7000/7001/g" redis-7000.conf > redis-7001.conf
sed "s/7000/7002/g" redis-7000.conf > redis-7002.conf
echo "slaveof 127.0.0.1 7000" >> redis-7001.conf
echo "slaveof 127.0.0.1 7000" >> redis-7002.conf

slave-7001 的 redis-7001.conf:

1
2
3
4
5
6
7
daemonize yes
pidfile /var/run/redis-7001.pid
port 7001
logfile "7001.log"
dbfilename dump-7001.rdb
dir /opt/redis/data
slaveof 127.0.0.1 7000

slave-7002 的 redis-7002.conf:

1
2
3
4
5
6
7
daemonize yes
pidfile /var/run/redis-7002.pid
port 7002
logfile "7002.log"
dbfilename dump-7002.rdb
dir /opt/redis/data
slaveof 127.0.0.1 7000

启动

1
2
redis-server redis-7001.conf
redis-server redis-7002.conf

查看主从复制关系

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# redis-cli -p 7000 info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=7001,state=online,offset=323,lag=1
slave1:ip=127.0.0.1,port=7002,state=online,offset=323,lag=1
master_repl_offset:323
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:322

Sentinel 节点

1
2
3
4
5
6
7
port ${port}
logfile "${port}.log"
dir /opt/redis/data
sentinel minitor mymaster 127.0.0.1 7000 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
  • sentinel minitor mymaster 127.0.0.1 7000 2 表示sentinel节点监控的主节点的名字是 mymaster,IP是127.0.0.1,端口是 7000,2 表示有2个sentinel节点认为master节点存在问题,就会触发故障自动转移。也就是至少有多少个sentinel来判断是否故障。
  • sentinel down-after-milliseconds mymaster 30000 表示sentinel对master进行判断,类似于去pin,多少时间(30秒)内不通就认为出现故障。
  • sentinel parallel-syncs mymaster 1 故障配置,表示选择了新的master之后,其他老的 slave 会对新的master进行复制,1 表示每次只复制一个
  • sentinel failover-timeout mymaster 180000 表示故障转移时间

操作如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# cp sentinel.conf config/
# cd config/
# cat sentinel.conf | grep -v "#" | grep -v "^$"
port 26379
dir /tmp
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
# cat sentinel.conf | grep -v "#" | grep -v "^$" > redis-sentinel-26379.conf
# vim redis-sentinel-26379.conf
daemonize yes
port 26379
logfile "26379.log"
dir /opt/redis/data
sentinel monitor mymaster 127.0.0.1 7000 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000

启动

1
redis-sentinel redis-sentinel-26379.conf

再重新查看 redis-sentinel-26379.conf 配置文件,会发现配置发生了改变:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# cat redis-sentinel-26379.conf
daemonize yes
port 26379
logfile "26379.log"
dir "/opt/redis-3.0.7/data"
sentinel monitor mymaster 127.0.0.1 7000 2
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0
sentinel known-slave mymaster 127.0.0.1 7001
# Generated by CONFIG REWRITE
sentinel known-slave mymaster 127.0.0.1 7002
sentinel current-epoch 0

比如多了一个配置重写产生的配置,另外还发现了mymaster 主节点的两个slave:

1
2
sentinel known-slave mymaster 127.0.0.1 7001
sentinel known-slave mymaster 127.0.0.1 7002

另外还把一些默认的配置移除了,比如:

1
2
3
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000

接着再添加另外两个 sentinel 节点:

1
2
sed "s/26379/26380/g" redis-sentinel-26379.conf > redis-sentinel-26380.conf
sed "s/26379/26381/g" redis-sentinel-26379.conf > redis-sentinel-26381.conf

启动:

1
2
# redis-sentinel redis-sentinel-26380.conf
# redis-sentinel redis-sentinel-26381.conf