redis主从故障自动切换IP漂移

随着web2.0时代的到来,对web服务QPS要求越来越高,天下武功唯快不破,将数据存储到内存无疑是IO最快的方式。内存容量和价格已经不能再限制我们的想象力,因此使用redis代替传统数据库可以成为高QPS的一个选择。

本文将介绍redis主从复制模式,故障自动切换和虚拟IP的漂移。redis主从复制可以提供数据冗余容灾,sentinel实现故障自动切换保证服务高可用,keepalived 可使客户端不必在redis故障切换后做任何操作,只需要访问固定的虚拟IP即可。

redis主从复制配置

master: 192.168.1.103

slave :192.168.1.104 

master配置redis.conf

1. 注释bind 127.0.0.1,不然slave无法同步数据。

2.

protected-mode yes  # 开启保护模式

requirepass "123456"   #访问密码

daemonize yes  #后台方式启动

masterauth "123456"  #slave的密码,当slave切换成master时需要同步新master的数据

slave配置redis.conf

配置同master,只需要添加

slaveof 192.168.1.103 6379


哨兵故障自动切换

哨兵sentinel是redis自带的故障自动切换工具。

master配置sentinel.conf

daemonize yes  #后台方式启动

sentinel monitor mymaster1 192.168.1.103 6379 1  #监控103,最后的1表示只要一个哨兵标志103 down,则认为down. 

sentinel down-after-milliseconds mymaster1 3000   #多长时间连不上则认为他down,单位毫秒

sentinel auth-pass mymaster1 123456  #认证密码

slave配置sentinel.conf

daemonize yes  #后台方式启动

sentinel monitor mymaster2 192.168.1.104 6379 1  #监控103,最后的1表示只要一个哨兵标志104 down,则认为down. 

sentinel down-after-milliseconds mymaster2 3000   #多长时间连不上则认为他down,单位毫秒

sentinel auth-pass mymaster2 123456  #认证密码


keepalived IP漂移

虚拟ip的添加,略。。。

添加keepalived监控redis脚本

master和slave相同

vim check_redis.sh

#!/bin/bash  
###/etc/keepalived/scripts/redis_check.sh  
ALIVE=`/usr/redis-4.0.9/src/redis-cli PING`          #参考使用只修改redis-cli的路径即可  
if [ "$ALIVE" == "PONG" ]; then
  echo $ALIVE  
  exit 0
else
  echo $ALIVE  
  exit 1

fi

添加执行权限

chmod 777 check_redis.sh

修改keepalived.conf
master配置如下:

global_defs {
   notification_email {
     [email protected]
   }
   #notification_email_from keepalived_adm
   #smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}


vrrp_script check_redis {
    script "/usr/redis-4.0.9/check_redis.sh"  #要执行的脚本
    interval 1     # 执行脚本间隔时间
    weight -10   #满足监控的脚本(redis down),权重减10
}


vrrp_instance VI_1 {
    state BACKUP   # master和slave都配置为backup,keepalived根据权重选出master
    interface eth0
    virtual_router_id 51  # 与slave的值要一致
    nopreempt    #master挂掉重启后不抢占
    priority 100   # 优先级,要比slave大
    advert_int 0.5
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.100   #虚拟ip
    }


    track_script {
       check_redis   #执行脚本
    }


}

slave配置

global_defs {
   notification_email {
     [email protected]
   }
   #notification_email_from keepalived_adm
   #smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}


vrrp_script check_redis {
    script "/usr/redis-4.0.9/check_redis.sh"  #要执行的脚本
    interval 1     # 执行脚本间隔时间
    weight -10   #满足监控的脚本(redis down),权重减10
}


vrrp_instance VI_1 {
    state BACKUP   # master和slave都配置为backup,keepalived根据权重选出master
    interface eth0
    virtual_router_id 51  # 与master的值要一致
    priority 99   # 优先级,要比master小
    advert_int 0.5
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.100   #虚拟ip
    }


    track_script {
       check_redis   #执行脚本
    }


}

测试

启动master和slave

启动redis

src/redis-server redis.conf

启动哨兵

src/redis-sentinel sentinel.conf

启动keepalived

sudo service keepalived restart

测试验证

关闭master。。。略

重启master。。。略


ok, done.



猜你喜欢

转载自blog.csdn.net/chenguohong88/article/details/80153014
今日推荐