linux企业运维——lvs负载均衡(代码片段)

是大姚呀 是大姚呀     2022-12-10     713

关键词:

Linux企业运维——LVS负载均衡

(临时笔记,以后会详细修补)

1、LVS简介

LVS(Linux Virtual Server)即Linux虚拟服务器,是一个虚拟的服务器集群系统,可以在unix/linux平台下实现负载均衡集群功能。LVS是一种集群(Cluster)技术,采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。
根据LVS工作模式的不同,真实服务器会选择不同的方式将用户需要的数据发送到终端用户,LVS工作模式分为NAT模式、TUN模式、以及DR模式。

2、DR模式

  • DR模式:通过直接路由实现虚拟服务器。DR模式是通过改写请求报文的目标MAC地址,将请求发给真实服务器的,而真实服务器响应后的处理结果直接返回给客户端用户。DR模式可以极大的提高集群系统的伸缩性,而且DR模式没有IP隧道的开销,对集群中的真实服务器也没有必要必须支持IP隧道协议的要求。但是要求调度器与真实服务器都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。
  • 原理:LVS通过控制IP来实现负载均衡。ipvsadm是其具体的实现模块。
  • ipvsadm的主要作用:安装在调度器上面,在调度器上虚拟一个对外访问的IP(VIP)。用户访问VIP,到达调度器,调度器根据一定的规则选择一个真实服务器,处理完成后然后返回给客户端数据。

3、使用DR模式实现负载均衡

(1)实验环境:server1为调度器,负载流量均衡(基于4层即传输层进行调度,调度算法有WRR/WLC等,传输协议为TCP/UDP),server2和server3为真实服务器节点。
(2)server1安装ipvsadm(用于用户端管理LVS的策略规则)
在这里插入图片描述
(3)书写策略:在server1上添加虚拟一个对外访问的IP:172.25.33.100(vip),即提供虚拟服务的ip地址,也可以直接用原有IP,但最好独立出来
在这里插入图片描述
在这里插入图片描述
(4)ipvsadm -A 添加规则;-t tcp协议;-s 调度;rr 轮叫

  • -a向tcp虚拟服务添加
  • -r real server
  • -g 直连即DR模式

ipvsadm -ln:查看当前连接情况(-ln不用解析),

Forward:转发方式,当前是路由转发;
Weight:权重;
ActiveConn:当前活跃的连接数;
InActConn:当前不活跃的连接数

在这里插入图片描述
(5)server2和server3安装httpd服务,并开启
在这里插入图片描述
在这里插入图片描述
此时真机使用curl 172.25.33.2可以显示server的发布页面,但curl 172.25.33.100没有反应,这是因为LVS-DR集群类型要求,当用户向vip发起请求时,调度器和真实服务器上必须都要有vip,因此需要给server2和server3添加虚拟IP。
在这里插入图片描述
在这里插入图片描述

(6)server2和server3分别添加vip
在这里插入图片描述
在这里插入图片描述
此时真机使用curl 172.25.33.100,出现轮叫
在这里插入图片描述
(7)ARP协议是将IP地址映射为MAC地址的协议,其在协议上使用ARP请求及ARP应答报文来实现

arp -d是删除ARP缓存列表的命令,可以删除所有的ARP缓存,也可以删除指定的ARP缓存

此时使用arp -an查看本地ARP缓存的172.25.33.100对应的MAC地址为调度器server1的地址,当真机执行arp -d 删除指定虚拟IP的ARP缓存后,此时不能过滤得到172.25.33.100的MAC地址。再次Ping之后又可以得到,但是是server3的地址,不是调度器的地址(谁先响应就缓存谁的MAC地址)
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
此时curl 172.25.33.100,只出现了server3的发布页面,说明此时客户端向vip发起请求时,并没有经过调度器直接到达了真实服务器
在这里插入图片描述
(8)为了解决这一问题,需要给server2和server3安装ARP防火墙arptables(用于管理内核中的ARP包过滤规则表)
在这里插入图片描述
设定APR配置规则,DR模式要求服务器节点应该禁掉设备的APR响应

arptable_filter 只有一个表 filter ,不指定 -t 表名时默认就是 filter 表。
filter表有三个链,一个是INPUT,表示外面发进来的ARP包;另外一个是OUTPUT,表示本机发出的ARP包;第三个是FORWARD,转发ARP包。
-A:向规则链中追加规则;
-d:指定要匹配ARP包的目的IP地址;
-j:指定满足添加的规则时执行的动作;
-s:指定要匹配ARP包的源ip地址;
-g:直连
-r:真实服务器地址

当数据包的目的地址时100时就丢弃该数据包,当从本机发送出的数据包IP是100时,mangle转换数据包源地址,伪装源地址IP为172.25.0.2。
在这里插入图片描述
设定完毕,保存arptables规则,此时重启arptables服务后,即可看到所添加的规则。
在这里插入图片描述
在这里插入图片描述
此时当真机执行arp -d 删除指定的虚拟IP,ping 之后,过滤得到172.25.33.100的MAC地址是server1的MAC地址,此时使用curl 172.25.33.100,可以轮叫
在这里插入图片描述
在这里插入图片描述

【 client->DR-RS->clinet】
1:DR和RS在同一个vlan(局域网)中,DR和RS的vip会冲突,数据包必须在DR修改mac,丢弃RS的vip,mac在二层数据链路层,不支持路由,所以DR和RS需要在同一vlan
2:DR>Tunnel(隧道模式)>NAT(dnat和snat,进出各1此,数据是原路经返回)>fullNAT(进2次出2次)
3:ipvs和iptables,iptables>ipvs,firewall不需要地址转换

4、问题解决

1、某台REALServer down 了,怎么办
在这里插入图片描述
此时curl 172.25.33.100 已经无法访问server2,客户端curl 172.25.33.100会报错
在这里插入图片描述
但是在server1中ipvsadm -ln 仍能检测到server2
在这里插入图片描述
解决办法:
使调度策略实时更新
server1:
(1)yum install keepalived (健康检测)
ipvsadm没有健康检测功能,即检测策略对应的后端服务是否正常,因此我们需要安装keepalived
在这里插入图片描述
(2)yum install postfix mailx
在这里插入图片描述
(3)修改keepalived的主配置文件/etc/keepalived/keepalived.conf
(vrrp虚拟路由冗余协议,keepalived利用这一协议实现了高可用)

notification_email:设置通知邮件,出了问题给谁发送邮件notification_email_from:由谁发送
超时
路由id
注释vrrp_strict,这一参数功能是在出问题时抓取数据包

在这里插入图片描述

主虚拟路由MASTER:向所有备用虚拟路由BACKUP发送“心跳包”,备用虚拟路由只负责接收,当备用虚拟路由接收不到时,priority优先级最高的备用虚拟路由代替MASTER提供虚拟服务,数字越高,优先级越高,所以MASTER优先级数字一定要最大
虚拟路由id:确认哪些虚拟路由是同一个LVS集群的; 修改vip:改成自己设置的vip;

在这里插入图片描述

虚拟服务语句块:
delay_loop:每s/次健康检测;
lb_algo:调度算法;
persistence_timeout:持久连接,即在多长时间内DR会将所有连接请求持续调度给一个后端;(80端口没必要) 写真实服务器模块
(之后的删掉)

在这里插入图片描述
(4)此时删掉server1上手动设置的虚拟ip172.25.33.100,ipvsadm -C清除设置的规则,启动keepalived软件
在这里插入图片描述
ipvsadm -ln 能看到虚拟ip172.25.33.100由keepalived自动生成
在这里插入图片描述
stop server2的httpd服务
在这里插入图片描述
查看日志,查看日志提示的邮件,可以知道哪台真实主机up或者down;ipvsadm -ln 将检测不到server
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:如果server1也安装了httpd服务,curl 172.25.33.100不会访问server1的80

2、lvs down怎么办(LVS冗余,高可用):

(1)server1停止httpd服务
在这里插入图片描述
(2)创建虚拟机快照文件server4(高可用(master>backup)),同样的修改其主机名和IP
server4安装keepalived,并拷贝server1的keepalived.conf文件
在这里插入图片描述
在这里插入图片描述
(3)在server4上修改BACKUP、优先级
在这里插入图片描述
重启keepalived服务,之后安装ipvsadm(用于管理LVS的策略规则)
在这里插入图片描述
ipvsadm -ln:查看当前连接情况
在这里插入图片描述
查看server4的日志,可以看到此时的server4是BACKUP
在这里插入图片描述
当server1停止keepalived服务后,再次查看server4的日志,可以看到此时的server4是MASTER
在这里插入图片描述

在这里插入图片描述
过滤得到172.25.33.100的MAC地址是server4的MAC地址
在这里插入图片描述
在这里插入图片描述

再次开启server1的 keepalived服务后,过滤得到172.25.0.100的MAC地址是server1的MAC地址,此时server4为BACKUP
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5、LVS的10个调度算法简介

1.轮询调度(Round Robin 简称’RR’)算法就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是实现简单。轮询算法假设所有的服务器处理请求的能力都一样的,调度器会将所有的请求平均分配给每个真实服务器。

2.加权轮询调度(Weight Round Robin 简称’WRR’)算法主要是对轮询算法的一种优化与补充,LVS会考虑每台服务器的性能,并给每台服务器添加一个权值,如果服务器A的权值为1,服务器B的权值为2,则调度器调度到服务器B的请求会是服务器A的两倍。权值越高的服务器,处理的请求越多。

3.最小连接调度(Least Connections 简称’LC’)算法是把新的连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态的调度算法,它通过服务器当前活跃的连接数来估计服务器的情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1;当连接中断或者超时,其连接数减1。(集群系统的真实服务器具有相近的系统性能,采用最小连接调度算法可以比较好地均衡负载。)

4.加权最小连接调度(Weight Least Connections 简称’WLC’)算法是最小连接调度的超集,各个服务器相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权值。加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

5.基于局部的最少连接调度(Locality-Based Least Connections 简称’LBLC’)算法是针对请求报文的目标IP地址的 负载均衡调度,目前主要用于Cache集群系统,因为在Cache集群客户请求报文的目标IP地址是变化的。这里假设任何后端服务器都可以处理任一请求,算法的设计目标是在服务器的负载基本平衡情况下,将相同目标IP地址的请求调度到同一台服务器,来提高各台服务器的访问局部性和Cache命中率,从而提升整个集群系统的处理能力。LBLC调度算法先根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则使用’最少连接’的原则选出一个可用的服务器,将请求发送到服务器。

6.带复制的基于局部性的最少连接(Locality-Based Least Connections with Replication 简称’LBLCR’)算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统,它与LBLC算法不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。按’最小连接’原则从该服务器组中选出一一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按’最小连接’原则从整个集群中选出一台服务器,将该服务器加入到这个服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

7.目标地址散列调度(Destination Hashing 简称’DH’)算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且并未超载,将请求发送到该服务器,否则返回空。

8.源地址散列调度(Source Hashing 简称’SH’)算法先根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且并未超载,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法的相同,它的算法流程与目标地址散列调度算法的基本相似。

9.最短期望的延迟调度(Shortest Expected Delay 简称’SED’)算法基于WLC算法。举个例子,ABC三台服务器的权重分别为1、2、3 。那么如果使用WLC算法的话一个新请求进入时它可能会分给ABC中的任意一个。使用SED算法后会进行一个运算
A:(1+1)/1=2
B:(1+2)/2=3/2
C:(1+3)/3=4/3
就把请求交给得出运算结果最小的服务器。

10.最少队列调度(Never Queue 简称’NQ’)算法,无需队列。如果有realserver的连接数等于0就直接分配过去,不需要在进行SED运算。

企业运维之lvs负载均衡和高可用(代码片段)

企业运维之Lvs负载均衡和高可用1.LVS简介2.工作模式的介绍1.基于NAT的LVS模式负载均衡2.基于TUN的LVS负载均衡3.基于DR的LVS负载均衡4.基于FULLNAT的LVS负载均衡3.LVS负载均衡调度算法4.LVS的DR模式1.LVS简介LVS(LinuxVirtualServer)即Lin... 查看详情

linux企业运维——haproxy负载均衡(代码片段)

Linux企业运维——HAProxy负载均衡文章目录Linux企业运维——HAProxy负载均衡1、HAProxy简介1.1、HAProxy优缺点1.2、4层负载均衡1.3、7层负载均衡2、HAProxy工作原理3、HAProxy实验演练3.1、HAProxy负载均衡3.2、身份验证3.3、自定义路由监控器3.... 查看详情

lvs负载均衡!lvs-nat模式部署!(代码片段)

lvs负载均衡一.企业集群概述1.集群的含义(cluster)2.存在的问题3.问题解决的方法二.企业集群分类1.负载均衡群集(LoadBalanceCluster)2.高可用集群3.高性能运算集群三.负载均衡群集架构1.负载均衡的结构2.负载均衡群集工... 查看详情

lvs实现负载均衡(代码片段)

...。从Linux内核2.4版本之后,已经将LVS内置于内核中,提供负载均衡技术。LVS理论基础1、LVS的优势高并发能力强?LVS基于内核网络层工作,有着超强的并发处理能力,单台LVS可以承受上万的并发连接。稳定性高???LVS是基于4层的负载... 查看详情

lvs负载均衡群集(代码片段)

Lvs负载均衡群集一.前言二.群集概述1.1群集的含义1.2企业群集分类三.负载均衡群集架构3.1负载均衡的结构3.2负载均衡群集工作模式分析3.2.1地址转换3.2.2IP隧道3.2.3直接路由四.LVS的负载调度算法4.1轮询(RoundRobin)4.2最少连接(LeastConnec... 查看详情

集群及高可用之lvs负载均衡(三种工作模式介绍)(代码片段)

linux自动化运维也好,云计算自动化运维也罢,基础技术都必须掌握严实,今天我们一起来完整的介绍一下真正的集群以及高可用技术中的LVS负载均衡技术。博客的引入内容是参考博客园的一位博主的文字内容,... 查看详情

负载均衡集群企业及应用实战--lvs

负载均衡集群企业及应用实战-LvsLVS是LinuxVirtualServer的简称:  也就是Linux虚拟服务器,是一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org。现在LVS已经是Linux标准内核的一部分,在Linux2.4内核以前... 查看详情

lvs负载均衡群集(代码片段)

LVS虚拟服务器LVS虚拟服务器是针对Linux内核开发的一个负载均衡项目,它实际上相当于基于IP地址的虚拟化应用,为基于IP地址和内容请求分发的负载均衡提出了一种高效的解决方法。LVS现在已经是Linux内核的一部分,默认编译为i... 查看详情

lvs负载均衡(代码片段)

一、LVS简介ILVS,是LinuxVirtualServer的简称,也就是Linux虚拟服务器,是一个由章文嵩博士发起的自由软件项目。LVS由用户空间的ipvsadm和内核空间的IPVS组成,ipvsadm用来定义规则,IPVS利用ipvsadm定义的规则工作。现在LVS已经是Linux标准... 查看详情

lvs负载均衡和nat模式的实操(代码片段)

LVS理论和实操一、企业群集应用概述1、群集的含义2、问题3、解决方法总结:二、集群的分类三、负载均衡群集架构四、LVS负载均衡群集工作模式分析1、负载均衡群集是目前企业用得最多的群集类型2、群集的负载调度技术... 查看详情

企业运维之七层负载均衡--haproxy(代码片段)

企业运维之七层负载均衡--Haproxy1.基础介绍2.负载均衡的类型3.Haproxy的部署3.1Haproxy实现负载均衡和监控3.2日志采集3.3调度算法3.5设定备机4.Haproxy的访问控制4.1通过调度器访问不同后端4.2用户访问黑白名单设置4.3读写分离5.haproxy的... 查看详情

lvs负载均衡(代码片段)

LVS负载均衡LinuxVirtualServer项目的目标:使用集群技术和Linux操作系统实现一个高性能、高可用的服务器,它具有很好的可伸缩性(Scalability)、可靠性(Reliability)和可管理性(Manageability)。??lvs首先是基于tcp四层传输层协议,它... 查看详情

linux运维工程师会面试哪些

给大家分享一些Linux面试题的笔记,从负载均衡、nginx、MySQL、redis、kafka、zabbix、k8s等方面拆解Linux知识点。用来对个人技术点进行查漏补缺。目录:1.磁盘使用率检测(用shell脚本)2.LVS负载均衡有哪些策略?3.谈谈你对LVS的理解... 查看详情

lvs负载均衡群集--nat模式(代码片段)

...。除了使用价格昂贵的大型机、专用负载分流设备以外,企业多选择构建群集服务器——通过整合多台相对廉价的普通服务器,以同一个地址对外提供相对的服务。本篇博客将介绍企业中常用的一种群集技术——LVS。负载均衡群... 查看详情

搭建lvs负载均衡集群(代码片段)

...网络地址转换,其作用是通过数据报头的修改,使得位于企业内部的私有IP地址可以访问外网,以及外部用用户可以访问位于公司内部的私有IP主机。VS/NAT工 查看详情

linux运维之lvs(一)

参考技术A关于LVS负载均衡一、什么是负载均衡:  负载均衡集群提供了一种廉价、有效、透明的方法,来扩展网络设备和服务器的负载、带宽、增加吞吐量、加强网络数据处理能力,提高网络的灵活性和可用性。二、搭... 查看详情

lvs负载均衡(代码片段)

  lvs也是一款负载均衡软件,Linux虚拟服务器的简称。工作在os7层模型第4层,它是基于IP地址和端口号做转发的,因为他工作在第4层,所以它不支持正则处理和动静分离,nginx是工作在第7层的,支持这两种。最早来说防火墙是... 查看详情

负载均衡介绍lvs介绍算法介绍lvs_nat负载均衡模式配置(代码片段)

负载均衡主流开源软件:LVS、keepalived、haproxy、nginx等;OSI层:LVS(4)、nginx(7)、haproxy(4、7);keepalived的负载均衡功能其实就是lvsLVS负载均衡可以分发除了80以外的其他端口通信,比如MySQL,而nginx仅仅支持http、https、mail;LV... 查看详情