Redis搭建主从+哨兵

Redis的主从+哨兵机制是一种高可用(HA)方案
我们在使用Redis的主从结构时,如果主节点挂掉,这时是不能自动进行主备切换和通知客户端主节点下线的。
Redis-Sentinel机制主要用三个功能:
(1)监控:不停监控Redis主从节点是否安装预期运行
(2)提醒:如果Redis运行出现问题可以 按照配置文件中的配置项 通知客户端或者集群管理员
(3)自动故障转移:当主节点下线之后,哨兵可以从主节点的多个从节点中选出一个为主节点,并更新配置文件和其他从节点的主节点信息。
 
RedisCluster搭建请看:Redis集群搭建(RedisCluster)
 
redis下载地址
搭建redis主从
主用来读写,从只用来写,不需要任何配置
在linux /home/redis-cluster
wget http://download.redis.io/releases/redis-5.0.8.tar.gz
tar
-zxvf redis-5.0.8.tar.gz
cd redis-5.0.8
make install
然后创建文件夹
mkdir redis-6379 redis-6380 redis-6381
cp -r redis-5.0.8/* redis-6379
cp -r redis-5.0.8/* redis-6380
cp -r redis-5.0.8/* redis-6381
修改6379配置文件redis.conf(文末有详解
daemonize yes
pidfile "/var/run/redis_6379.pid"
logfile "/home/redis-cluster/redis-6379/6379.log"
修改6380配置文件redis.conf
port 6380
daemonize yes
pidfile "/var/run/redis_6380.pid"
logfile "/home/redis-cluster/redis-6380/6380.log"
replicaof 127.0.0.1 6379
修改6381配置文件redis.conf
port 6381
daemonize yes
pidfile "/var/run/redis_6381.pid"
logfile "/home/redis-cluster/redis-6381/6381.log"
replicaof 127.0.0.1 6379
启动redis
redis-server /home/redis-cluster/redis-6379/redis.conf
redis-server /home/redis-cluster/redis-6380/redis.conf
redis-server /home/redis-cluster/redis-6381/redis.conf
登录redis客户端
redis-cli -h 127.0.0.1 -p 6379
redis-cli -h 127.0.0.1 -p 6380
redis-cli -h 127.0.0.1 -p 6381
查看redis信息
info replication
配置哨兵
修改redis6379的sentinel.conf(文末有详解
port 26379
daemonize yes
pidfile "/var/run/redis-sentinel-26379.pid"
logfile "/home/redis-cluster/redis-6379/26379.log"
# 数据保存目录
dir "/home/redis-cluster/data"
#最后面的2,指的是2个哨兵认为服务挂了,那么他就挂了,也就是Sentinel集群的一半以上的数目
sentinel monitor mymaster 127.0.0.1 6379 2
# 哨兵连接主redis 30s连接不上就认为主redis是挂了
sentinel down-after-milliseconds mymaster 30000
# 当主redis挂了以后,会有新的上任,新的上任以后,进行数据同步时,一次会有多少个从redis去同# 步,设置的越小对服务器压力就越小,设置的越大,对服务器压力就越大
sentinel parallel-syncs mymaster 1
# 180s内同步成功就算有效,同步失败就算同步超时
sentinel failover-timeout mymaster 180000
修改redis6380的sentinel.conf
port 26380
daemonize yes
pidfile "/var/run/redis-sentinel-26380.pid"
logfile "/home/redis-cluster/redis-6380/26380.log"
dir "/home/redis-cluster/data"
修改redis6381的sentinel.conf
port 26381
daemonize yes
pidfile "/var/run/redis-sentinel-26381.pid"
logfile "/home/redis-cluster/redis-6381/26381.log"
dir "/home/redis-cluster/data"
启动哨兵
redis-sentinel /home/redis-cluster/redis-6379/sentinel.conf
redis-sentinel /home/redis-cluster/redis-6380/sentinel.conf
redis-sentinel /home/redis-cluster/redis-6381/sentinel.conf
然后把redis6379杀掉
查看6380.log和6381.log日志
会自动选出新的master
然后再次启动redis6379
 Redis的哨兵模式搭建完毕
redis.conf配置详解
#########################################单位#########################################
#当你需要为某个配置项指定内存大小的时候,必须要带上单位,
#通常的格式就是 1k 5gb 4m 等:
#1k => 1000 bytes
#1kb => 1024 bytes
#1m => 1000000 bytes
#1mb => 10241024 bytes
#1g => 1000000000 bytes
#1gb => 10241024*1024 bytes
#########################################文件引入#########################################
#引入其他的配置文件
#include /path/to/local.conf
#include /path/to/other.conf
#########################################模块加载#########################################
#启动时加载模块
#loadmodule /path/to/my_module.so
#loadmodule /path/to/other_module.so
#########################################网络#########################################
#指定redis只能接受来自此IP绑定的网卡的请求,注意此默认值默认外网是不可访问的
bind 127.0.0.1
#是否开启保护模式。如果没有指定bind和密码,redis只会本地进行访问,拒绝外部访问。
protected-mode yes
#默认端口,建议生产环境不要使用默认端口避免被恶意扫描到
port 6379
#TCP连接中已完成队列(完成三次握手之后)的长度
tcp-backlog 511
#配置unix socket来让redis支持监听本地连接。
#unixsocket /tmp/redis.sock
#配置unix socket使用文件的权限
#unixsocketperm 700
#客户端连接空闲超过timeout将会被断开,为0则断开
timeout 0
#tcp keepalive参数
tcp-keepalive 300
#########################################基本配置#########################################
#是否后台启动  (常用)
daemonize no
#可以通过upstart和systemd管理Redis守护进程
#选项:
###supervised no - 没有监督互动
###supervised upstart - 通过将Redis置于SIGSTOP模式来启动信号
###supervised systemd - signal systemd将READY = 1写入$ NOTIFY_SOCKET
###supervised auto - 检测upstart或systemd方法基于 UPSTART_JOB或NOTIFY_SOCKET环境变量
supervised no
#配置PID文件路径
pidfile /var/run/redis_6379.pid
#日志级别 debug、verbose、notice、warning
loglevel notice
#日志文件
logfile ""
#是否打开记录syslog功能
#syslog-enabled no
#syslog标识符
#syslog-ident redis
#日志的来源
#syslog-facility local0
#数据库的数量,默认使用的数据库是DB 0,可以通过”SELECT “命令选择一个db,集群环境默认只有DB 0
databases 16
#是否一直显示logo
always-show-logo yes
#########################################数据持久化RDB#########################################
#保存数据到磁盘:
#15分钟有一个key发生变化就保存数据到磁盘
save 900 1
#5分钟有10个key发生变化就保存数据到磁盘
save 300 10
#1分钟有10000个key发生变化就保存数据到磁盘
save 60 10000
#持久化出现错误后,是否依然进行继续进行工作
stop-writes-on-bgsave-error yes
#是否校验rdb文件
rdbcompression yes
#使用压缩rdb文件,rdb文件压缩使用LZF压缩算法,
rdbchecksum yes
#rdb文件名称
dbfilename dump.rdb
#rdb使用上面的“dbfilename配置指令的文件名保存到这个目录
dir ./
#########################################主从复制#########################################
#指定主节点。旧版本是:slaveof  新版本有区别
#replicaof
#master的密码
#masterauth
#当一个slave失去和master的连接,或者同步正在进行中,slave的行为有两种可能:
###如果 replica-serve-stale-data 设置为 “yes” (默认值),slave会继续响应客户端请求,可能是正常数据,也可能是还没获得值的空数据。
###如果 replica-serve-stale-data 设置为 “no”,slave会回复"正在从master同步(SYNC with master in progress)"来处理各种请求,除了 INFO 和 SLAVEOF 命令。
replica-serve-stale-data yes
#配置从是否为只读,开启后从则不能写入数据,旧版本是:slave-read-only yes
replica-read-only yes
#同步策略: 磁盘或socket,默认磁盘方式
repl-diskless-sync no
#如果非磁盘同步方式开启,可以配置同步延迟时间,以等待master产生子进程通过socket传输RDB数据给slave。
#默认值为5秒,设置为0秒则每次传输无延迟。
repl-diskless-sync-delay 5
#slave根据指定的时间间隔向master发送ping请求。默认10秒。
#repl-ping-replica-period 10
#同步的超时时间
#slave在与master SYNC期间有大量数据传输,造成超时
###在slave角度,master超时,包括数据、ping等
###在master角度,slave超时,当master发送REPLCONF ACK pings
###确保这个值大于指定的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
#从最后一个slave断开开始计时多少秒后,backlog缓冲将会释放。
#repl-backlog-ttl 3600
#设置数据备份的backlog大小
#repl-backlog-size 1mb
#优先级
replica-priority 100
#如果master少于N个延时小于等于M秒的已连接slave,就可以停止接收写操作。
#N个slave需要是“oneline”状态。
#延时是以秒为单位,并且必须小于等于指定值,是从最后一个从slave接收到的ping(通常每秒发送)开始计数。
#该选项不保证N个slave正确同步写操作,但是限制数据丢失的窗口期。
#例如至少需要3个延时小于等于10秒的slave用下面的指令:
#前者表示当3个或者3个以上的从数据库同步主数据库时,主数据库才是可写的,否则会返回错误。
#后者表示允许从数据库最长失联时间(单位s),如果从数据库最后与主数据库保持联的时间小于这个时间,则认为还存活。
#min-replicas-to-write 3
#min-replicas-max-lag 10
#########################################安全#########################################
#密码
#requirepass foobared
#命令重命名
#设置命令为空时禁用命令
#rename-command CONFIG “”
#########################################限制#########################################
#设置最多同时连接的客户端数量
#maxclients 10000
#内存限制
#maxmemory
#如果达到上方最大的内存限制,Redis如何选择删除key
###volatile-lru -> 根据LRU算法删除设置过期时间的key
###allkeys-lru -> 根据LRU算法删除任何key
###volatile-random -> 随机移除设置过过期时间的key
###allkeys-random -> 随机移除任何key
###volatile-ttl -> 移除即将过期的key(minor TTL)
###noeviction -> 不移除任何key,只返回一个写错误
#注意:对所有策略来说,如果Redis找不到合适的可以删除的key都会在写操作时返回一个错误。
#目前为止涉及的命令:set setnx setex append incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby getset mset msetnx exec sort
#maxmemory-policy noeviction
#LRU和最小TTL算法的样本个数
#maxmemory-samples 5
#########################################懒删除#########################################
#内存满逐出
lazyfree-lazy-eviction no
#过期key删除
lazyfree-lazy-expire no
#内部删除,比如rename oldkey newkey时,如果newkey存在需要删除newkey
lazyfree-lazy-server-del no
#接收完RDB文件后清空数据选项
replica-lazy-flush no
#########################################持久化方式AOF#########################################
#每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件
appendonly no
#AOF文件名称
appendfilename "appendonly.aof"
#fsync() 系统调用告诉操作系统把数据写到磁盘上,而不是等更多的数据进入输出缓冲区。
#有些操作系统会真的把数据马上刷到磁盘上;有些则会尽快去尝试这么做。
#Redis支持三种不同的模式:
###no:不要立刻刷,只有在操作系统需要刷的时候再刷。比较快。
###always:每次写操作都立刻写入到aof文件。慢,但是最安全。
###everysec:每秒写一次。折中方案。
#默认的 “everysec” 通常来说能在速度和数据安全性之间取得比较好的平衡。
appendfsync everysec
#如果AOF的同步策略设置成 “always” 或者 “everysec”,并且后台的存储进程(后台存储或写入AOF 日志)会产生很多磁盘I/O开销。某些Linux的配置下会使Redis因为 fsync()系统调用而阻塞很久。
#注意,目前对这个情况还没有完美修正,甚至不同线程的 fsync() 会阻塞我们同步的write(2)调用。
#为了缓解这个问题,可以用下面这个选项。它可以在 BGSAVE 或 BGREWRITEAOF 处理时阻止fsync()。
#这就意味着如果有子进程在进行保存操作,那么Redis就处于"不可同步"的状态。
#这实际上是说,在最差的情况下可能会丢掉30秒钟的日志数据。(默认Linux设定)
#如果把这个设置成"yes"带来了延迟问题,就保持"no",这是保存持久数据的最安全的方式。
no-appendfsync-on-rewrite no
#自动重写AOF文件。如果AOF日志文件增大到指定百分比,Redis能够通过 BGREWRITEAOF 自动重写AOF日志文件。
#工作原理:Redis记住上次重写时AOF文件的大小(如果重启后还没有写操作,就直接用启动时的AOF大小)
#这个基准大小和当前大小做比较。如果当前大小超过指定比例,就会触发重写操作。
#你还需要指定被重写日志的最小尺寸,这样避免了达到指定百分比但尺寸仍然很小的情况还要重写。
#指定百分比为0会禁用AOF自动重写特性。
auto-aof-rewrite-percentage 100
#文件达到大小阈值的时候进行重写
auto-aof-rewrite-min-size 64mb
#如果设置为yes,如果一个因异常被截断的AOF文件被redis启动时加载进内存,redis将会发送日志通知用户
#如果设置为no,erdis将会拒绝启动。此时需要用"redis-check-aof"工具修复文件。
aof-load-truncated yes
#加载时Redis识别出AOF文件以“REDIS”开头字符串,并加载带此前缀的RDB文件,然后继续加载AOF
aof-use-rdb-preamble yes
#########################################Lua脚本配置#########################################
#Lua 脚本的最大执行毫秒数
lua-time-limit 5000
#########################################集群#########################################
#开启redis集群
#cluster-enabled yes
#配置redis自动生成的集群配置文件名。确保同一系统中运行的各redis实例该配置文件不要重名。
#cluster-config-file nodes-6379.conf
#集群节点超时毫秒数
#cluster-node-timeout 15000
#如果数据太旧,集群中的不可用master的slave节点会避免成为备用master。如果slave和master失联时间超过:(node-timeout * slave-validity-factor) + repl-ping-slave-period则不会被提升为master。
#如node-timeout为30秒,slave-validity-factor为10, 默认default repl-ping-slave-period为10秒,失联时间超过310秒slave就不会成为master。
#较大的slave-validity-factor值可能允许包含过旧数据的slave成为master,同时较小的值可能会阻止集群选举出新master。
#为了达到最大限度的高可用性,可以设置为0,即slave不管和master失联多久都可以提升为master
#cluster-replica-validity-factor 10
#只有在之前master有其它指定数量的工作状态下的slave节点时,slave节点才能提升为master。默认为1(即该集群至少有3个节点,1 master+2 slaves,master宕机,仍有另外1个slave的情况下其中1个slave可以提升)
#测试环境可设置为0,生成环境中至少设置为1
#cluster-migration-barrier 1
#默认情况下如果redis集群如果检测到至少有1个hash slot不可用,集群将停止查询数据。如果所有slot恢复则集群自动恢复。如果需要集群部分可用情况下仍可提供查询服务,设置为no。
#cluster-require-full-coverage yes
#选项设置为yes时,会阻止replicas尝试对其master在主故障期间进行故障转移,然而,master仍然可以执行手动故障转移,如果强制这样做的话。
#cluster-replica-no-failover no
#########################################Docker集群配置#########################################
#默认情况下,Redis会自动检测自己的IP和从配置中获取绑定的PORT,告诉客户端或者是其他节点。
#而在Docker环境中,如果使用的不是host网络模式,在容器内部的IP和PORT都是隔离的,那么客户端和其他节点无法通过节点公布的IP和PORT建立连接。
#如果开启以下配置,Redis节点会将配置中的这些IP和PORT告知客户端或其他节点。而这些IP和PORT是通过Docker转发到容器内的临时IP和PORT的。
#cluster-announce-ip 
#cluster-announce-port
#集群总线端口
#cluster-announce-bus-port
#########################################慢查询日志#########################################
#记录超过多少微秒的查询命令 #1000000等于1秒,设置为0则记录所有命令
slowlog-log-slower-than 10000
#记录大小,可通过SLOWLOG RESET命令重置
slowlog-max-len 128
#########################################延时监控系统#########################################
#记录执行时间大于或等于预定时间(毫秒)的操作,为0时不记录
latency-monitor-threshold 0
#########################################事件通知#########################################
#Redis能通知 Pub/Sub 客户端关于键空间发生的事件,默认关闭
notify-keyspace-events ""
#########################################内部数据结构#########################################
#当hash只有少量的entry时,并且最大的entry所占空间没有超过指定的限制时,会用一种节省内存的数据结构来编码。可以通过下面的指令来设定限制
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
#当取正值的时候,表示按照数据项个数来限定每个quicklist节点上的ziplist长度。比如,当这个参数配置成5的时候,表示每个quicklist节点的ziplist最多包含5个数据项。
#当取负值的时候,表示按照占用字节数来限定每个quicklist节点上的ziplist长度。这时,它只能取-1到-5
#这五个值,每个值含义如下:
###-5: 每个quicklist节点上的ziplist大小不能超过64 Kb。(注:1kb => 1024 bytes)
###-4: 每个quicklist节点上的ziplist大小不能超过32 Kb。
###-3: 每个quicklist节点上的ziplist大小不能超过16 Kb。
###-2: 每个quicklist节点上的ziplist大小不能超过8 Kb。(-2是Redis给出的默认值)
###-1: 每个quicklist节点上的ziplist大小不能超过4 Kb
list-max-ziplist-size -2
#这个参数表示一个quicklist两端不被压缩的节点个数。
#注:这里的节点个数是指quicklist双向链表的节点个数,而不是指ziplist里面的数据项个数。
#实际上,一个quicklist节点上的ziplist,如果被压缩,就是整体被压缩的。
#参数list-compress-depth的取值含义如下:
###0: 是个特殊值,表示都不压缩。这是Redis的默认值。
###1: 表示quicklist两端各有1个节点不压缩,中间的节点压缩。
###2: 表示quicklist两端各有2个节点不压缩,中间的节点压缩。
###3: 表示quicklist两端各有3个节点不压缩,中间的节点压缩。
#依此类推… #由于0是个特殊值,很容易看出quicklist的头节点和尾节点总是不被压缩的,以便于在表的两端进行快速存取。
list-compress-depth 0
#set有一种特殊编码的情况:当set数据全是十进制64位有符号整型数字构成的字符串时。
#下面这个配置项就是用来设置set使用这种编码来节省内存的最大长度。
set-max-intset-entries 512
#与hash和list相似,有序集合也可以用一种特别的编码方式来节省大量空间。
#这种编码只适合长度和元素都小于下面限制的有序集合
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
#HyperLogLog稀疏结构表示字节的限制。该限制包括16个字节的头。当HyperLogLog使用稀疏结构表示这些限制,它会被转换成密度表示。
#值大于16000是完全没用的,因为在该点密集的表示是更多的内存效率。
#建议值是3000左右,以便具有的内存好处, 减少内存的消耗
hll-sparse-max-bytes 3000
#Streams宏节点最大大小/项目。流数据结构是基数编码内部多个项目的大节点树。使用此配置
#可以配置单个节点的字节数,以及切换到新节点之前可能包含的最大项目数
#追加新的流条目。如果以下任何设置设置为0,忽略限制,因此例如可以设置一个
#大入口限制将max-bytes设置为0,将max-entries设置为所需的值
stream-node-max-bytes 4096
stream-node-max-entries 100
#启用哈希刷新,每100个CPU毫秒会拿出1个毫秒来刷新Redis的主哈希表(顶级键值映射表)
activerehashing yes
#客户端的输出缓冲区的限制,可用于强制断开那些因为某种原因从服务器读取数据的速度不够快的客户端
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
#客户端查询缓冲区累积新命令。它们仅限于固定的默认情况下,多数情况下为了避免协议不同步导致客户端查询缓冲区中未绑定的内存使用量的错误,但是,如果你有使用的话,你可以在这里配置它,比如我们有很多执行请求或类似的。
#client-query-buffer-limit 1gb
#在Redis协议中,批量请求,即表示单个的元素strings,通常限制为512 MB。但是,您可以z更改此限制
#proto-max-bulk-len 512mb
#默认情况下,“hz”的被设定为10。提高该值将在Redis空闲时使用更多的CPU时,但同时当有多个key同时到期会使Redis的反应更灵敏,以及超时可以更精确地处理
hz 10
#开启动态hz
dynamic-hz yes
#当一个子进程重写AOF文件时,如果启用下面的选项,则文件每生成32M数据会被同步
aof-rewrite-incremental-fsync yes
#当redis保存RDB文件时,如果启用了以下选项,每生成32 MB数据,文件将被fsync-ed。
#这很有用,以便以递增方式将文件提交到磁盘并避免大延迟峰值。
rdb-save-incremental-fsync yes
#########################################碎片整理#########################################
#启用主动碎片整理
#activedefrag yes
#启动活动碎片整理的最小碎片浪费量
#active-defrag-ignore-bytes 100mb
#启动碎片整理的最小碎片百分比
#active-defrag-threshold-lower 10
#使用最大消耗时的最大碎片百分比
#active-defrag-threshold-upper 100
#在CPU百分比中进行碎片整理的最小消耗
#active-defrag-cycle-min 5
#磁盘碎片整理的最大消耗
#active-defrag-cycle-max 75
#将从主字典扫描处理的最大set / hash / zset / list字段数
#active-defrag-max-scan-fields 1000

sentinel.conf配置详解

#sentinel监听端口,默认是26379,可以修改。
port 26379
#是否后台启动
daemonize no
# 配置PID文件路径
pidfile /var/run/redis-sentinel.pid
#日志文件
logfile ""

# 哨兵sentinel的工作目录 
dir /tmp

#sentinel monitor <master-name> <ip> <redis-port> <quorum>
#告诉sentinel去监听地址为ip:port的一个master,这里的master-name可以自定义,quorum是一个数字,指明当有多少个(一般配置成集群个数的一半以上)sentinel认为一个master失效时,master才算真正失效。
#master-name只能包含英文字母,数字,和“.-_”这三个字符,需要注意的是master-ip 要写真实的ip地址而不要用回环地址(127.0.0.1)。
sentinel monitor mymaster 192.168.0.5 6379 2

#sentinel auth-pass <master-name> <password>
# 当在Redis实例中开启了requirepass foobared 授权密码 这样所有连接Redis实例的客户端都要提供密码  
# 设置哨兵sentinel 连接主从的密码 注意必须为主从设置一样的验证密码  
#设置连接master和slave时的密码,注意的是sentinel不能分别为master和slave设置不同的密码,因此master和slave的密码应该设置相同。
#sentinel auth-pass mymaster 0123passw0rd

#sentinel down-after-milliseconds <master-name> <milliseconds> 
#这个配置项指定了需要多少失效时间,一个master才会被这个sentinel主观地认为是不可用的。 单位是毫秒,默认为30秒
sentinel down-after-milliseconds mymaster 30000

#sentinel parallel-syncs <master-name> <numslaves> 
#这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行同步,
#这个数字越小,完成failover所需的时间就越长,但是如果这个数字越大,就意味着越多的slave因为replication而不可用。
#可以通过将这个值设为 1 来保证每次只有一个slave 处于不能处理命令请求的状态。
sentinel parallel-syncs mymaster 1

#sentinel failover-timeout <master-name> <milliseconds>
#failover-timeout 可以用在以下这些方面: 
    ###1. 同一个sentinel对同一个master两次failover之间的间隔时间。
    ###2. 当一个slave从一个错误的master那里同步数据开始计算时间。直到slave被纠正为向正确的master那里同步数据时。
    ###3. 当想要取消一个正在进行的failover所需要的时间。  
    ###4. 当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来了。
sentinel failover-timeout mymaster 180000


# SCRIPTS EXECUTION  
  
#配置当某一事件发生时所需要执行的脚本,可以通过脚本来通知管理员,例如当系统运行不正常时发邮件通知相关人员。  
#对于脚本的运行结果有以下规则:  
#若脚本执行后返回1,那么该脚本稍后将会被再次执行,重复次数目前默认为10  
#若脚本执行后返回2,或者比2更高的一个返回值,脚本将不会重复执行。  
#如果脚本在执行过程中由于收到系统中断信号被终止了,则同返回值为1时的行为相同。  
#一个脚本的最大执行时间为60s,如果超过这个时间,脚本将会被一个SIGKILL信号终止,之后重新执行。  

#通知型脚本:当sentinel有任何警告级别的事件发生时(比如说redis实例的主观失效和客观失效等等),将会去调用这个脚本,  
这时这个脚本应该通过邮件,SMS等方式去通知系统管理员关于系统不正常运行的信息。调用该脚本时,将传给脚本两个参数,  
一个是事件的类型,  
一个是事件的描述。  
如果sentinel.conf配置文件中配置了这个脚本路径,那么必须保证这个脚本存在于这个路径,并且是可执行的,否则sentinel无法正常启动成功。  
#通知脚本  
# sentinel notification-script <master-name> <script-path>  
  sentinel notification-script mymaster /var/redis/notify.sh  

# 客户端重新配置主节点参数脚本  
# 当一个master由于failover而发生改变时,这个脚本将会被调用,通知相关的客户端关于master地址已经发生改变的信息。  
# 以下参数将会在调用脚本时传给脚本:  
# <master-name> <role> <state> <from-ip> <from-port> <to-ip> <to-port>  
# 目前<state>总是“failover”,  
# <role>是“leader”或者“observer”中的一个。   
# 参数 from-ip, from-port, to-ip, to-port是用来和旧的master和新的master(即旧的slave)通信的  
# 这个脚本应该是通用的,能被多次调用,不是针对性的。  
# sentinel client-reconfig-script <master-name> <script-path>  
 sentinel client-reconfig-script mymaster /var/redis/reconfig.sh

sentinel deny-scripts-reconfig yes

posted @ 2021-11-26 11:30  劈天造陆  阅读(310)  评论(0编辑  收藏  举报