keepalived实现服务高可用

keepalived

 

一、keepalive的介绍:

      Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。
     Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
    所以,Keepalived 一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用功能。
 
   

二、keepalive的工作原理

     工作时主节点发包,备节点接包,当备节点接收不到主节点发的数据包的时候,就启动接管程序接管主节点的开源。备节点可以有多个,通过优先级竞选,但一般 Keepalived系统运维工作中都是一对。
     Keepalived高可用对之间是通过 VRRP进行通信的, VRRP是遑过竞选机制来确定主备的,主的优先级高于备,因此,工作时主会优先获得所有的资源,备节点处于等待状态,当主挂了的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务。
      在 Keepalived服务对之间,只有作为主的服务器会一直发送 VRRP广播包,告诉备它还活着,此时备不会枪占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性.接管速度最快可以小于1秒。
 

三、keepalive的配置

实验准备四台虚拟机(两台DS两台RS)
 

两台DS端配置

 yum -y install keepalived   #安装keepalive
 yum -y install ipvsadm       #安装ipvsadm 
 yum -y install httpd            #安装httpd

 修改配置文件

 vim /etc/keepalived/keepalived.conf
 
    ! Configuration File for keepalived
    #全局配置
    global_defs {
       notification_email {
                  }
            }
 # VRRP配置
    vrrp_instance VI_1 {
        state MASTER                    #角色类型MASTER|BACKUP
        interface ens33                    #网卡名称
        virtual_router_id 51            #虚拟路由id(需要与BACKUP一致)
        priority 100                    #优先级
        advert_int 1                    #没1秒检查一次
        #nopreempt                        #非抢占模式
 
        authentication {
            auth_type PASS                #认证类型
            auth_pass 1111                #认证密码
        }
        virtual_ipaddress {
            192.168.88.250                #虚拟ip(vip)
        }
    }
    #LVS配置
    virtual_server 192.168.88.250 80 {    
        delay_loop 3                    #健康检查时间间隔
        lb_algo rr                        #负载均衡调度算法  
        lb_kind DR                        #负载均衡转发规则
        protocol TCP                    #协议
 
        real_server 192.168.88.50 80 {    #要监控的real_server的ip和端口号
                weight 1                 #权重
            TCP_CHECK {                    #基于tcp协议的检查
                connect_timeout 3          #连接时间超时
                retry 3                    #重连次数
                delay_before_retry 3    #重连间隔时间
            }
        }
        real_server 192.168.88.51 80 {
                weight 1
            TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }   
        }   
    }
    
    

DS1配置(192.168.88.49)

#启服务
 
     systemctl start keepalived.service
     systemctl start ipvsadm.service
     systemctl start httpd.service
 
ifconfig ens33:0 192.168.88.250 broadcast 192.168.88.250 netmask 255.255.255.255 up
route add -host 192.168.88.250 dev ens33    
 

DS2配置(192.168.88.48)

#启服务
                             
     systemctl start keepalived.service
     systemctl start ipvsadm.service
     systemctl start httpd.service
 
ifconfig ens33:0 192.168.88.250 broadcast 192.168.88.250 netmask 255.255.255.255 up
route add -host 192.168.88.250 dev ens33:0
 

RS1配置(192.168.88.50)

yum -y install httpd
systemctl start httpd.service
ifconfig lo:0 192.168.88.250 broadcast 192.168.88.250 netmask 255.255.255.255 up
route add -host 192.168.88.250 dev lo:0
 
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    
 

RS2配置(192.168.88.51)

yum -y install httpd
systemctl start httpd.service
ifconfig lo:0 192.168.88.250 broadcast 192.168.88.250 netmask 255.255.255.255 up
route add -host 192.168.88.250 dev lo:0
 
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
  

四、测试(DS1主,DS2辅)

1、DS1在线

在windows命令行测试

在DS1上查看状态

 

2、关闭DS1keepalive服务

DS1日志

  DS2日志

继续在windows命令行测试(服务还在运行,说明DS2接管了DS1服务)

再DS2查看状态

 

3、当DS1主服务又开启的时候,服务没断,DS1重新接管了服务

 

4、线上服务器不能让主辅服务器来回切换,所以要把抢占模式打开,主的优先级大于辅的优先级,这样主服务宕机的时候辅服务才能接管。

例子如下:

 DS1                vim /etc/keepalived/keepalived.conf
  priority 100   #优先级
 #nopreempt          #非抢占模式
 
DS2           vim /etc/keepalived/keepalived.conf

停掉DS1服务 DS2接管了

重新启动DS1服务,这次DS1没有服务,还是DS2在接管服务,测试:

 

DS1

DS2

 

原文地址:https://www.cnblogs.com/heiguu/p/9969180.html