keepalived高可用

  LVS集群的实现,是由多台设备如httpd,nginx主机,php-fpm动态资源主机,MySQL主机,以及Session Server等主机交织构成的,随着访问资源量的日益增加而呈向外扩展的模式,而在这样的LVS模式下,主要的设备就是调度器与后端RS,这两者的能否正常运行决定了我们所架设的服务能否正常提供服务;所以针对于调度器Directory与真实机RS的高可用是势在必行的,但是LVS本身并没有提供高可用的;

  keepalived,实现LVS的高可用,针对于Directory的高可用与后端的RS健康检测,由我们自己设定检测间隙时间;而keepalived这种高可用机制其实是基于vrrp协议来运行的,vrrp协议,又为虚拟冗余路由协议;其主要运行原理如两台路由器,对外表示为一台路由器,即使用一个虚拟的IP地址VIP作为该路由器对外的IP地址,外部其他主机的网关,将两台路由器一个设置为MASTER,一个设置为BACKUP;MASTER作为对外的路由器,将虚拟IP地址给予该路由器,而BACKUP路由器则作为备份路由器存在,在MASTER工作时并不占用任何资源,而当MASTER路由器出现问题down掉的时候,BACKUP路由器就会出来充当MASTER路由器,将虚拟IP地址重新分配给他,并向网络中发布一条免费的arp报文,这个免费报文主要是发送其新生成的MASTER的MAC地址,新的MAC地址格式大概为00-00-5E-00-01-{VRID},通告其路由变换,告诉网络中的主机现在这个路由器是我;如果有多个BACKUP时,则需要进行BACKUP之间的选举操作,即根据BACKUP之间的优先级进行选择;在一同一组的路由器上都会存在一个虚拟ID,VRID,用于标识这个路由是这个组中的一员,这样才能在组中进行选举;

  优先级:选举成为MASTER的主要参考标准,取值范围是0-255

  0:表示该路由器不参与选举,除非所有路由器都down掉了;

  255:该优先级一设置便为MASTER;

  其余1-254按越大,优先级越大来设置;

  抢占式:如果MASTER路由down了,这个时候由下方的BACKUP路由进行选举,如果这个时候MASTER路由又恢复了,就会立即夺过其MASTER的身份;若BACKUP优先级高于MASTER的路由器,就会将其MASTER身份夺过来;

  非抢占式:如果MASTER路由down了,这个时候由下方的BACKUP路由进行选举,如果这个时候MASTER路由又恢复了,并不会夺过其MASTER进程,而是作为BACKUP重新选举;

  为了提高VRRP协议的安全性,其还提供了认证功能:

  1.字符串认证在一个有可能受到安全威胁的网络中,可以将认证方式设置为简单字符认证。发送VRRP 报文的路由器将认证字填入到VRRP报文中,而收到VRRP报文的路由器会将收到的VRRP报文中的认证字和本地配置的认证字进行比较。如果认证字相同,则认为接收到的报文是合法的VRRP报文;否则认为接收到的报文是一个非法报文。 

  2.MD5认证:在一个非常不安全的网络中,可以将认证方式设置为MD5认证。发送VRRP报文的路由器利用认证字和MD5算法对VRRP报文进行加密,加密后的报文保存在Authentication Header(认证头)中。收到VRRP报文的路由器会利用认证字解密报文,检查该报文的合法性。

  keepalived为LVS提供的高可用机制,并不需要我们使用ipvsadm设置集群服务,只需要在keepalived主配置文件/etc/keepalived/keepalived.conf中设置相关属性,上下文,便可以自动生成调度器对外的虚拟IP地址与集群服务规则;还可以基于脚本调用接口通过执行脚本完成脚本中所定义的规则,对后端的RS或者Directory的状态进行邮件备份等相关操作;

  HA Cluster配置的前提:

  1.保证各个主机之间的时间差距不超过1秒,需要使用时间服务器,让其余所有的主机都遵照其时间进行同步;如ntpd,chrony;

   时间服务器:

   ①安装ntp软件包

     yum -y install ntp

   ②修改配置文件:/etc/ntp.conf

   ③在时间服务器开启ntpd服务

   其余主机:

   ①安装ntp包

   ②#ntpdate IP地址

  2.各个节点之间可以通过主机名互相通信;(对于ka并非必须)

  3.一定要确保iptables和selinux不会阻碍各个节点间的数据通信;

  4.为了安全考虑,各个节点之间的root用户可以基于**认证的ssh互相通信(非必须)

  

  安装keepalived:

    yum install -y keepalived(在本地光盘中存在)

  keepalived的配置文件:

    主配置文件:/etc/keepalived/keepalived.conf

    主程序文件:/usr/sbin/keepalived


  我们对于keepalived的配置主要在/etc/keepalived/keepalived.conf中的三部分

  ①GLOBAL CONFIGURATION:用于全局配置,主要是相关邮件信息的发件人与收件人,邮件服务器的地址一般为本机即127.0.0.1;最重要的是,需要设置组播IP地址,不能与其他地址相重;

  ②VRRPD CONFIGURATION:用于配置调度器的相关信息,调度器的状态MASTER,BACKUP,调度器优先级,VRID以及向外的虚拟VIP地址,并留下了关于显示调度器状态变化的脚本接口,如notify_master,notify_backup,notify_fault;

  ③LVS CONFIGURATION:用于设置调度器下的真实服务器,设置真实服务器的RIP,PORT,权重等,最重要的是对后端RS的健康状态检测,HTTP,SSL,TCP三种检测方式,其中HTTP检测较为全面,可以针对回应时间,url内容变化判断RS的健康状态,而TCP则较为粗糙;

  

  项目实例:

  利用keepalived高可用lvs调度器,并分别使用NAT和DR模型的lvs服务负载均衡一个PHP应用,如phpMyAdmin;

  DR模型下:

    DR模型的配置在上一节配置过,在这里就只讲述针对于上一节的DR模型做出了哪些改变!

    ①keepalived的高可用首先的第一点就是要保证各个设备的时间同步,为此我们需要设置一个时间同步服务器,让其余设备对其同步;

    安装时间同步软件:

    yum install -y ntp

    在时间服务器修改配置文件/etc/ntpd.conf(第一台调度器172.16.72.10主机)

    设置那些客户端主机可以以此主机作为时间服务器:

    keepalived高可用

    允许172.16网段的主机

    keepalived高可用

     设置本机为时间服务器,上面的server全部注释掉,那些是其他网络中的时间服务器;


    设置好之后启动ntpd服务

    systemctl start ntpd.service


    客户端主机针对该服务器校准时间:

    #ntpdate 172.16.72.10(时间服务器IP)


   ②添加一台虚拟机作为第二台调度器,IP地址为172.16.72.4

   将设置在第一台调度器上eno16777736:0的VIPdown掉,我们将在keepalived中生成虚拟的VIP;

   安装keepalived在两台调度器上;

   yum -y install keepalived

   针对其配置文件进行配置

   GLOBAL:

   keepalived高可用

   notification_email:邮件接收方的地址,为本机root用户;

   notification_email_from:邮件发送方的地址;

   smtp_server:邮件服务器IP地址;

   router_id drct1:设置路由器ID,仅为了区别不同设备而已;如不修改不影响服务;

   vrrp_mcast_group4 224.220.220.200: 发送vrrp通告的目的IPv4组播地址;

   

   VRRP:

   keepalived高可用

   设置调度器:

     state MASTER:该调度器的状态为MASTER;

     interface:针对于哪个网卡接口;

     priority:优先级,MASTER的优先级需要高于BACKUP的,在抢占模式下;

     authentication:设置认证;

     virtual_ipaddress:虚拟VIP地址;

   注意:设置双实例时,只需要更改其vrrp_instance的名称,优先级与state即可;


    LVS:

    keepalived高可用

    delay_loop:服务轮询的时间;

    lb_algo:使用的调度算法;

    lb_kind:使用的模型;DR or NAT;

    persistence_timeout:长连接时间;

    sorry_server:当后端RS全都不能工作时,在本调度器的http服务中设置sorry界面;

    

    设置RS:

    keepalived高可用

    

     keepalived高可用

     real_server后为RIP;

     设置权重,在此设置的HTTP检测,对指定url进行监测,状态码为200则正常;

     nb_get_retry 3:健康检测重试的次数;

     delay_before_retry 1:重试之前的延迟时长;

     connect_timeout 3:连接超时时长;多长时间没有回应就有问题;

     

     将调度器1的keepalived配置好后,将相同文件传送到第二台调度器的

     /etc/keepalived/keepalived.conf,进行修改;

     如:172.16.72.4调度器的配置:

     keepalived高可用

    修改状态为BACKUP,优先级即可;

    keepalived高可用

   keepalived高可用

   keepalived高可用

    

   重启keepalived

   #systemctl start keepalived.service

   启动后keepalived设备会自动加载ipvsadm系统服务

   keepalived高可用

   MASTER设备会自动生成一个虚拟VIP地址:

   keepalived高可用

   而BACKUP设备则不会生成,但其会自动生成ipvs集群服务;

   这个时候down掉MASTER设备,BACKUP设备就会自动转为MASTER设备了;

   down调度器1:

   #killall keepalived

   #systemctl stop keepalived.service

   

   简单测试一下基于keepalived高可用的DR集群是否生效;

   编辑两个index.html文件分别在两个RS的DocumentRoot下;

   因为是wrr基于权重的算法:

   keepalived高可用

   

   设置MySQL共享存储,基于NAS的NFS:

   将172.16.72.7的数据库信息复制到一个目录中,并将该目录设为共享目录;由RS1 172.16.72.6挂载,并修改数据库相关配置文件/etc/my.cnf;

   大概步骤:

   /etc/exports:

   keepalived高可用

   #exportfs -ar

   keepalived高可用

   RS1配置:

   keepalived高可用

   修改/etc/my.cnf:

   keepalived高可用

   

   访问phpMyAdmin:

   keepalived高可用

   keepalived高可用

   连续两次访问(相隔一段持久连接的访问)

   keepalived高可用

   由上图可知,两次访问的RS各不相同,因为之前实验很多次,所以其顺序有些奇怪;


  NAT模型下:

   NAT模型下的keepalived高可用,同样基于上一篇博客的nat模型,IP配置如下:

    DIR1:

       eno16777736:172.16.72.4 

       eno33554976:192.168.72.4

    DIR2:

       eno16777736:172.16.72.5

       eno33554976:192.168.72.5

    RS1:

       eno16777736:192.168.72.6

    RS2:

       eno16777736:192.168.72.7

    由keepalived高可用设备虚拟出来的IP:

    VIP:

      eno16777736:0 172.16.72.1/16 面向外网

    DIP: 

      eno33554976:0 192.168.72.4/24 面向内网

    ①校准时间

    ②安装keepalived

    yum install -y keepalived

    ③配置DIR1的keepalived

    keepalived高可用

    keepalived高可用

    outside设置的是面对外网的VIP

    keepalived高可用

    inside设置的是面对内网的DIP

    两者需在不同的组中,所以其virtual_router_id需要不一样以区分;

    接下来的配置基本上与nat模式一般无二;

    keepalived高可用

    keepalived高可用

    

    DIR2的keepalived配置:

    keepalived高可用

    keepalived高可用 

    keepalived高可用

    keepalived高可用

   keepalived高可用

   DIR1,DIR2启动keepalived服务;在MASTER主机DIR1与BACKUP主机DIR2上自动生成相关集群服务;

   keepalived高可用

   

   至于后端RS的httpd,php-fpm,Mariadb服务,基本就与之前讲述的一样,不需要变化;

   以下是我利用客户端进行的测试:无持久连接下

   keepalived高可用

   

   物理机访问phpMyAdmin:

   keepalived高可用

   由DIR1上:可知访问的是192.168.72.7

   keepalived高可用

   隔一段时间再次访问,因为设置了持久连接:

   访问的是192.168.72.6了

   keepalived高可用


   断开DIR1的keepalived后,DIR2就自动成为MASTER:

   keepalived高可用

   重新启动DIR1后,DIR2就自动变为BACKUP,因为默认启动抢占模式

   keepalived高可用

    

   本文转自 wujunqi1996 51CTO博客,原文链接:http://blog.51cto.com/12480612/1976074