热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

高并发负载均衡4基于keepalived的LVS

LVS四层&Nginx七层对比你要分清哪些程序是应用层的,哪些程序是内核的。LVS四层负载均衡服务器,是不会碰握手这一个步骤的。Nginx是基于反向代理(七层)的负载均衡服务器,要

LVS四层 & Nginx七层 对比

你要分清哪些程序是应用层的,哪些程序是内核的。

LVS四层负载均衡服务器,是不会碰握手这一个步骤的。

Nginx是基于反向代理(七层)的负载均衡服务器,要先握手建立连接,才能取到URI,在判定location是否匹配,然后才将URI传递给后面的服务器。

server返回数据时,是需要过Nginx服务器的,而使用LVS的时候不会过LVS服务器。

image-20210926215139901


keepalived是什么?

上图存在问题



  1. 如果你的LVS负载均衡服务器挂掉了,你整个公司的业务就下线了,这是不能容忍的。这属于单点故障。

    解决方法:一变多!但是入口的IP地址只能有一个,怎么变多?怎么实现多点?有2种形式:要么是主备,要么是主主

    主备模型:备用机要以最快的速度接管原来的VIP(virtual IP),只有主机对外提供服务,只有主机挂了的时候,备机才顶上去。

    主主模型:所有的LVS都是主,现在要借用其他形式搞定只有一个的入口IP地址,比如动态DNS。主和主之间是协作的形式。

    我们首先讨论主备,有两个点需要考虑:方向性、效率性。

怎么知道主机挂没挂?

可以由备机轮询主机,但是这样会对主或多或少造成一些压力。

可以由主机发广播到所有的备机,但是网络是不可靠的,所以有一种重试机制。

如果已经确定主机挂了,谁来作为新的主机?

使用加权重的方式,这也是paxos和zookeeper的区别。官方压测200ms就能选出新的主机出来。

2. 如果你后台的某一个RS(Real Server)挂掉了,负载均衡服务器还会对另外两台正常连接,会造成一部分人的业务请求异常,另一部分人的业务正常。

怎么知道RS挂了?可以用ping吗?

不可以!ping命令是网络层的只能检验网络能不能通,连TCP握手都不做,而web服务是应用层的。能ping通不能代表web服务可用。那怎么知道RS挂没挂?最简单的方式是“访问一下”。

“访问一下”这个操作,它的底层验证的是 应用层的HTTP协议,你发一个请求,返回的是200ok,就说明是可用的。

LVS内核中有模块:ipvs负载均衡模块。你想要检测各个RS是否可用的话,可以直接去修改模块的源码,也可以使用第三方实现。第三方可以是人,也可以是自动化(也就有了自动化运维)。

这个自动化的程序就是keepalived!它可以代替人工,实现自动运维。解决LVS单点故障,实现HA



  1. keepalived

    (1)监控自己的LVS服务

    (2)每一台机器上都安装keepalived。Master(主机)通告自己还活着,Backup(备机)监听Master状态。如果Master挂了,一堆Backup推举选出一个新的Master.

    (3)你不需要再手动配置VIP,添加LVS(ipvs模块)配置,只需要写到配置文件中即可。

    (4)对后端的RS(real server)做健康检查,及时剔除不可用的节点

    (5)最后,keepalived不仅仅用来解决LVS,它是一个通用的环境,主要作为linux上的HA的实现。例如,当你并发量不大的时候,nginx可以作为公司的负载均衡来使用,此时nginx成为了单点故障。这个问题也可以用keepalived来解决。

Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。

  Keepalived软件主要是通过VRRP协议实现高可用功能的。VRRP是Virtual Router RedundancyProtocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。

  所以,Keepalived 一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用功能。

https://www.jianshu.com/p/a6b5ab36292a

https://baike.baidu.com/item/Keepalived/10346758?fr=aladdin

https://www.cnblogs.com/clsn/p/8052649.html


本机VMware LVS+网络部署

image-20210926215207539

上一节操作环境清理

#node11 清lvc配置 删除vip
[root@node11 ~]# ipvsadm -C
[root@node11 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn

[root@node11 ~]# ifconfig ens33:3 down
[root@node11 ~]# ifconfig|grep -A 20 ens33
ens33: flags=4163 mtu 1500
inet 192.168.10.71 netmask 255.255.255.0 broadcast 192.168.10.255
inet6 fe80::f8e8:de3:6deb:57dd prefixlen 64 scopeid 0x20
ether 00:0c:29:72:1e:ca txqueuelen 1000 (Ethernet)
#node11 node14安装keepalived
[root@node14 ~]# yum install keepalived ipvsadm -y
#配置keepalived
[root@node14 ~]# cd /etc/keepalived/
[root@node14 keepalived]# ll
total 4
-rw-r--r--. 1 root root 3598 Oct 1 2020 keepalived.conf
[root@node14 keepalived]# cp keepalived.conf keepalived.conf.bak
[root@node14 keepalived]# vi keepalived.conf
# 修改内容见下
#启动
[root@node11 keepalived]# service keepalived start

修改内容

#VRRP使用选举机制来确定路由器的状态(Master或Backup)。运行VRRP的一组路由器对外组成了一个虚拟路由器,其中一台路由器处于Master状态,其他的处于Backup状态。
#node11 主
vrrp_instance VI_1 {
state MASTER
#interface eth0
#修改为下面配置
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
#192.168.200.16
#192.168.200.17
#192.168.200.18
#修改为下面配置
192.168.10.100/24 dev ens33 label ens33:3
}
}
#类型 ipvsadm -A -t 192.168.10.100:80 -s rr
virtual_server 192.168.10.100 80 { #192.168.200.100 443->192.168.10.100 80
delay_loop 6
lb_algo rr
lb_kind DR #NAT->DR
persistence_timeout 0 #50->0 实验环境
protocol TCP
#类型 ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.72 -g -w 1
real_server 192.168.10.72 80 { #192.168.201.100 443->192.168.150.72 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.10.73 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
#node14
#virtual_server 与node11一样修改
vrrp_instance VI_1 {
state BACKUP #修改角色
interface ens33
virtual_router_id 51
priority 50 #修改权重
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.100/24 dev ens33 label ens33:3
}
}

image-20210926223647408

可以参考Keepalived之——Keepalived + Nginx 实现高可用 Web 负载均衡


keepalived的vip无法ping通排查过程

https://blog.csdn.net/wade1010/article/details/88863780

本文来自博客园,作者:gary2048,转载请注明原文链接:https://www.cnblogs.com/zhoum/p/15340513.html

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。



推荐阅读
author-avatar
手机用户2502870923
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有