keepalived高可用

一、keepalived 简介
      Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。
      Keepalived软件主要是通过VRRP协议实现高可用功能的。VRRP是Virtual RouterRedundancyProtocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。
  所以,Keepalived一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用功能。
1、keepalived 服务的作用
       keepalived的作用是检测Web服务器的状态,如果有一台提供Web服务器、MySQL服务器宕机或工作出现故障,keepalived会及时检测到,并将有故障的Web服务器或者MySQL服务器从系统中剔除,当服务器恢复并且正常提供服务后keepalived会自动将Web服务器、MySQL服务器的节点加入到集群中。这些工作都是keepalived自动完成,不需要人工干涉,需要人工做的只是修复发生故障的服务器。
2、keepalived 服务的三个重要功能
 • 管理LVS负载均衡软件
 • 实现LVS集群节点的健康检查中
 • 作为系统网络服务的高可用性(failover)
3、keepalived 是一个类似于工作在layer3、4和7交换机制的软件
     layer3、4和7工作在IP/TCP协议栈的IP层、传输层及应用层,实现原理如下:
 • layer3:keepalived 使用layer3的方式工作时,keepalived会定期向服务器群中的服务器发送一个ICMP的数据包,如果发现某台服的IP地址无法ping通,keepalived便报告这台服务器失效,并将它从服务器集群中剔除。layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。
 • layer4:layer4 主要以TCP端口的状态来决定服务器工作正常与否。如Webserver的服务端口一般是80,如果keepalived 检测到80端口没有启动,则 • keepalived 将把这台服务器从服务器群中剔除。
 • layer7:layer7 工作在应用层,keepalived将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则keepalived 将把服务器从服务器群中剔除。
4、keepalived VRRP
 • VRRP,全称 Virtual Router RedundancyProtocol,中文名为虚拟路由冗余协议,VRRP的出现是为了解决静态路由的单点故障。
 • VRRP是通过一种竟选协议机制来将路由任务交给某台 VRRP路由器的。
 • VRRP用 IP多播的方式(默认多播地址(224.0_0.18))实现高可用对之间通信。
 •工作时主节点发包,备节点接包,当备节点接收不到主节点发的数据包的时候,就启动接管程序接管主节点的开源。备节点可以有多个,通过优先级竞选,但一般Keepalived系统运维工作中都是一对。
 •VRRP使用了加密协议加密数据,但Keepalived官方目前还是推荐用明文的方式配置认证类型和密码。
5、keepalived 工作原理
     Keepalived高可用对之间是通过 VRRP进行通信的,VRRP是通过竞选机制来确定主备的,主的优先级高于备,因此,工作时主会优先获得所有的资源,备节点处于等待状态,当主挂了的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务。
  在Keepalived服务对之间,只有作为主的服务器会一直发送VRRP广播包,告诉备它还活着,此时备不会枪占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性.接管速度最快可以小于1秒。
 
二、keepalived 软件安装与配置详解
1、安装
# yum installkeepalived -y
/etc/keepalived
/etc/keepalived/keepalived.conf                #keepalived服务主配置文件
/etc/sysconfig/keepalived
/usr/bin/genhash
/usr/lib/systemd/system/keepalived.service        #服务
/usr/libexec/keepalived
/usr/sbin/keepalived
2、配置文件说明
 • 全局配置
 global_defs {                           #全局配置
    notification_email {                  #定义报警邮件地址
      acassen@firewall.loc
      failover@firewall.loc
      sysadmin@firewall.loc
    }
    notification_email_fromAlexandre.Cassen@firewall.loc  #定义发送邮件的地址
    smtp_server 192.168.200.1          #邮箱服务器
    smtp_connect_timeout 30             #定义超时时间
    router_id LVS_DEVEL               #定义路由标识信息,相同局域网唯一
    vrrp_skip_check_adv_addr
    vrrp_strict
    vrrp_garp_interval 0
    vrrp_gna_interval 0
 } 
 • 虚拟ip配置
vrrp_instance VI_1{          #定义实例
    state MASTER                #状态参数 master/backup 只是说明
    interface eth0             #虚拟IP地址放置的网卡位置
    virtual_router_id 51        #VRRP组名,两个节点设置一样,以指明各个节点同属一VRRP组
    priority 100                #优先级决定是主还是备    越大越优先 1~254
    advert_int 1               #负载均衡器之间同步检查的时间间隔,单位是秒
    authentication{        #设置验证信息,两个节点需一致
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.16           #指定虚拟IP,两个节点需设置一样
        192.168.200.17
        192.168.200.18
    }
}
virtual_server192.168.200.100 443 {        #定义虚拟服务器
    delay_loop6                                #健康检查时间,单位是秒
    lb_algorr                                #负载调度算法,这里设置为rr,即轮询算法
    lb_kindNAT                                #LVS实现负载均衡的机制,可以有NAT、TUN和DR三个模式可选
    persistence_timeout50                #会话保持时间,单位是秒   负载均衡时设为0或者注销此行,不然轮询时请求连接会话丢失
    protocolTCP                                #转发协议类型,有tcp和udp两种
 
    real_server 192.168.201.100 443{        #定义WEB服务器
        weight1                                #权重
          TCP_CHECK{                        #通过tcpcheck判断RealServer的健康状态
connect_timeout5                #连接超时时间
nb_get_retry3                        #重连次数
delay_before_retry3                #重连间隔时间
connect_port80
        }
    }
}
 
三、Apache + keepalived + lvs 负载均衡、热备
 • # vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.lo.arp_ignore= 1
net.ipv4.conf.all.arp_ignore= 1
net.ipv4.conf.lo.arp_announce= 2
net.ipv4.conf.all.arp_announce= 2
 • 主MASTER:
! Configuration Filefor keepalived
global_defs {
   notification_email {
      root@localhost
   }
   notification_email_from keepalived@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
#   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_script check_httpd{
script"/data/sh/check_httpd.sh"
interval2
weight2
}
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 110
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.28.88/24
    }
    track_script {
check_httpd
}        
}
virtual_server192.168.28.88 80 {
    delay_loop 6
    lb_algo rr
#    lb_kind NAT
    lb_kind DR
#    persistence_timeout50                #轮询模式会丢失会话设为0或者注销此行
    persistence_timeout 0
    protocol TCP
    real_server 192.168.28.134 80 {
        weight 1
        TCP_CHECK {
           connect_port 80
           connect_timeout 3
           nb_get_retry 3
           delay_before_retry 10
          }
}        
    real_server 192.168.28.135 80 {
        weight 1
        TCP_CHECK {
           connect_port 80
           connect_timeout 3
           nb_get_retry 3
           delay_before_retry 10
  }
}
}
 • 备BACKUP:
    state BACKUP
    priority 90
 • 检查脚本:
# vim check_httpd.sh
#!/bin/bash
counter=$(ps -C httpd--no-heading|wc -l)
if ["${counter}" = "0" ]; then
    systemctl restart httpd
    sleep 2
    counter=$(ps -C httpd --no-heading|wc -l)
    if [ "${counter}" = "0"]; then
    systemctl stop keepalived
    fi
fi
# chmod 777check_httpd.sh
 • 检查状态:
# ipvsadm -l
# ipvsadm -lnc     连接条目
IPVS connection entries
pro expire state       source             virtual            destination
TCP 01:43  FIN_WAIT   192.168.28.1:53984 192.168.28.88:80  192.168.28.134:80
TCP 00:37  SYN_RECV   192.168.28.1:53985 192.168.28.88:80  192.168.28.135:80
TCP 00:05  FIN_WAIT   192.168.28.1:53930 192.168.28.88:80  192.168.28.134:80
# ipvsadm -L -n   查看应答信息
IP Virtual Serverversion 1.2.1 (size=4096)
Prot LocalAddress:PortScheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.28.88:80 rr
  -> 192.168.28.134:80            Route   1     0          2        
  -> 192.168.28.135:80            Route   1     0          2
 • 配置WEB服务器,即realserver节点1和2
  由于采用的是DR方式调度,Real_Server会以LVS的VIP来直接回复Client,所以需要在Real_Server的lo上开启LVS的VIP来与Client建立通信
# ifconfig lo:0192.168.28.88 netmask 255.255.255.255 up
 • 配置web1
# vim /etc/init.d/lvsrs
#!/bin/bash 
#description : startrealserver
VIP=192.168.28.88
sh/etc/rc.d/init.d/functions
case "$1" in
start)
echo " start LVSof REALServer"
/usr/sbin/ifconfig lo:0$VIP broadcast $VIP netmask 255.255.255.255 up
echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
;;
stop)
/usr/sbin/ifconfig lo:0down
echo "close LVSDirectorserver"
echo "0">/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0">/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0">/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0">/proc/sys/net/ipv4/conf/all/arp_announce
;;
*)
echo "Usage: $0{start|stop}"
exit 1
esac
# chmod 755/etc/init.d/lvsrs      #给新增lvsrs脚本一个755权限
# service lvsrsstart             #启动lvsrs服务,我环境启动时出错,给一个functions 755权限,按各自环境操作  
# chmod 755/etc/rc.d/init.d/functions    #给functions755权限
 • 注意:
 • DR模式的缺陷
Realserver和lvs的vip提供服务的端口必须一致。
也就是说:vip的端口对外端口为80,但后端服务的真实端口为8080,通过lvs的DR模式是实现不了的。
Realserver和LVS不能在同一台机器上
Realserver和LVS需要在同一个vlan或者局域网下。
 • NAT模式的缺陷
NAT模式流量的入和出都需要通过LVS服务器。
效率相比DR模式,性能和效率上会差一些。
 
四、Nginx + keepalived 热备
 • Nginx+keepalived 主从配置
使用一个vip地址,前端使用2台机器,一台做主,一台做备,但同时只有一台机器工作,另一台备份机器在主机器不出现故障的时候,永远处于浪费状态,对于服务器不多的网站,该方案不经济实惠。
主Server1:192.168.28.134
备Server2:192.168.28.135
VIP:192.168.28.88
# yum -y installkeepalived nginx
 • 主MASTER 服务器keepalived.conf配置
global_defs {
   notification_email {
     root@localhost
   }
   notification_email_from Keepalived@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_script chk_nginx{                        #配置vrrp_script,主要用于健康检查,以及检查失败后执行的动作。
    script"/etc/keepalived/chk_nginx"        #健康检查脚本,当脚本返回值不为0时认为失败
    interval2                                #检查频率,以下配置每2秒检查1次
    weight-5                                #当检查失败后,将vrrp_instance的priority减小5
    fall3                                        #连续监测失败3次,才认为真的健康检查失败。并调整优先级
    rise2                                        #连续监测2次成功,就认为成功。但不调整优先级
}
vrrp_instance VI_1{                        #定义对外提供服务的VIPvrrp_instance配置
    stateMASTER                        #指定vrrp_instance的初始状态,是MASTER还是BackUP主要还是看优先级。
    interfaceens33                        #指定vrrp_instance绑定的网卡,最终会通过指定的网卡宣告VIP
    mcast_src_ip192.168.28.134                #发送心跳包的源IP,可使用绑定的网卡IP,也可以使用本服务器上的其他IP
    virtual_router_id51                        #相当于VRID,用于在一个网内区分组播,需要组播域内内唯一。
    priority100                                #本机的优先级,VRID相同的机器中,优先级最高的会被选举为MASTER
    advert_int1                                #心跳间隔,下面配置,MASTER会每隔1秒发送一个报文高职组内其他机器,自己还活着。
    authentication{                        #定义主从的验证方式以及密码,一般使用PASS(最长8位,超过了只会识别前8位作为密码)
        auth_type PASS
        auth_pass 123456
    }
#VIP
    virtual_ipaddress {
    192.168.28.88
        }
  track_script{                                #本vrrp_instance所引用的脚本配置,名称就是vrrp_script定义的容器名
       chk_nginx
    }
 smtp_alert                                #状态切换,使用上述配置发送邮件通知
}
 • 备BACKUP 服务器keepalived.conf配置
state MASTER 改为  state BACKUP
mcast_src_ip192.168.28.134 改为backup服务器实际的IP mcast_src_ip 192.168.28.135
priority 100 改为priority90
 •添加Nginx监控脚本,监控Nginx的运行状态,如果发现异常并不能重启成功则关闭Keepalived,让VIP漂移到备份服务器.
# vi/etc/keepalived/chk_nginx.sh
#!/bin/bash
#检查nginx进程是否存在
counter=$(ps -C nginx--no-heading|wc -l)
if ["${counter}" = "0" ]; then
#尝试启动一次nginx,停止5秒后再次检测
    service nginx start
    sleep 5
    counter=$(ps -C nginx --no-heading|wc -l)
    if [ "${counter}" = "0"]; then
#如果启动没成功,就杀掉keepalive触发主备切换
        service keepalived stop
    fi
fi
# chmod +x/etc/keepalived/chk_nginx.sh
 
五、Nginx + keepalived 双主架构
 • Nginx+keepalived 双主配置
使用两个vip地址,前端使用2台机器,互为主备,同时有两台机器工作,当其中一台机器出现故障,两台机器的请求转移到一台机器负担,非常适合于当前架构环境。
Server1:192.168.28.134
Server2:192.168.28.135
VIP1:192.168.28.88
VIP2:192.168.28.99
 • Server1 上keepalived.conf 配置文件内容:
! Configuration Filefor keepalived
# 全局配置,配置收件人
global_defs {
   notification_email {
     root@localhost
   }
   notification_email_from keepalived@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
#集群资源监控,组合track_script进行
vrrp_script check_nginx{
script"/etc/keepalived/nginx_check.sh" #检测 nginx 状态的脚本路径
interval 2  #检测时间间隔
weight -20  #条件成立 权重减20
}
#VIP1
vrrp_instance VIP_1 {
#设置当前主机为主节点,如果是备用节点,则设置为BACKUP
state MASTER
#指定HA监测网络接口,可以用ifconfig查看来决定设置哪一个
interface ens33
#虚拟路由标识,同一个VRRP实例要使用同一个标识,主备机
virtual_router_id 80
#因为当前环境中VRRP组播有问题,改为使用单播发送VRRP报文 如果VRRP组播没问题,以下这块的内容可以注释掉。
#这个地方需要关注,之前未做此设置,结果主备节点互相不能发现,因此主备节点都升级成了MASTER,并且绑定了VIP
# 主节点时,内容为:
#unicast_src_ip192.168.28.134
# unicast_peer {
# 192.168.28.135
#}
# 设置优先级,确保主节点的优先级高过备用节点
priority 100
# 用于设定主备节点间同步检查时间间隔
advert_int 2
#设置高可用集群中不抢占功能,在主机down后,从机接管,当主机重新恢复后,设置此功能,备机将继续提供服务,从而避免因切换导致的隐患
# nopreempt
#设置主备节点间的通信验证类型及密码,同一个VRRP实例中需一致
authentication {
auth_type PASS
auth_pass 1234
}
#集群资源监控,组合vrrp_script进行
track_script {
check_nginx
}
#设置虚拟IP地址,当keepalived状态切换为MASTER时,此IP会自动添加到系统中
#当状态切换到BACKUP时,此IP会自动从系统中删除
# 可以通过命令ip add查看切换后的状态
virtual_ipaddress {
192.168.28.88  #虚拟ip配置完之后就用它访问
}
}
#VIP2
vrrp_instance VIP_2 {
#设置当前主机为备节点,如果是主用节点,则设置为MASTER
state BACKUP
#指定HA监测网络接口,可以用ifconfig查看来决定设置哪一个
interface ens33
#虚拟路由标识,同一个VRRP实例要使用同一个标识,主备机
virtual_router_id 81
#因为当前环境中VRRP组播有问题,改为使用单播发送VRRP报文 如果VRRP组播没问题,以下这块的内容可以注释掉。
#这个地方需要关注,之前未做此设置,结果主备节点互相不能发现,因此主备节点都升级成了MASTER,并且绑定了VIP
# 主节点时,内容为:
#unicast_src_ip192.168.28.134
# unicast_peer {
# 192.168.28.135
#}
# 设置优先级,确保主节点的优先级高过备用节点
priority 90
# 用于设定主备节点间同步检查时间间隔
advert_int 2
#设置高可用集群中不抢占功能,在主机down后,从机接管,当主机重新恢复后,设置此功能,备机将继续提供服务,从而避免因切换导致的隐患
# nopreempt
#设置主备节点间的通信验证类型及密码,同一个VRRP实例中需一致
authentication {
auth_type PASS
auth_pass 1234
}
#集群资源监控,组合vrrp_script进行
track_script {
check_nginx
}
#设置虚拟IP地址,当keepalived状态切换为MASTER时,此IP会自动添加到系统中
#当状态切换到BACKUP时,此IP会自动从系统中删除
# 可以通过命令ip add查看切换后的状态
virtual_ipaddress {
192.168.28.99  #虚拟ip配置完之后就用它访问
}
}
 • 注意:
如果配置双主模式,一定要将nopreempt这个属性注释掉,搭建主备的时候需要他,搭建双主模式的时候,如果开启它,会将两个虚拟ip绑定到同一个服务器上。
 • Server2 上keepalived.conf 配置文件内容:
! Configuration Filefor keepalived
# 全局配置,配置收件人
global_defs {
   notification_email {
     root@localhost
   }
   notification_email_from keepalived@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
#集群资源监控,组合track_script进行
vrrp_script check_nginx{
script"/etc/keepalived/nginx_check.sh" #检测 nginx 状态的脚本路径
interval 2  #检测时间间隔
weight -20  #条件成立 权重减20
}
#VIP1
vrrp_instance VIP_1 {
#设置当前主机为主节点,如果是备用节点,则设置为BACKUP
state BACKUP
#指定HA监测网络接口,可以用ifconfig查看来决定设置哪一个
interface ens33
#虚拟路由标识,同一个VRRP实例要使用同一个标识,主备机
virtual_router_id 80
#因为当前环境中VRRP组播有问题,改为使用单播发送VRRP报文 如果VRRP组播没问题,以下这块的内容可以注释掉。
#这个地方需要关注,之前未做此设置,结果主备节点互相不能发现,因此主备节点都升级成了MASTER,并且绑定了VIP
# 主节点时,内容为:
#unicast_src_ip192.168.28.135
# unicast_peer {
# 192.168.28.134
#}
# 设置优先级,确保主节点的优先级高过备用节点
priority 90
# 用于设定主备节点间同步检查时间间隔
advert_int 2
#设置高可用集群中不抢占功能,在主机down后,从机接管,当主机重新恢复后,设置此功能,备机将继续提供服务,从而避免因切换导致的隐患
# nopreempt
#设置主备节点间的通信验证类型及密码,同一个VRRP实例中需一致
authentication {
auth_type PASS
auth_pass 1234
}
#集群资源监控,组合vrrp_script进行
track_script {
check_nginx
}
#设置虚拟IP地址,当keepalived状态切换为MASTER时,此IP会自动添加到系统中
#当状态切换到BACKUP时,此IP会自动从系统中删除
# 可以通过命令ip add查看切换后的状态
virtual_ipaddress {
192.168.28.88  #虚拟ip配置完之后就用它访问
}
}
#VIP2
vrrp_instance VIP_2 {
#设置当前主机为备节点,如果是主用节点,则设置为MASTER
state MASTER
#指定HA监测网络接口,可以用ifconfig查看来决定设置哪一个
interface ens33
#虚拟路由标识,同一个VRRP实例要使用同一个标识,主备机
virtual_router_id 81
#因为当前环境中VRRP组播有问题,改为使用单播发送VRRP报文 如果VRRP组播没问题,以下这块的内容可以注释掉。
#这个地方需要关注,之前未做此设置,结果主备节点互相不能发现,因此主备节点都升级成了MASTER,并且绑定了VIP
# 主节点时,内容为:
#unicast_src_ip192.168.28.135
# unicast_peer {
# 192.168.28.134
#}
# 设置优先级,确保主节点的优先级高过备用节点
priority 100
# 用于设定主备节点间同步检查时间间隔
advert_int 2
#设置高可用集群中不抢占功能,在主机down后,从机接管,当主机重新恢复后,设置此功能,备机将继续提供服务,从而避免因切换导致的隐患
# nopreempt
#设置主备节点间的通信验证类型及密码,同一个VRRP实例中需一致
authentication {
auth_type PASS
auth_pass 1234
}
#集群资源监控,组合vrrp_script进行
track_script {
check_nginx
}
#设置虚拟IP地址,当keepalived状态切换为MASTER时,此IP会自动添加到系统中
#当状态切换到BACKUP时,此IP会自动从系统中删除
# 可以通过命令ip add查看切换后的状态
virtual_ipaddress {
192.168.28.99  #虚拟ip配置完之后就用它访问
}
}
 • 编写nginx检测脚本
# vim/etc/keepalived/nginx_check.sh
#!/bin/bash
A=`ps -C nginx–no-header |wc -l`
if [ $A -eq 0 ];then
    systemctl restart nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0];then
    systemctl stop keepalived
    fi
fi
# chmod +x/etc/keepalived/nginx_check.sh
 • Nginx + keepalived 双主架构,在日常维护及管理过程中需要:
keepalived主配置文件必须设置不同的VRRP名称,同时优先级和VIP设置也各不相同。
Nginx 网站总访问量为两台Nginx服务器访问之和,可以写脚本自动统计访问量。
两台Nginx 为master,存在两个VIP地址,用户从外网访问VIP,需配置域名映射到两个VIP上方即可。
通过外网DNS映射不同VIP的方法也称为DNS负载均衡模式。
可以通过Zabbix实时监控VIP访问状态是否正常。
 
六、Redis+KeepAlived 高可用集群
     Redis是我们当下比较流行使用的非关系数据库,可支持多样化的数据类型,多线程高并发支持,redis运行在内存拥有更快的读写。
1、Redis特点
 • 完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
 • 支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
 • 不仅仅支持简单的key-value类型的数据,同时还提供如:字符串(String),哈希(Map), 列表(list), 集合(sets) 和有序集合(sorted sets)等数据结构的存储。
 • 支持数据的备份,即master-slave模式的数据备份。
2、Redis 优势
 • 性能极高 – Redis能读的速度是100K+次/s,写的速度是80K+次/s 。
 • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists,Hashes, Sets 及 Ordered Sets 数据类型操作。
 • 原子 –Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
 • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key过期等等特性。
3、准备环境
Centos7 -->192.168.28.134 -->主Redis -->主Keepalived
Centos7 -->192.168.28.135 -->从Redis -->备Keepalived
VIP -->192.168.28.88
4、Redis主从配置
 • Master-134 配置
# vim /etc/redis.conf
    bind 0.0.0.0
    port 6379
    daemonize yes
    requirepass 123456
    slave-serve-stale-data yes
    slave-read-only no
 • Slave-135 配置
# vim/etc/redis/redis.conf
    bind 0.0.0.0
    port 6379
    daemonize yes
    slaveof 172.16.81.140 6379
    masterauth 123456
    slave-serve-stale-data yes
    slave-read-only no
5、配置完成后重启redis服务!验证主从是否正常
# redis-cli -a 123456
127.0.0.1:6379> info
查看# Replication    主从信息
# redis-cli -a 123456
127.0.0.1:6379> keys*
查看数据主从是否同步
6、KeepAlived配置实现双机热备
使用Keepalived实现VIP,并且通过notify_master、notify_backup、notify_fault、notify_stop来实现容灾。
 • 主Keepalived配置
vim/etc/keepalived/keepalived.conf
! Configuration Filefor keepalived
global_defs {
   notification_email {
    root@localhost
   }
   notification_email_from keepalived@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_script redis_check{
    script"/etc/keepalived/redis_check.sh"
    interval 2
}
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.28.88
    }
    track_script {
        redis_check
    }
}
 • 备Keepalived配置
    state BACKUP
    priority 90
7、配置脚本/etc/keepalived/redis_check.sh
# vim/etc/keepalived/redis_check.sh
#!/bin/bash
# auto check redisprocess
NUM=`ps -ef |grepredis|grep -v grep|grep -v check|wc -l`
if [[ $NUM -eq 0]];then
systemctlstop keepalived
 
。。。。。。。。。。。。。。。。。。。。。。。。。。等等等