美文网首页大数据学习笔记
02_高并发_03_Keepalived高可用

02_高并发_03_Keepalived高可用

作者: 超级小小张 | 来源:发表于2019-08-12 13:11 被阅读0次

    02_高并发_02_LVS负载均衡这一节做的LVS负载均衡有以下几个缺点:

    1. LVS单点故障;
    2. RealServer故障的剔除和恢复后的重新注册需要人工干预
    
    引入Keepalived来自动对LVS故障时做故障转移,启用备用的LVS;对RealServer进行健康检查,对RealServer实现自动故障剔除和恢复注册 Keepalived高可用LVS负载均衡拓扑图

    简介

    Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

    工作原理

    • VRRP协议(虚拟路由冗余协议) - Virtual Router Redundancy Protocol
    • IP漂移:master宕机后,VIP自动转移到BACKUP上面
      Layer3,4,5工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下:
    • Layer3:Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。
    • Layer4: Layer4主要以TCP端口的状态来决定服务器工作正常与否。如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。
    • Layer5:Layer5对指定的URL执行HTTP GET或SSL_GET,然后使用MD5算法对HTTP GET结果进行求和。
    • MISC_CHECK:此检查允许用户定义的脚本作为运行状况检查程序运行。

    作用

    • 主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现。
    • 高可用web架构:LVS+keepalived+nginx+apache+php+eaccelerator(+nfs可选 可不选)

    根据上一节做的实验,进行改造,添加Keepalived和LVS_BACKUP

    1. 清除node01在上一节做的配置:VIP和ipvs负载
    [root@node01 ~]# ifconfig ens33:0 down
    [root@node01 ~]# ipvsadm -C
    
    1. 安装Keepalived
    [root@node01 ~]# yum install keepalived -y        -- 安装Keepalived
    [root@node01 ~]# cd /etc/keepalived/              -- 备份配置文件
    [root@node01 keepalived]# ll
    总用量 4
    -rw-r--r-- 1 root root 3598 7月  30 01:19 keepalived.conf
    [root@node01 keepalived]# cp keepalived.conf keepalived.conf.bak
    [root@node01 keepalived]# ll
    总用量 8
    -rw-r--r-- 1 root root 3598 7月  30 01:19 keepalived.conf
    -rw-r--r-- 1 root root 3598 8月  12 14:54 keepalived.conf.bak
    [root@node01 keepalived]# vi keepalived.conf  --编辑配置文件
    
    1. man 5 keepalived.conf 查看这个配置文件怎么配置
      global_defs:全局配置,主要配置一些邮件通知
      vrrp_instance:
    - state:MASTER或BACKUP
    - interface:配置网卡名称,用于发广播包,可以单独创建一个网卡,把数据网和管理网隔离
    - priority:优先级,禅让制,越高越优先替换坏掉的MASTER
    - virtual_ipaddress:配置vip,相当于上一节的ifconfig eth0:0 vip/24
    

    virtual_server:配置LVS服务监听哪种请求包

    相当于上一节的ipvsadm -A -t 192.168.80.100:80 -s rr
    - lb_algo: 调度方式,rr
    - lb_kind: 工作模式,DR
    - persistence_timeout:持久化超时时间,实验时改为0方便看到效果
    - real_server:配置RS服务器
    相当于上一节的ipvsadm -a -t 192.168.80.100:80 -r 192.168.80.12 -g
    

    配置完后的配置文件

    ! Configuration File for keepalived
    
    global_defs {
       notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL
       vrrp_skip_check_adv_addr
       #vrrp_strict                 #把这王八蛋注释掉,不然严格遵守vvrp协议,访问不了vip的
       vrrp_garp_interval 0
       vrrp_gna_interval 0
    }
    
    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.80.100/24 dev ens33 label ens33:0
        }
    }
    
    virtual_server 192.168.80.100 80 {
        delay_loop 6
        lb_algo rr
        lb_kind DR
        persistence_timeout 0
        protocol TCP
    
        real_server 192.168.80.12 80 {
            weight 1
            HTTP_GET {
                url {
                  path /
                  status_code 200
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
        }
        real_server 192.168.80.13 80 {
            weight 1
            HTTP_GET {
                url {
                  path /
                  status_code 200
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
        }
    }
    

    把这个文件远程复制到node04

    [root@node01 keepalived]# scp ./keepalived.conf root@192.168.80.14:/etc/keepalived/
    The authenticity of host '192.168.80.14 (192.168.80.14)' can't be established.
    ECDSA key fingerprint is SHA256:ssVmSpeO3/jYpEcQKbkczMO5SeStnq+VORyw8NnY9G4.
    ECDSA key fingerprint is MD5:4f:80:d3:fa:e3:1a:8d:9a:98:1a:1c:e4:61:94:1b:ca.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '192.168.80.14' (ECDSA) to the list of known hosts.
    root@192.168.80.14's password: 
    keepalived.conf                    100% 1295   455.2KB/s   00:00
    

    到node04修改state为BACKUP和priority为50

    1. 在node01启动Keepalived
    service keepalived start  -- 启动
    ifconfig --查看keepalived自动添加了ens33:0,没看到多执行一两遍
    ipvsadm -ln  --查看keepalived自动添加了lvs监听和负载
    scp /etc/keepalived/keepalived.conf root@192.168.80.14:/etc/keepalived/  --远程复制
    
    1. 在node04上修改keepalived.conf和启动
    2. 模拟LVS master不可用,把ens33网卡down掉,然后到node04观察ifconfig是不是自动装载子网卡,vip漂移到node04,浏览器访问是不是正常
    3. 模拟LVS master正常后,负载又恢复到node01,观察node04的子网卡被卸载,node01自动负载
    4. 如果直接kill掉node01的keepalived,会出现node04装载VIP子网卡,但是node01的VIP子网卡没有卸载,此时同一网络出现两个VIP,有可能造成一个通信过程,包发错,三次握手和四次分手的包打散了。反应了keepalived的简单性,没有互相通信,后期可以用zookeeper来替代。

    遇到的问题

    1. VIP本地不能访问,参考https://blog.csdn.net/charthyf/article/details/81456872
    vip无法ping通 
    keepalived.conf中vip配置好后,通过ip addr可以看到vip已经顺利挂载,但是无法ping通,并且防火墙都已关闭,原因是keepalived.conf配置中默认vrrp_strict打开了,需要把它注释掉。重启keepalived即可ping通。
    映射端口无法访问 
    vip可ping通后,访问vip映射端口无法访问,直接访问real_server的ip和端口可访问。 
    解决这个问题需要对lvs相关知识进行初步了解,详见《LVS手册》http://www.linuxidc.com/Linux/2016-03/129233.htm 
    在keepalived.conf中对virtual_server配置有 
    lb_kind可以设置为NAT、DR、TUN。这个选项直接关系到你做的 virtual_server和real_server能否进行正确映射。
    
    1. 转发到node03的real server一直处于SYN_RECV状态,排查后发现没有node03没有在环回网口上配置vip,node03接收到转发过来的包,发现跟自己的ip不对应,把包丢弃了
    [root@node01 ~]# ipvsadm -lnc
    IPVS connection entries
    pro expire state       source             virtual            destination
    TCP 00:53  SYN_RECV    192.168.80.1:59644 192.168.80.100:80  192.168.80.13:80
    
    [root@node03 ~]# ifconfig lo:8 192.168.80.100 netmask 255.255.255.255
    
    1. 自己实验时,浏览器访问时发现很难实现快速轮询(修改后效果不佳)
      参考https://blog.csdn.net/yanziguishi/article/details/7228700
      通过"ipvsadm -Ln --timeout"可以查看tcp tcpfin udp的超时时间(默认:900 120 300)
      • persistence_timeout 可以通过"ipvsadm -p timeout" 来设置,或修改keepalived配置文件,在虚拟服务器配置下面加入persistence_timeout 60
      • tcp tcpfin udp 可以通过"ipvsadm --set 对应超时时间"来设置,ipvsadm --set tcp tcpfin udp。建议:tcpfin的值最好小于persistence_timeout的值,这样比较方便计算,也有利于tcpfin回收

    相关文章

      网友评论

        本文标题:02_高并发_03_Keepalived高可用

        本文链接:https://www.haomeiwen.com/subject/wnyyjctx.html