环境
角色 | 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
|