redis11----监控工具 sentinel

当master宕机了要把slave1变为master,并把slave2指向slave1。

可以运行时更改master-slave,config set/get,修改一台slave(设为A)为new master 
1)命令该服务不做其他redis服务的slave,命令: slaveof no one 
2)修改其readonly为yes,其他的slave再指向new master A
1)命令该服务为new master A的slave,命令格式 slaveof IP port


6379:>shutdown
6378,6377>info replication
"# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:down

6378:0>slaveof no one    //不在是从服务器
"OK"

6378:0>info replication    //现在已经是主服务器了,0个从
"# Replication
role:master
connected_slaves:0

6378:0>config get slave-read-only     //不能是readonly的
1) "slave-read-only"
2) "yes"
6378:0>config set slave-read-only no    
"OK"
6378:0>config get slave-read-only
1) "slave-read-only"
2) "no"

6377:0>slaveof 127.0.0.1 6378
"OK"

//原来6377,6378指向6379,现在6379宕机6378变为master6377变为6378的slave
6379:0>info replication
"# Replication
role:master
connected_slaves:0

6378:0>info replication
"# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6377,state=online,offset=408,lag=0
6377:0>info replication
"# Replication
role:slave
master_host:127.0.0.1
master_port:6378
监控工具 sentinel(就是刚才手工的操作)
sentinel  monitor  mymaster  127.0.0.1    6379    2         //2个sentinel监控到失效了
sentinel  auth-pass  mymaster  012_345^678-90  
##master被当前sentinel实例认定为“失效”的间隔时间  
##如果当前sentinel与master直接的通讯中,在指定时间内没有响应或者响应错误代码,那么当前sentinel就认为master失效(SDOWN,“主观”失效)  
##<mastername> <millseconds>  默认为30秒  
sentinel down-after-milliseconds mymaster  30000     //30000毫秒,30秒
  
##当前sentinel实例是否允许实施“failover”(故障转移,把不把slave变为master)  
##no表示当前sentinel为“观察者”(只参与"投票".不参与实施failover),(一般是多台sentinel监控一台master,只有一台sentinel可以修改slave为master,多台sentlnel不能一起改。有2台发现宕机了就宕机了),##全局中至少有一个为yes只能一个sentinel来修改。
sentinel can-failover mymaster  yes       //
##sentinel notification-script mymaster /var/redis/notify.sh  

Sentinel不断与master通信,获取master的slave信息,监听master与slave的状态
如果某slave失效,直接通知master去除该slave,如果master失效,,是按照slave优先级(可配置), 选取1个slave做 new master,把其他slave--> new master

疑问: sentinel与master通信,如果某次因为master IO操作频繁,导致超时,
此时,认为master失效,很武断.解决: sentnel允许多个实例看守1个master, 当N台(N可设置)sentinel都认为master失效,才正式失效.

Sentinel.conf 选项配置:
port 26379                   # 端口
sentinel monitor mymaster 127.0.0.1 6379 2 , //给主机起的名字(不重即可), 当2个sentinel实例都认为master失效时,正式失效
sentinel down-after-milliseconds mymaster 30000   #多少毫秒后连接不到master认为断开
sentinel can-failover mymaster yes        #是否允许sentinel修改slave->master. 如为no,则只能监控,无权修改./
sentinel parallel-syncs mymaster 1 ,   #一次性修改几个slave指向新的new master.1表示是一台一台的来,防止新的masterio过高而宕机
sentinel failover-timeout mymaster 900000    //15分钟之内没有完成刚才的所有操作则表示操作失败,然后发送短信什么的。
sentinel client-reconfig-script mymaster /var/redis/reconfig.sh ,# 在重新配置new master,new slave过程,可以触发的脚本
Redis-server ./Sentinel.conf --sentinel     //启动
slave-priority 10   //多个slave的时候可以选择哪个优先作为master,越小越靠前。
//同一个redis实例里面复制多个配置文件,就可以开启多个redis实例和sentinel。

80是主,7778,79是从。80宕机后79是主,并且是改了配置文件,也就是说重启后79仍然是主(通过info replication查看主从信息)。如果79 的数据比80 少,那么79做主后80的数据跟79同步,那么79的数据也会丢失。Sentinel 的配置文件也改了。  因为配置文件改了,所以只启动一个从服务器时他仍然是主服务器的slave,并且等着主服务器起来,只有启动了sentinel看见主服务器没有起来,会修改配置文件把当前的从服务器修改为master.

 Redis Sentinel 是一个分布式系统, 你可以在一个架构中运行多个 Sentinel 进程(progress), 这些进程使用流言协议(gossip protocols)来接收关于主服务器是否下线的信息, 并使用投票协议(agreement protocols)来决定是否执行自动故障迁移, 以及选择哪个从服务器作为新的主服务器。

虽然 Redis Sentinel 释出为一个单独的可执行文件 redis-sentinel , 但实际上它只是一个运行在特殊模式下的 Redis 服务器, 你可以在启动一个普通 Redis 服务器时通过给定 --sentinel 选项来启动 Redis Sentinel 。

启动 Sentinel

对于 redis-sentinel 程序, 你可以用以下命令来启动 Sentinel 系统:

redis-sentinel /path/to/sentinel.conf

对于 redis-server 程序, 你可以用以下命令来启动一个运行在 Sentinel 模式下的 Redis 服务器:

redis-server /path/to/sentinel.conf --sentinel

两种方法都可以启动一个 Sentinel 实例。

启动 Sentinel 实例必须指定相应的配置文件, 系统会使用配置文件来保存 Sentinel 的当前状态, 并在 Sentinel 重启时通过载入配置文件来进行状态还原。

如果启动 Sentinel 时没有指定相应的配置文件, 或者指定的配置文件不可写(not writable), 那么 Sentinel 会拒绝启动。

方式一:redis-sentinel /path/to/sentinel.conf(推荐,这种方式启动和redis实例没有任何关系)
方式二:redis-server /path/to/sentinel.conf --sentinel

配置 Sentinel

Redis 源码中包含了一个名为 sentinel.conf 的文件, 这个文件是一个带有详细注释的 Sentinel 配置文件示例。

运行一个 Sentinel 所需的最少配置如下所示:

sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1

sentinel monitor resque 192.168.1.3 6380 4
sentinel down-after-milliseconds resque 10000
sentinel failover-timeout resque 180000
sentinel parallel-syncs resque 5

第一行配置指示 Sentinel 去监视一个名为 mymaster 的主服务器, 这个主服务器的 IP 地址为 127.0.0.1 , 端口号为 6379 , 而将这个主服务器判断为失效至少需要 2 个 Sentinel 同意 (只要同意 Sentinel 的数量不达标,自动故障迁移就不会执行)。

不过要注意, 无论你设置要多少个 Sentinel 同意才能判断一个服务器失效, 一个 Sentinel 都需要获得系统中多数(majority) Sentinel 的支持, 才能发起一次自动故障迁移, 并预留一个给定的配置纪元 (configuration Epoch ,一个配置纪元就是一个新主服务器配置的版本号)。

换句话说, 在只有少数(minority) Sentinel 进程正常运作的情况下, Sentinel 是不能执行自动故障迁移的。

其他选项的基本格式如下:

sentinel <选项的名字> <主服务器的名字> <选项的值>

$ ./redis-cli -h 127.0.0.1 -p 6379 -a myPassword  密码启动

redis文档http://redisdoc.com/index.html
原文地址:https://www.cnblogs.com/yaowen/p/8283570.html