参考博客:https://www.jellythink.com/archives/379
spring boot2.x 整合Redis哨兵模式:https://blog.csdn.net/qq_21187515/article/details/90230835
一、准备:
1、centos7
2、官网下载安装包 redis-xx.tar.gz
二、安装:
1、yum安装gcc依赖:
$ yum install -y gcc
2、解压压缩包:
$ tar -zxvf redis-4.0.11.tar.gz
3、安装:
$ cd redis-4.0.11
$ make MALLOC=libc
$ cd src
$ make install
CC Makefile.dep
Hint: It's a good idea to run 'make test' ;)
INSTALL install
INSTALL install
INSTALL install
INSTALL install
INSTALL install
4、配置参数并启动:
- 编辑文件 redis.conf
# 指定端口
port 6379
# 绑定IP如果需要远程访问,请注释掉
# bind 127.0.0.1
# 是否以后台进程运行
daemonize yes
# 禁止外网访问redis,根据自身情况配置
protected-mode no
# 指定Redis日志
logfile "6379.log"
# 数据备份文件的文件名
dbfilename "dump-6379.rdb"
# 指定数据文件存放位置
dir "/opt/redis/redis-4.0.11/src"
- 启动
$ cd src/
$ ./redis-server ../redis-6379.conf
# 查看服务是否启动成功
$ ps -aux|grep redis
root 19906 0.1 0.2 143148 3524 ? Ssl 04:55 0:10 ./redis-server *:6379
- 关闭或者配置防火墙,远程访问;
- 到这里简单Redis安装启动就了!
三、主从配置:
- 主从,主机和从机的数据完全一致,主机支持数据的写入和读取等各项操作,而从机则只支持与主机数据的同步和读取;
- 主从模式很好的解决了数据备份问题,读写分离目的。
角色 | 配置文件 | 端口 |
---|---|---|
主 | redis-6379.conf | 6379 |
从 | redis-6380.conf | 6380 |
从 | redis-6381.conf | 6381 |
redis-6379.conf
port 6379
# bind 127.0.0.1
daemonize yes
protected-mode no
logfile "6379.log"
dbfilename "dump-6379.rdb"
dir "/opt/redis/redis-4.0.11/src"
redis-6380.conf
port 6380
# bind 127.0.0.1
daemonize yes
protected-mode no
logfile "6380.log"
dbfilename "dump-6380.rdb"
dir "/opt/redis/redis-4.0.11/src"
slaveof 127.0.0.1 6379
redis-6381.conf
port 6381
# bind 127.0.0.1
daemonize yes
protected-mode no
logfile "6381.log"
dbfilename "dump-6381.rdb"
dir "/opt/redis/redis-4.0.11/src"
slaveof 127.0.0.1 6379
- 接下来启动Redis:
$ ./redis-server ../redis-6379.conf
$ ./redis-server ../redis-6380.conf
$ ./redis-server ../redis-6381.conf
- 查看Redis服务:
$ ps -aux|grep redis
root 19906 0.1 0.2 143148 3524 ? Rsl 04:55 0:19 ./redis-server *:6379
root 20114 0.1 0.2 143108 3084 ? Rsl 06:36 0:11 ./redis-server *:6380
root 19647 0.1 0.2 143112 3432 ? Rsl 03:28 0:25 ./redis-server *:6381
使用客户端连接服务在主服务[6379]添加数据,然后再从服务[6380,6381]查询;不出意外的话此时Redis简单主从搭建完成!
四、哨兵模式:
- 上面配置了主从,实现读写分离,解决了数据备份和单例可能存在的性能问题;
- 但是也出现了新的问题,如果主节点由于故障下线了,那么从节点因为没有主节点而同步中断,因而需要人工进行故障转移工作。
- Redis提供了(sentinel哨兵配置)解决这个问题,好了,能动手就不多动口...开干..
- 基于上节的主从搭建;
- (sentinel哨兵)配置规划:
角色 | 配置文件 | 端口 |
---|---|---|
sentienl | sentinel-26379.conf | 26379 |
sentienl | sentinel-26380.conf | 26380 |
sentienl | sentinel-26381.conf | 26381 |
建议哨兵至少部署3个,并且使用奇数个哨兵。Redis Sentinel的节点数量要满足2n+1(n>=1)的奇数个。
- sentinel-26379.conf
port 26379
daemonize yes
dir "/opt/redis/data/sentinel-26379"
logfile "/opt/redis/data/sentinel-26379/sentinel.log"
# 表示sentinel监控的master的名字叫做mymaster,监控的的master地址为127.0.0.1,端口号为6379;
# 行尾最后的2表示当集群中有2个sentinel认为master死了时,才能真正认为该master已经不可用了
sentinel monitor mymaster 127.0.0.1 6379 2
# 表示master在多少毫秒内无反应,哨兵会开始进行master-slave间的切换,使用“选举”机制
sentinel down-after-milliseconds mymaster 30000
# 在发生failover主备切换时,这个选项指定了最多可以有多少个slave同时对新的master进行同步,这个数字越小,完成failover所需的时间就越长,但是如果这个数字越大,就意味着越多的slave因为replication而不可用。可以通过将这个值设为1来保证每次只有一个slave处于不能处理命令请求的状态
sentinel parallel-syncs mymaster 1
# 同一个sentinel对同一个master两次failover之间的间隔时间
sentinel failover-timeout mymaster 180000
- sentinel-26380.conf
port 26380
daemonize yes
dir "/opt/redis/data/sentinel-26380"
logfile "/opt/redis/data/sentinel-26380/sentinel.log"
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
- sentinel-26381.conf
port 26381
daemonize yes
dir "/opt/redis/data/sentinel-26381"
logfile "/opt/redis/data/sentinel-26381/sentinel.log"
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
- 上面的哨兵配置都OK了,现在按顺序启动:
Redis Master(主服务) -> Redis Slave(从服务) -> Redis Sentinel(哨兵服务)
- redis服务的启动前面已经说过了,这里说一下Sentinel(哨兵)服务启动:
$ ./redis-sentinel ../sentinel-26379.conf
$ ./redis-sentinel ../sentinel-26380.conf
$ ./redis-sentinel ../sentinel-26381.conf
- 查看服务:
$ ps -aux|grep redis
root 19647 0.1 0.2 143112 3432 ? Ssl 03:28 0:28 ./redis-server *:6381
root 19885 0.2 0.1 141984 2348 ? Ssl 04:50 0:46 ./redis-sentinel *:26379 [sentinel]
root 19892 0.2 0.1 141956 2324 ? Ssl 04:50 0:46 ./redis-sentinel *:26380 [sentinel]
root 19897 0.2 0.1 141960 2296 ? Ssl 04:51 0:46 ./redis-sentinel *:26381 [sentinel]
root 19906 0.1 0.2 143148 3524 ? Ssl 04:55 0:21 ./redis-server *:6379
root 20114 0.1 0.2 143108 3084 ? Ssl 06:36 0:13 ./redis-server *:6380
root 20507 0.0 0.0 112708 984 pts/0 R+ 09:38 0:00 grep --color=auto redis
- 可以看到服务都已启动成功!下面进行简单测试:
我们可以通过redis-cli命令来连接sentinel
$ ./redis-cli -h 127.0.0.1 -p 26379
127.0.0.1:26379> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3
通过redis-cli命令来连接服务端查看主从情况:
$ ./redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=3512395,lag=0
slave1:ip=127.0.0.1,port=6381,state=online,offset=3512395,lag=0
master_replid:790efd2d1a780fce7c94b677a7493dd9ba1fd4e7
master_replid2:b7f1e454f5ae38b13d9703f2484003b9fbf5dfd2
master_repl_offset:3512528
second_repl_offset:1232926
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2463953
repl_backlog_histlen:1048576
- 到这里就已经搭建好了Redis sentinel哨兵以及Redis Master-Slave。现在我们就可以通过关闭Master来模拟Master故障,从而测试Redis sentinel哨兵。
五、Redis配置文件详解:
- redis.conf配置文件说明:
################################## 引用设置 ###################################
# 不同redis server可以使用同一个模版配置作为主配置,并引用其它配置文件用于本server的个性化设置
# include并不会被CONFIG REWRITE命令覆盖。但是主配置文件的选项会被覆盖。
# 想故意覆盖主配置的话就把include放文件前面,否则最好放末尾
# include /path/to/local.conf
# include /path/to/other.conf
################################## 网络设置 ###################################
# 不指定bind的话redis将会监听所有网络接口。这个配置是肯定需要指定的
# 下面这个配置是只允许本地客户端访问
bind 127.0.0.1
# 是否开启保护模式。默认开启,如果没有设置bind项的ip和redis密码的话,服务将只允许本地访问
protected-mode yes
# 端口设置,默认为 6379
# 如果port设置为0 redis将不会监听tcp socket
port 6379
# 在高并发环境下需要一个高backlog值来避免慢客户端连接问题。注意Linux内核默默将这个值减小到/proc/sys/net/core/somaxconn的值,所以需要确认增大somaxconn和tcp_max_syn_backlog 两个值来达到需要的效果。
tcp-backlog 511
# 指定用来监听Unix套接字的路径。没有默认值,没有指定的情况下Redis不会监听Unix socket
# unixsocket /tmp/redis.sock
# unixsocketperm 700
# 当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
timeout 0
# tcp-keepalive设置。
# 如果非零,则设置SO_KEEPALIVE选项来向空闲连接的客户端发送ACK,用途如下:
# (1)能够检测无响应的对端
# (2)让该连接中间的网络设备知道这个连接还存活
# 在Linux上,这个指定的值(单位秒)就是发送ACK的时间间隔
# 注意:要关闭这个连接需要两倍的这个时间值
tcp-keepalive 300
################################# 通用设置 #####################################
# daemonize no 默认情况下,redis不是在后台运行的,如果需要在后台运行,把该项的值更改为yes
daemonize no
# pid文件在redis启动时创建,退出时删除。当Redis没有以守护进程的方式运行,这个pid文件的配置选项不会起作用
pidfile /var/run/redis_6379.pid
# 配置日志级别。选项有debug, verbose, notice, warning
loglevel notice
# 日志名称。空字符串表示标准输出。注意如果redis配置为后台进程,标准输出中信息会发送到/dev/null
logfile ""
# 当配置为yes时,Redis的日志会输出到系统日志
# syslog-enabled no
# 指定系统日志身份。
# syslog-ident redis
# 指定syslog设备。必须是user或LOCAL0 ~ LOCAL7之一
# syslog-facility local0
# 设置数据库个数。默认数据库是DB 0
databases 16
# 是否输出Redis logo
always-show-logo yes
################################ 备份设置 ################################
#
# 下面的例子将会进行把数据写入磁盘的操作:
# 900秒(15分钟)之后,且至少1次变更
# 300秒(5分钟)之后,且至少10次变更
# 60秒之后,且至少10000次变更
# 不写磁盘的话就把所有 "save" 设置注释掉就行了
# 通过添加一条带空字符串参数的save指令也能移除之前所有配置的save指令,如: save ""
save 900 1
save 300 10
save 60 10000
# 默认情况下如果上面配置的RDB模式开启且最后一次的保存失败,redis将停止接受写操作,让用户知道问题的发生
# 如果后台保存进程重新启动工作了,redis也将自动的允许写操作。如果有其它监控方式也可关闭
stop-writes-on-bgsave-error yes
# 是否在备份.rdb文件时是否用LZF压缩字符串,默认设置为yes。如果想节约cpu资源可以把它设置为no
rdbcompression yes
# 因为版本5的RDB有一个CRC64算法的校验和放在了文件的末尾。这将使文件格式更加可靠
# 但在生产和加载RDB文件时,这有一个性能消耗(大约10%),可以关掉它来获取最好的性能
# 生成的关闭校验的RDB文件有一个0的校验和,它将告诉加载代码跳过检查
rdbchecksum yes
# rdb文件名称
dbfilename dump.rdb
# 备份文件目录,文件名就是上面的 "dbfilename" 的值。累加文件也放这里
# 注意你这里指定的必须是目录,不是文件名
dir ./
################################# 主从同步 #################################
# 主从同步配置
#
# 1) redis主从同步是异步的,但是可以配置在没有指定slave连接的情况下使master停止写入数据
# 2) 连接中断一定时间内,slave可以执行部分数据重新同步
# 3) 同步是自动的,slave可以自动重连且同步数据
# slaveof
# master连接密码
# masterauth
# 当一个slave失去和master的连接,或者同步正在进行中,slave的行为有两种可能:
# 1) 如果 slave-serve-stale-data 设置为 "yes" (默认值),slave会继续响应客户端请求,可能是正常数据,也可能是还没获得值的空数据
# 2) 如果 slave-serve-stale-data 设置为 "no",slave会回复"正在从master同步(SYNC with master in progress)"来处理各种请求,除了INFO和SLAVEOF命令
slave-serve-stale-data yes
# 配置salve实例是否接受写操作。可写的slave实例可能对存储临时数据比较有用(因为写入salve的数据在同master同步之后将很容被删除),但是如果客户端由于配置错误在写入时也可能产生一些问题
# 从Redis2.6默认所有的slave为只读
slave-read-only yes
# 复制同步策略:disk或socket
# -------------------------------------------------------
# 警告:无磁盘的复制当前还处于试验阶段
# -------------------------------------------------------
repl-diskless-sync no
# 如果非磁盘同步方式开启,可以配置同步延迟时间,以等待master产生子进程通过socket传输RDB数据给slave
# 默认值为5秒,设置为0秒则每次传输无延迟
repl-diskless-sync-delay 5
# slave根据指定的时间间隔向master发送ping请求。默认10秒
# repl-ping-slave-period 10
# 同步的超时时间设置:
# 1) slave在与master SYNC期间有大量数据传输,造成超时
# 2) 在slave角度,master超时,包括数据、ping等
# 3) 在master角度,slave超时,当master发送REPLCONF ACK ping
#
# 确保这个值大于指定的repl-ping-slave-period,否则在主从间流量不高时每次都会检测到超时
# repl-timeout 60
# 是否在slave套接字发送SYNC之后禁用 TCP_NODELAY
#
# 如果选择yes,Redis将使用更少的TCP包和带宽来向slaves发送数据。但是这将使数据传输到slave上有延迟,Linux内核的默认配置会达到40毫秒
# 如果选择no,数据传输到salve的延迟将会减少但要使用更多的带宽
#
# 默认我们会为低延迟做优化,但高流量情况或主从之间的跳数过多时,可以设置为“yes”
repl-disable-tcp-nodelay no
# 设置数据备份的backlog大小。backlog是一个slave在一段时间内断开连接时记录salve数据的缓冲,所以一个slave在重新连接时,不必要全量的同步,而是一个增量同步就足够了,将在断开连接的这段# 时间内把slave丢失的部分数据传送给它
# 同步的backlog越大,slave能够进行增量同步并且允许断开连接的时间就越长
# backlog只分配一次并且至少需要一个slave连接
# repl-backlog-size 1mb
# 当master在一段时间内不再与任何slave连接,backlog将会释放。以下选项配置了从最后一个slave断开开始计时多少秒后,backlog缓冲将会释放
# 0表示永不释放backlog
# repl-backlog-ttl 3600
# slave的优先级是一个整数展示在Redis的Info输出中。如果master不再正常工作了,sentinel将用它来选择一个slave提升为master
# 优先级数字小的salve会优先考虑提升为master,所以例如有三个slave优先级分别为10,100,25,sentinel将挑选优先级最小数字为10的slave
# 0作为一个特殊的优先级,标识这个slave不能作为master,所以一个优先级为0的slave永远不会被sentinel挑选提升为master
# 默认优先级为100
slave-priority 100
################################## 安全设置 ###################################
# 要求客户端在处理任何命令时都要验证身份和密码
# requirepass foobared
################################### 限制 ####################################
# 设置能连上redis的最大客户端连接数量。默认是10000个客户端连接。由于redis不区分连接是客户端连接还是内部打开文件或者和slave连接等,所以maxclients最小建议设置到32。
# 如果超过了maxclients,redis会给新的连接发送’max number of clients reached’,并关闭连接。
# maxclients 10000
############################## 内存管理 ################################
# redis配置的最大内存容量。当内存满了,需要配合maxmemory-policy策略进行处理。注意slave的输出缓冲区是不计算在maxmemory内的。所以为了防止主机内存使用完,建议设置的maxmemory需要更小一些
# maxmemory
# 内存容量超过maxmemory后的处理策略:
# volatile-lru:利用LRU算法移除设置过过期时间的key
# volatile-random:随机移除设置过过期时间的key
# volatile-ttl:移除即将过期的key,根据最近过期时间来删除
# allkeys-lru:利用LRU算法移除任何key
# allkeys-random:随机移除任何key
# noeviction:不移除任何key,只是返回一个写错误
# 上面的这些驱逐策略,如果redis没有合适的key驱逐,对于写命令,还是会返回错误。redis将不再接收写请求,只接收get请求
# maxmemory-policy noeviction
# lru检测的样本数。使用lru或者ttl淘汰算法,从需要淘汰的列表中随机选择sample个key,选出闲置时间最长的key移除
# maxmemory-samples 5
############################## 追加模式 ###############################
# 默认情况下,Redis是异步的把数据导出到磁盘上。这种模式在很多应用里已经足够好,但Redis进程出问题或断电时可能造成一段时间的写操作丢失(这取决于配置的save指令)
# 默认redis使用的是rdb方式持久化,这种方式在许多应用中已经足够用了。但是redis如果中途宕机,会导致可能有几分钟的数据丢失
# Append Only File是另一种持久化方式,可以提供更好的持久化特性。Redis会把每次写入的数据在接收后都写入appendonly.aof文件,每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件
appendonly no
# aof文件名
appendfilename "appendonly.aof"
# aof持久化策略的配置
# no表示不执行fsync,由操作系统保证数据同步到磁盘,速度最快
# always表示每次写入都执行fsync,以保证数据同步到磁盘
# everysec表示每秒执行一次fsync,可能会导致丢失这1s数据
appendfsync everysec
# 在aof重写或者写入rdb文件的时候,会执行大量IO,此时对于everysec和always的aof模式来说,执行fsync会造成阻塞过长时间,no-appendfsync-on-rewrite字段设置为默认设置为no
# 如果对延迟要求很高的应用,这个字段可以设置为yes,否则还是设置为no,这样对持久化特性来说这是更安全的选择
# 设置为yes表示rewrite期间对新写操作不fsync,暂时存在内存中,等rewrite完成后再写入,默认为no,建议yes。Linux的默认fsync策略是30秒。可能丢失30秒数据
no-appendfsync-on-rewrite no
# aof自动重写配置。当目前aof文件大小超过上一次重写的aof文件大小的百分之多少进行重写,即当aof文件增长到一定大小的时候Redis能够调用bgrewriteaof对日志文件进行重写
# 当前AOF文件大小是上次日志重写得到AOF文件大小的二倍(设置为100)时,自动启动新的日志重写过程。
auto-aof-rewrite-percentage 100
# 设置允许重写的最小aof文件大小,避免了达到约定百分比但尺寸仍然很小的情况还要重写
auto-aof-rewrite-min-size 64mb
# aof文件可能在尾部是不完整的,当redis启动的时候,aof文件的数据被载入内存。重启可能发生在redis所在的主机操作系统宕机后,尤其在ext4文件系统没有加上data=ordered选项(redis宕机或者异常终止不会造成尾部不完整现象)出现这种现象,可以选择让redis退出,或者导入尽可能多的数据
# 如果选择的是yes,当截断的aof文件被导入的时候,会自动发布一个log给客户端然后load。如果是no,用户必须手动redis-check-aof修复AOF文件才可以。
aof-load-truncated yes
################################ LUA脚本配置 ###############################
# 如果达到最大时间限制(毫秒),redis会记个log,然后返回error。当一个脚本超过了最大时限。只有SCRIPT KILL和SHUTDOWN NOSAVE可以用。第一个可以杀没有调write命令的东西。要是已经调用了write,只能用第二个命令杀
lua-time-limit 5000
################################ 集群 ###############################
#
# 集群开关,默认是不开启集群模式
# cluster-enabled yes
# 集群配置文件的名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息。这个文件并不需要手动配置,这个配置文件由Redis生成并更新,每个Redis集群节点需要一个单独的配置文件,请确保与实例运行的系统中配置文件名称不冲突
# cluster-config-file nodes-6379.conf
# 节点互连超时的阀值。集群节点超时毫秒数
# cluster-node-timeout 15000
# 在进行故障转移的时候,全部slave都会请求申请为master,但是有些slave可能与master断开连接一段时间了,导致数据过于陈旧,这样的slave不应该被提升为master。该参数就是用来判>断slave节点与master断线的时间是否过长。判断方法是:
# 比较slave断开连接的时间和(node-timeout * slave-validity-factor) + repl-ping-slave-period
# 如果节点超时时间为三十秒, 并且slave-validity-factor为10,假设默认的repl-ping-slave-period是10秒,即如果超过310秒slave将不会尝试进行故障转移
# 可能出现由于某主节点失联却没有从节点能顶上的情况,从而导致集群不能正常工作,在这种情况下,只有等到原来的主节点重新回归到集群,集群才恢复运作
# 如果设置成0,则无论从节点与主节点失联多久,从节点都会尝试升级成主节
# cluster-slave-validity-factor 10
# master的slave数量大于该值,slave才能迁移到其他孤立master上,如这个参数若被设为2,那么只有当一个主节点拥有2 个可工作的从节点时,它的一个从节点会尝试迁移。
# 主节点需要的最小从节点数,只有达到这个数,主节点失败时,它从节点才会进行迁移。
# cluster-migration-barrier 1
# 默认情况下如果redis集群如果检测到至少有1个hash slot不可用,集群将停止查询数据
# 如果所有slot恢复则集群自动恢复
# 如果需要集群部分可用情况下仍可提供查询服务,设置为no
# cluster-slave-no-failover no
################################## 慢日志查询 ###################################
# slog log是用来记录redis运行中执行比较慢的命令耗时。当命令的执行超过了指定时间,就记录在slow log中,slog log保存在内存中,所以没有IO操作。
# 执行时间比slowlog-log-slower-than大的请求记录到slowlog里面,单位是微秒,所以1000000就是1秒。注意,负数时间会禁用慢查询日志,而0则会强制记录所有命令。
slowlog-log-slower-than 10000
# 慢查询日志长度。当一个新的命令被写进日志的时候,最老的那个记录会被删掉。这个长度没有限制。只要有足够的内存就行。你可以通过 SLOWLOG RESET 来释放内存。
slowlog-max-len 128
################################ LATENCY MONITOR ##############################
# 延迟监控功能是用来监控redis中执行比较缓慢的一些操作,用LATENCY打印redis实例在跑命令时的耗时图表。只记录大于等于下边设置的值的操作
# 0的话,就是关闭监视。默认延迟监控功能是关闭的,如果你需要打开,也可以通过CONFIG SET命令动态设置。
latency-monitor-threshold 0
############################# EVENT NOTIFICATION ##############################
notify-keyspace-events ""
############################### ADVANCED CONFIG ###############################
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
# 在aof重写的时候,如果打开了aof-rewrite-incremental-fsync开关,系统会每32MB执行一次fsync。这对于把文件写入磁盘是有帮助的,可以避免过大的延迟峰值
aof-rewrite-incremental-fsync yes
- sentinel.conf配置文件说明:
# sentinel实例进程监听端口,sentinel之间的通讯端口
port 26379
# sentinel的工作目录,定义一个合理的工作目录
dir /tmp
# sentinel监控的redis主节点的 ip port
# master-name 可以自己命名的主节点名字,只能由字母A-z、数字0-9 、这三个字符".-_"组成
# quorum 将这个主实例判断为失效至少需要quorum个Sentinel进程的同意,只要同意Sentinel的数量不达标,自动failover就不会执行
# sentinel monitor
sentinel monitor mymaster 127.0.0.1 6379 2
# 当在Redis实例中开启了requirepass foobared授权密码,这样所有连接Redis实例的客户端都要提供密码
# 设置哨兵sentinel连接主从的密码
# 注意必须为主从设置一样的验证密码
# sentinel auth-pass
# sentinel auth-pass mymaster MySUPER--secret-0123passw0rd
# 指定多少毫秒之后,主节点没有应答哨兵sentinel;此时哨兵主观上认为主节点下线
# 默认30秒
# sentinel down-after-milliseconds
sentinel down-after-milliseconds mymaster 30000
# 指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行同步
# 这个数字越小,完成failover所需的时间就越长,但是如果这个数字越大,就意味着越 多的slave因为replication而不可用
# 可以通过将这个值设为1来保证每次只有一个slave处于不能处理命令请求的状态
# sentinel parallel-syncs
sentinel parallel-syncs mymaster 1
# 故障转移的超时时间failover-timeout可以用在以下这些方面:
# 1、同一个sentinel对同一个master两次failover之间的间隔时间
# 2、当一个slave从一个错误的master那里同步数据开始计算时间,直到slave被纠正为向正确的master那里同步数据时
# 3、当想要取消一个正在进行的failover所需要的时间
# 4、当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来了
# 默认三分钟
# sentinel failover-timeout
sentinel failover-timeout mymaster 180000
# SCRIPTS EXECUTION
# 配置当某一事件发生时所需要执行的脚本,可以通过脚本来通知管理员,例如当系统运行不正常时发短信通知相关人员。
# 对于脚本的运行结果有以下规则:
# 若脚本执行后返回1,那么该脚本稍后将会被再次执行,重复次数目前默认为10
# 若脚本执行后返回2,或者比2更高的一个返回值,脚本将不会重复执行
# 如果脚本在执行过程中由于收到系统中断信号被终止了,则同返回值为1时的行为相同
# 一个脚本的最大执行时间为60s,如果超过这个时间,脚本将会被一个SIGKILL信号终止,之后重新执行
# 通知型脚本
# 当sentinel有任何警告级别的事件发生时(比如说redis实例的主观失效和客观失效等等),将会去调用这个脚本
# 这时这个脚本应该通过邮件,SMS等方式去通知系统管理员关于系统不正常运行的信息
# 调用该脚本时,将传给脚本两个参数,一个是事件的类型,一个是事件的描述。
# 如果sentinel.conf配置文件中配置了这个脚本路径,那么必须保证这个脚本存在于这个路径,并且是可执行的,否则sentinel无法正常启动成功
# sentinel notification-script
# sentinel notification-script mymaster /var/redis/notify.sh
# 客户端重新配置主节点参数脚本
# 当一个master由于failover而发生改变时,这个脚本将会被调用,通知相关的客户端关于master地址已经发生改变的信息
# 以下参数将会在调用脚本时传给脚本:
#
# 目前总是“failover”
# 参数 from-ip, from-port, to-ip, to-port是用来和旧的master和新的master(即旧的slave)通信的
# sentinel client-reconfig-script mymaster /var/redis/reconfig.sh