设为首页 收藏本站
查看: 1066|回复: 0

[经验分享] 使用keepalived打造redis双机热备

[复制链接]

尚未签到

发表于 2015-7-21 07:19:59 | 显示全部楼层 |阅读模式
  redis是非常实用的优秀nosql开源产品,在高并发的服务器环境中,可以作为缓存和队列使用.美中不足的是,到现在为止,redis并没有推出自己的集群方案,对一个完善的生产环境,负载均衡,高可用,主从备份都是必不可少的选项,redis提供了稳定·的主从备份功能,提供了数种持久化策略,在主从备份上也提供了增量备份的功能,现在通过sentinel提供主从热备的功能,可惜功能上并不完善,达不到生产环境的要求。
  现在我们选定keepalived作为redis的高可用支持,keepalived不仅可以比较完善的支持redis的高可用,而且作为lvs负载均衡的配套产品,和lvs天然具有较好的配合,对于搭建redis集群有较好的扩展性。
  redis和keepalived的安装非常简单,网上大把的文章可以参考,这里就不再赘述,这里按照redis双机主从热备的场景,讲需要注意的几点,网上的很多文章没有讲清楚。
  1,lvs和keepalived的关系,lvs起的是负载均衡功能,而keepalived则是高可用(热备)的支持,keeplaived可以单独使用。
  2,keepalived通过VIP虚拟ip的绑定转换来打造热备支持,在转化主从身份的过程中,还支持脚本的调用,根据不同的脚本,keepalived可以用于不同的场景要求,可谓功能强
  3,centos环境中keepalived的使用需要安装ipvsadm支持。
  4,如果负载均衡使用的是nat策略,那么可以不设置linux的arp_ignore(arp组播忽略)选项。
  5,/etc/sysconfig/keeaplived 为keepalived的启动脚本,这个可以不用修改,如果keepalived的启动配置不在/etc/keepalived/keepalived.conf下则需要在这里指定配置文件的位置
  /etc/keepalived/keepalived.conf为kaapalived的默认配置文件所在位置
  /var/log/messages中记载了keepalived的启动,vip转化等log信息,至于角色转化过程中的脚本执行日志,由各个脚本自己指定
  
  下面贴出主从的keepalived.conf设置,在centos7下测试通过
  主机keepalived.conf



! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 128.0.0.1
smtp_connect_timeout 30
router_id LVS_MASTER
}
vrrp_script chk_redis
{
script "/usr/local/redis/sh/redis_check.sh 127.0.0.1 6379"
interval 2
timeout 2
fall 3
}
vrrp_instance VI_1 {
state MASTER
interface eno16777736
virtual_router_id 60
priority 100
advert_int 3
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.72.115
# 192.168.200.17
# 192.168.200.18
}
track_script {
chk_redis
}
notify_master "/usr/local/redis/sh/redis_master_master.sh 127.0.0.1 192.168.72.128 6379"
notify_backup "/usr/local/redis/sh/redis_master_slave.sh 127.0.0.1 192.168.72.128 6379"
notify_fault "/usr/local/redis/sh/redis_fault.sh"
}
virtual_server 192.168.72.115 6379 {
delay_loop 6
lb_algo rr
lb_kind NAT
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
sorry_server 127.0.0.1 80
real_server 192.168.72.11 6379 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 6379
}
}
real_server 192.168.72.128 6379 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 6379
}
}

}
  从机的keepalived.conf配置



! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 128.0.0.1
smtp_connect_timeout 30
router_id LVS_BACKUP
}
vrrp_script chk_redis
{
script "/usr/local/redis/sh/redis_check.sh 127.0.0.1 6379"
interval 2
timeout 2
fall 3
}
vrrp_instance VI_1 {
state BACKUP
interface eno16777736
virtual_router_id 60
priority 99
advert_int 3
nopreempt
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.72.115
# 192.168.200.17
# 192.168.200.18
}
track_script {
chk_redis
}
notify_master "/usr/local/redis/sh/redis_backup_master.sh 127.0.0.1 192.168.72.11 6379"
notify_backup "/usr/local/redis/sh/redis_backup_slave.sh 127.0.0.1 192.168.72.11 6379"
notify_fault "/usr/local/redis/sh/redis_fault.sh"
}
virtual_server 192.168.72.115 6379 {
delay_loop 6
lb_algo rr
lb_kind NAT
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
sorry_server 127.0.0.1 80
real_server 192.168.72.11 6379 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 6379
}
}
real_server 192.168.72.128 6379 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 6379
}
}

}
  
  请大家注意几点:
  1,同一组里的各个机器配置文件中router_id不能相同,很多文章讲这里可以相同是错误的,这个是组中身份的标识。同一个组里的virtual_router_id必须相同,这是组标识。
  2,priority是设置优先级别的,主服务器的优先级必须高于从服务器,即这个数字要大些。
  3,interface后跟的是网卡名,在centos7中可不叫eth0,最好在配置之前使用ifconfig查看下你的网卡名称。
  4,real_server中的weight设置的是负载均衡优先级,如果主从热备的场景下,这里可以设置为相同。
  
  keeaplived可以在主从都运行良好的情况下检测主从状态,当主服务器down掉,或者进程意外终止时,先将VIP绑定到从服务器上,然后通过指定的脚本来提升从服务器的应用层面的角色定位,在redis中就是运行slave no one,当主服务器恢复服务后,将VIP恢复绑定至主服务器,然后调用脚本同步主服务器宕机时间中从服务器储存的数据,然后将主服务器redis进程提升为主redis,从服务器redis降格为备份进程。这些功能的实现都是通过主动调用notify_master脚本实现,这个脚本当然可以配置为其他的功能,所以,这就可以使keepalived在很多场合发挥作用。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-88808-1-1.html 上篇帖子: 安装redis和phpredis模块 下篇帖子: Redis+php-resque实现消息队列
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表