zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    idea 设置注释
    SVN解决冲突
    mysql执行 sql文件遇到USING BTREE ) ENGINE=MyISAM DEFAULT CHARSET=utf8错误
    如何查看JDK以及JAVA框架的源码
    一道常被人轻视的前端JS面试题
    Js 常用调试的方法
    主要的Ajax框架都有什么?
    Ajax使用的五步法
    Java正则表达式
    查出在当天所处的日期区间的某些数据
  • 原文地址:https://www.cnblogs.com/heiguu/p/9969180.html
Copyright © 2011-2022 走看看