redis是很是实用的优秀nosql开源产品,在高并发的服务器环境中,能够做为缓存和队列使用.美中不足的是,到如今为止,redis并无推出本身的集群方案,对一个完善的生产环境,负载均衡,高可用,主从备份都是必不可少的选项,redis提供了稳定·的主从备份功能,提供了数种持久化策略,在主从备份上也提供了增量备份的功能,如今经过sentinel提供主从热备的功能,惋惜功能上并不完善,达不到生产环境的要求。java
如今咱们选定keepalived做为redis的高可用支持,keepalived不只能够比较完善的支持redis的高可用,并且做为lvs负载均衡的配套产品,和lvs自然具备较好的配合,对于搭建redis集群有较好的扩展性。linux
redis和keepalived的安装很是简单,网上大把的文章能够参考,这里就再也不赘述,这里按照redis双机主从热备的场景,讲须要注意的几点,网上的不少文章没有讲清楚。redis
1,lvs和keepalived的关系,lvs起的是负载均衡功能,而keepalived则是高可用(热备)的支持,keeplaived能够单独使用。sql
2,keepalived经过VIP虚拟ip的绑定转换来打造热备支持,在转化主从身份的过程当中,还支持脚本的调用,根据不一样的脚本,keepalived能够用于不一样的场景要求,可谓功能强centos
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信息,至于角色转化过程当中的脚本执行日志,由各个脚本本身指定nosql
下面贴出主从的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在不少场合发挥做用。