keepalived-高可用性故障转移的首选方案

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了keepalived-高可用性故障转移的首选方案相关的知识,希望对你有一定的参考价值。

keepalived——高可用性故障转移的首选方案

名词:

failaver(故障转移)

failback(回复)

内核态  用户态

224-239的网段组播网段 可以  多个机器共用一个IP

要使用keepalived需要开启VRRP协议    将会自动加入224.0.0.18组  

优先级0-255.越高越优先

*************************首先设置RS  (real server)*********************************

首先配置好网站服务,测试一下所有的RS服务器  //real server    真实服务器

[[email protected] ~]# ip addr add dev lo 10.18.42.144/32      //在lo接口上绑定VIP (就是在LB上配置的第二个IP)

[[email protected] ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore       //忽视;不支声

[[email protected] ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce  // 宣布;宣告

[[email protected] ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

[[email protected] ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

*********************************设置LB  (负载均衡)*********************************

yum install ipvsadm   keepalived             // 首先安装

[[email protected] ~]# ipvsadm -C              //删除以前设置

[[email protected] ~]# ipvsadm -S              //永久保存

[[email protected] ~]# cd /etc/keepalived/

[[email protected] ~]# cp keepalived.conf{,.backup}                 //以防万一

*************************设置   master+backup   LB  (负载均衡)****************************

★★★★★★这个是mastrt设置★★★★★★

[[email protected] ~]# vim /etc/keepalived/keepalived.conf      //修改成下面这样

! Configuration File for keepalived

global_defs {

  router_id wang                      #名字是不能一样的,随便起

}

vrrp_instance web {                  #  这个名字要一致,随便起

   state MASTER                      #  MASTER 或 BACKUP

   interface ens33

   virtual_router_id 44               # 虚拟路由IP  相当于组  要一致

   priority 150                            #优先级0-255   越高越优先

   advert_int 1                           #检查间隔,默认1秒

   authentication {

       auth_type PASS                 #设置密码  

       auth_pass 123                   #密码要一致

   }

   virtual_ipaddress {

       10.18.42.145                    #VIP(虚拟IP)

   }

}

virtual_server 10.18.42.145 80 {

   delay_loop 6                             #健康检查时间间隔

   lb_algo rr                                  #lvs调度算法rr|wrr|lc|wlc|lblc|sh|dh

   lb_kind DR                                #负载均衡转发规则NAT|DR|RUN

   persistence_timeout 5               #5秒会话保持时间

   protocol TCP                             #使用的协议

   real_server 10.18.42.164 80 {

       weight 1                                 #默认为1,0为失效

       TCP_CHECK {

           connect_port 80                  #健康检查的端口

           connect_timeout 3               #连接超时时间

           nb_get_retry 3                     #重连次数

           delay_before_retry 3            #重连间隔时间

       }

   }

   real_server 10.18.42.45 80 {

       weight 1

       TCP_CHECK {

           connect_port 80

connect_timeout 3

           nb_get_retry 3

           delay_before_retry 3

       }

   }

}

★★★★★★这个是backup设置★★★★★★

[[email protected] keepalived]# vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

  router_id wang

}

vrrp_instance web {

   state BACKUP

   interface ens33

   virtual_router_id 44

   priority 100

 # nopreempt        #设置为不抢占 注:这个配置只能设置在backup主机上,而且这个主机优先级要比另外一台高  

   advert_int 1

   authentication {

       auth_type PASS

       auth_pass 123

   }

   virtual_ipaddress {

       10.18.42.145

   }

}

virtual_server 10.18.42.145 80 {

   delay_loop 6

   lb_algo rr

   lb_kind DR

   persistence_timeout 5

   protocol TCP

   real_server 10.18.42.164 80 {

       weight 1

       TCP_CHECK {

           connect_port 80

           connect_timeout 3

           nb_get_retry 3

           delay_before_retry 3

       }

   }

   real_server 10.18.42.45 80 {

       weight 1

       TCP_CHECK {

           connect_port 80

           connect_timeout 3

           nb_get_retry 3

           delay_before_retry 3

       }

   }

}

这样就实现了LB的高可用性,坏掉一个还有另一个。keepalived之间会有一个master,keepalived之间要单独享用一个交换机一个网段,设置之好后keepalived会进行心跳检测,默认好像是3秒一次,连不上就自动剔除。

但是这样master+backup 的组合,会出现一个问题就是,假如master宕机了,然后在修复好之后重新工作后,它会抢占master身份,这样会造成多切一次。就会产生多余的延迟、数据等待、等一些不必要的事情。

解决办法:

  vrrp_instance web {   下   添加 nopreempt

如图:

技术分享图片技术分享图片

nopreempt        #设置为不抢占 注:这个配置只能设置在backup主机上,而且这个主机优先级要比另外一台高  

但是!!!!master不能设置nopreempt

所以解决方案是:不设置master,全部设置成backup,这样大家都是backup,就都能添加nopreempt,即使原本成为master的LB坏掉重新修好之后也不会抢占master。

keepalive的 nopreempt 非抢占

通常如果master服务死掉后backup会变成master,但是当master服务又好了的时候 master此时会抢占VIP,这样就会发生两次切换对业务繁忙的网站来说是不好的。所以我们要在配置文件加入 nopreempt 非抢占,但是这个参数只能用于state 为backup,故我们在用HA的时候最好master 和backup的state都设置成backup 让其通过priority来竞争。  

后面附一个:关于keepalived配置文件的详细说明:https://blog.csdn.net/jibcy/article/details/7826158


以上是关于keepalived-高可用性故障转移的首选方案的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 高可用:mysql+Lvs+Keepalived 负载均衡及故障转移

记一次Nginx+Keepalived高可用故障转移

5-4keepalived与nginx实现高可用故障转移实战

keepalived高可用服务总结分享

Nginx+Keepalived实现Nginx高可用

高可用——Keepalived安装部署使用详解