大数据学习笔记

02_高并发_03_Keepalived高可用

2019-08-12  本文已影响0人  超级小小张

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

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

简介

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

工作原理

作用

根据上一节做的实验,进行改造,添加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回收
上一篇下一篇

猜你喜欢

热点阅读