配置redis主从
#从的redis配置文件,需要添加
vim redis.conf
slaveof 192.168.1.5 6379

分别启动主从  nohup ./src/redis-server redis.conf &

redis-cli -h 192.168.1.5 info Replication   主从信息
# Replication
role:master #代表192.168.9.18:6379 这台redis是主
connected_slaves:1
slave0:ip=192.168.1.6,port=6379,state=online,offset=29,lag=0

sentinel.conf 配置   (sentinel集群中各个sentinel也有互相通信,通过gossip协议)
port 26379
dir /tmp
#master1 
sentinel monitor master1 192.168.1.5 6379 2
#末尾的2代表,当集群中有2个sentinel认为master死了时,才能真正认为该master已经不可用了,多个sentinel使用,单个sentinel配置为1 
sentinel down-after-milliseconds master1 10000
#sentinel会向master发送心跳PING来确认master是否存活   单位是毫秒
sentinel parallel-syncs master1 1
#在发生failover主备切换时,这个选项指定了最多可以有多少个slave同时对新的master进行同步,这个数字越小,
完成failover所需的时间就越长,但是如果这个数字越大,就意味着越多的slave因为replication而不可用。可以通过将这个值设为
 1 来保证每次只有一个slave处于不能处理命令请求的状态。
sentinel failover-timeout master1 180000
#failover超时时间,单位毫秒

#master2   可以添加多组主从的redis监听
....

./src/redis-sentinel sentinel.conf  启动
./src/redis-cli -h 192.168.1.6 -p 26379 info Sentinel   相关信息
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
master0:name=master1,status=ok,address=192.168.1.5:6379,slaves=1,sentinels=1

当主的redis 服务器岩机了,sentinel自动把从的redis切换到主
当之前的主redis回复后,sentinel 会把上次主redis重新加入服务中,但是他再以不是主的redis了,变成从的reids  
:相关信息可以从redis Sentinel   的 info Sentinel 信息和日志查看

VIP漂移
VIP设置脚本

这个是在failover时执行的脚本。 
如下所示的参数会传递给脚本client-reconfig-script。
# The following arguments are passed to the script:
#
# <master-name> <role> <state> <from-ip> <from-port> <to-ip> <to-port>
第6个增加VIP,将成为一个Master,其它的则删除VIP。在failover时,仅仅使用ip命令可能会产生arp问题,
因此使用arping命令来抛出GRAP。在使用ip、arping命令时需要root权限,这里使用sudo来执行命令。

vim /var/lib/redis/failover.sh
chmod 755 /var/lib/redis/failover.sh
chown redis: /var/lib/redis/failover.sh
echo -e "redis\tALL=(ALL)\tNOPASSWD:/sbin/ip,NOPASSWD:/sbin/arping" > /etc/sudoers.d/redis
sed -i "s|Defaults.*requiretty|#Defaults\trequiretty|" /etc/sudoers
chmod 440 /etc/sudoers.d/redis

#!/bin/bash
MASTER_IP=${6}
MY_IP='192.168.0.1'   # 每个Server本身的IP
VIP='192.168.0.4'     # VIP
NETMASK='24'          # Netmask
INTERFACE='eth0'      # 接口

if [ ${MASTER_IP} = ${MY_IP} ]; then
        sudo /sbin/ip addr add ${VIP}/${NETMASK} dev ${INTERFACE}
        sudo /sbin/arping -q -c 3 -A ${VIP} -I ${INTERFACE}
        exit 0
else
        sudo /sbin/ip addr del ${VIP}/${NETMASK} dev ${INTERFACE}
        exit 0
fi
exit 1

Redis-Sentinel设置
开始设置redis-sentonel。 
你只需在第一次手工设置VIP。
vim /etc/redis-sentinel.conf
service redis-sentinel start
chkconfig redis-sentinel on
ip addr add 192.168.0.4/24 dev eth0

# sentinel.conf
port 26379
logfile /var/log/redis/sentinel.log
sentinel monitor mymaster 192.168.0.1 6379 2
sentinel down-after-milliseconds mymaster 3000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 60000
sentinel client-reconfig-script mymaster /var/lib/redis/failover.sh

结论
之后你可以尝试kill master而不是宕机来测试failover,我认为这是个比较好且容易实现的方法。 
sentinel down-after-milliseconds mymaster 3000 
大约在3秒左右会检测到redis的宕机。在更恶劣的环境,可以尝试减小这个值。

results matching ""

    No results matching ""