手动切换redis服务器的主从角色:
步骤一:
配置一台master主服务器,两台slave服务器,两台slave都指向master(主从配置省略)
步骤二:
将master进程关闭,方法:可以直接kill掉,也可以在其客户端执行shutdown命令
步骤三:
将slave1由从服务器切换为主服务器
进入slave1客户端,
输入info replication
# Replication
role:slave #扮演slave角色
master_host:localhost
master_port:6379
master_link_status:down #主服务停止运行
master_last_io_seconds_ago:-1
master_sync_in_progress:0
master_link_down_since_seconds:21
slave_priority:100
slave_read_only:1
connected_slaves:0
输入:
slaveof no one
info replication
# Replication
role:master
connected_slaves:0
#说明成功从slave角色切换到master
config set slave-read-only no
#修改配置参数,将服务器自身修改为可写状态
config get slave-read-only
1) "slave-read-only"
2) "yes"
步骤四:
info replication
# Replication
role:slave
master_host:localhost
master_port:6379
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:0
master_link_down_since_seconds:873
slave_priority:100
slave_read_only:1
connected_slaves:0
#将slave2的master切换到locahost 6380服务器
slaveof localhost 6380
info replication
# Replication
role:slave
master_host:localhost
master_port:6380
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_priority:100
slave_read_only:1
connected_slaves:0
运用sentinel工具自动的切换服务器角色:
Sentinel不断与master通信,获取master的slave信息.
监听master与slave的状态
如果某slave失效,直接通知master去除该slave.
如果master失效,,是按照slave优先级(可配置参数:slave-priority ), 选取1个slave做 new master
,把其他slave--> new master
疑问: sentinel与master通信,如果某次因为master IO操作频繁,导致超时,
此时,认为master失效,很武断.
解决: sentnel允许多个实例看守1个master, 当N台(N可设置)sentinel都认为master失效,才正式失效.
sentinel monitor mymaster 127.0.0.1 6379 2 #2为两个sentinel实例监听master状态
将redis解压包中的sentinel配置文件复制一份
Sentinel选项配置
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 client-reconfig-script mymaster /var/redis/reconfig.sh # 在重新配置new master,new slave过程,可以触发的脚本
sentinel parallel-syncs mymaster 1 #一次性修改几个slave指向新的new master
注:如果多台slave同时指向一台master,那么master需要为多台slaved dump多份的rdb,然后aof同步(redis主从切换的弊端)