随着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.