02_高并发_03_Keepalived高可用

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回收
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容