redis5.0 sentinel配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# Example sentinel.conf

# 绑定 IP 地址
bind 127.0.0.1 192.168.1.1

# 是否启用保护模式
protected-mode no

# 指定 sentinel 占用的端口
port 26379

# 是否守护进程方式运行
daemonize no

# 指定 sentinel 运行的 pid 文件位置
pidfile /var/run/redis-sentinel.pid

# 指定日志文件位置
logfile ""

# 指定可用于从外网访问 sentinel 的地址和端口
# 如果只指定了 ip,那么外部连接 sentinel 默认使用 port 的配置
# 如果只指定了 port,那么 sentinel 默认使用 local ip 配置
sentinel announce-ip 1.2.3.4
sentinel announce-port 1111

# 指定 sentinel 工作目录
dir /tmp

# 告诉 sentinel 监控这个主节点,并且只有在至少2个从节点认为其出错的情况下才发起故障转移
# 无论指定几个从节点发现故障时进行故障转移,一个 sentinel 需要被多数的 sentinel 承认才能进行故障转移
# 从节点是自动发现的,无需手动指定,启动 sentinel 之后将自动重写配置文件加入从节点的配置信息
# 当发生故障转移将从节点升级为 master 时也会从写配置文件
# master-name 不能包含特殊的字符和空格,可用案例:A-z、0-9、.-_等
sentinel monitor mymaster 127.0.0.1 6379 2

# 设置用于主从服务器进行身份验证的密码
# 要注意的是这个密码在所有 server 中都要设置为一样的,因为 master 出现故障时需要将 slave 设置为 master
# 如果各个 slave 密码不同,那么就无法建立连接
# 当然也可以都不设置密码,那么要保证自己的服务器处在一个安全的环境中
sentinel auth-pass mymaster MySUPER--secret-0123passw0rd

# 设置一个毫秒值,用于在从节点发现主节点多长时间没有正确回复 PONG 时认为其出现问题
sentinel down-after-milliseconds mymaster 30000

# 为防止复制风暴,需要设置一个合理值,指定出现故障转移时,并发同步数据的从节点数量
# 在进行数据同步时slave无法提供服务,数量指定过大,对于master节点的带宽也有要求
# 可以设置为1来保证只有一个slave处于不能处理命令请求的状态
sentinel parallel-syncs mymaster 1

# 设置探测发生故障的节点是否恢复的时间间隔,恢复之后将其作为一个从节点重新加入到 sentinel 中
# 故障转移超时时间
# 用处
# 1、同一个slave节点对同一个master节点两次故障转移之间的时间间隔
# 2、一个slave节点从故障master节点那里进行数据同步到被纠正为从正确的master节点那里进行数据同步所要花费的时间
# 3、如果要取消一个正在进行的故障转移,那么要在这个时间阶段内进行操作
# 4、进行故障转移时,所有slave节点指向新的master所需使用的最大时间,超过这个时间没有同步完成,slave依然会被正
# 确指向master,只是不会按照parallel-syncs配置的进行数据同步
sentinel failover-timeout mymaster 180000

# 脚本的使用
#
# sentinel notification-script和sentinel reconfig-script用来配置在发生故障转移后
# 调用指定的脚本文件来通知管理员,redis-server会根据脚本返回的结果进行相应的处理
# 1、如果脚本返回1,那么这个脚本将会被再次执行,默认重复10次
# 2、如果脚本返回2或者比2更高的一个值,脚本将不会重复执行
# 3、如果脚本执行过程中收到一个系统错误信号,那么将会和1进行相同操作
# 4、一个脚本的执行时间最大60秒,如果超过这个时间,脚本会被一个SIGKILL信号终止并重新执行

# 通知脚本
# sentinel发生任何级别的故障时都会调用这个脚本,比如实例失效等,这个脚本应该去通知管理员发生了故障
# 如果配置了这项但是配置路径中不存在这个脚本,sentinel启动会失败这个脚本会收到两个参数,第一个是事件类型,第二个是事件描述
sentinel notification-script mymaster /var/redis/notify.sh

# 客户端配置变更脚本
# 当一个master节点因为故障转移导致配置文件发生改变时通过此脚本通知各个客户端master发生改变的信息
# sentinel会传给脚本几个参数
# <master-name> <role> <state> <from-ip> <from-port> <to-ip> <to-port>
# <state> 当前总是 "failover"
# <role> 是 "leader" or "observer"
# 其余参数 from-ip, from-port, to-ip, to-port 用来表示旧的master和新的master的信息
# 这个脚本应该编写为通用脚本,并且可以被重复调用
sentinel client-reconfig-script mymaster /var/redis/reconfig.sh

# 安全
# 默认情况下 SENTINEL SET 无法在运行时更改配置文件,在设置了 notification-script 和 client-reconfig-script的前提下
# 这可以避免一个安全问题,就是客户端随便修改配置导致触发了故障转移的通知脚本
sentinel deny-scripts-reconfig yes

# redis命令重命名
# 有时候redis服务器需要某些配置才能正常工作,比如设置主从节点依赖关系,但是又不想让这些配置暴露给客户端
# 因此可以对他们进行重命名以避免客户端得知这些配置项并进行修改,经常会将redis作为一个服务提供给客户端
# 但是不想让客户端修改配置,就可以将重要配置重命名,致使客户端无法修改,比如CONFIG和SLAVEOF两个配置项
# 在这种情况下需要通知sentinel使用不同的命令名称,如果将mymaster节点的CONFIG重命名为GUESSME,可以像下面那样写
SENTINEL rename-command mymaster CONFIG GUESSME
# 设置后sentinel每次使用config时都将改用guessme,不需要关系大小写,sentinel set可以在运行时修改这项配置
# 如果要将命令设置为原始名称可以像下面这样写
SENTINEL rename-command mymaster CONFIG CONFIG