项目一、LVS
1.集群Cluster
Cluster: 集群是为了解决某个特定问题将堕胎计算机组合起来形成的单个系统
LB:负载均衡
HA:高可用
HPC:高性能计算
2.分布式
分布式是将一个请求分成三个部分,按照功能拆分,使用微服务,分布式的静态资源放在不同的存储集群上
3.集群和分布式
集群:是同一个业务系统,部署在多台主机上,且这多台主机实现的功能没有差别,都能独立完成访问请求,且数据代码都是一样的
分布式:一个业务被拆成多块,部署在多台主机上,每一个主机完成一块内容
而一般来说集群和分布式是放在一起去使用的
4.lvs功能介绍
lvs:负载调度器,内核集成
四层与七层的区别:lvs只有四层(四层负载),最多只到传输层(端口管理),它可以mac地址以及ip和端口,也就是说lvs无法将请求数据报文拆开看里面的访问请求,也就无法知道是动态还是静态,无法进行调度
5.lvs-nat模式原理及部署方法
nat模式客户的ip不变要变的是目的地址的ip
首先准备四台主机,分别做lvs,以及realserver(三台)
VS(负责调度)根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS
VS:调度器
RS:后端真实主机
CIP:客户IP
VIP:客户访问LVS的接口IP
DIP:lvs访问内部的接口IP
5.1lvs配置
添加两块网卡,一块nat,一块仅主机
然后给两块网卡配IP,nat网卡(eth0)配172.25.254.100,仅主机(eth1)配192.168.0.100,然后进入eth1的网卡配置文件将网关以及dns删除
然后打开lvs中的核路由功能
[root@lvs ~]# sysctl -a | grep ip_forward
-a:显示所有的内核参数
将过滤出的net.ipv4.ip_forward = 1写入/etc/sysctl.conf中
执行sysctl -p生效
在lvs中安装lvs软件
dnf install ipvsadm -y
ipvsadm -Ln#查看策略
此时的ipvsadm的策略文件是没有东西的,cat /etc/sysconfig/ipvsadm,于是我们要自己写
ipvsadm -A -t 172.25.254.100:80 -s rr#-A:增加虚拟服务器,-t:协议,客户访问100的时候开始调度,-s:指定调度的算法,rr:轮循算法
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m#-m:模式是nat,-r:realserver,-w:指定权重
pvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m
5.2原理
客户把流量发到了vip上,vip得到流量后去读取lvs规则,看是给谁的,给自己的则去看调度算法,按照调度算法,对后端的RS进行调度,rr轮循调度,数据流量通过DIP扔向RS1一次,RS2一次,扔过来后RS看到请求,RS此时看到的请求时DIP访问,但源IP不会改变,还是cip,但rs无法扔向cip于是它只能扔向自己的网关,网关会处理数据请求最后通过VIP发到真实的客户
保存策略
ipvsadm-save > /etc/sysconfig/ipvsadm
5.3两台RS主机配置
将这两台主机改为仅主机的网卡
配置ip地址分别为192.168.0.10和192.168.0.20,然后进入网卡配置文件将网关改为192.168.0.100然后重启网卡服务nmcli connection reload;nmcli connection up eth0,然后在这两台主机下载httpd,并开器服务,在默认发布目录/var/www/html下写要发布的内容写在index.html
6.lvs-DR模式
减轻VS的压力
6.1dr的工作模式详解
ant模式下调度器压力过大,于是RS不再由vs(调度器)返回数据,而是直接返回给客户机
DR模式数据传输过程
LVS以及RS1、RS2都需要配置vip,LVS的VIP用于响应客户端请求,RS1和RS2的vip用于将数据传给后端主机,在进行配置时,要将RS1和RS2中的arp广播关闭,抑制arp请求(不关闭的话就有三个vip响应请求)
6.2LVS-DR模式的实现
首先准备5台虚拟机,一台为client,一台为router,一台为LVS,剩下两台为Realserver
client配置
配置ip地址为172.25.254.200,编辑网卡配置文件vim /etc/NetworkManager/system-connection/eth0.nmconnection,修改网关为172.25.254.100
router配置
先给路由器添加一块仅主机的网卡,然后分别给这两块网卡配置iP,nat的ip为172.25.254.100,仅主机的IP是192.168.0.100,然后将仅主机网卡的网关删除,IP配置完后,要开启内核中的路由功能
sysctl -a | grep ip_forward#找到IP转发功能
vim /etc/sysctl.conf #将net.ipv4.ip_forward = 1(开启IP转发功能)写入设置内核参数的配置文件
Realserver配置
配置rip为192.168.0.10与192.168.0.20网关为192.168.0.100,并在这两台realserver中关闭arp请求
[root@webs1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #关闭arp请求
[root@webs1 ~]# echo 2> /proc/sys/net/ipv4/conf/all/arp_announce
[root@webs1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@webs1 ~]# echo 2> /proc/sys/net/ipv4/conf/lo/arp_announce
然后分别在这两台主机中添加vip:ip a a 192.168.0.200/32 dev lo(环回用32)
7.TUN模式
转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文之外再封装一个IP首部 (源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP 是CIP)
7.1TUN模式数据传输过程
1.客户端发送请求数据包,包内有源IP+vip+dport
2.到达vs调度器后对客户端发送过来的数据包重新封装添加IP报文头,新添加的IP报文头中包含 TUNSRCIP(DIP)+TUNDESTIP(RSIP1)并发送到RS1
3.RS收到VS调度器发送过来的数据包做出响应,生成的响应报文中包含SRCIP(VIP)+DSTIP(CIP) +port,响应数据包通过网络直接回传给client
7.3TUN模式特点
1.DIP, VIP, RIP都应该是公网地址
2.RS的网关一般不能指向DIP
3.请求报文要经由Director,但响应不能经由Director
4.不支持端口映射
5.RS的OS须支持隧道功能
8.fullnet模式
fullnat:通过同时修改请求报文的源IP地址和目标IP地址进行转发 CIP --> DIP VIP --> RIP
1.VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP
2.RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client
3.请求和响应报文都经由Director 4.支持端口映射
9.lvs算法
9.1lvs静态调度算法
弊端:服务器配置不一致,可能会导致某一个服务器崩溃(一个服务器很忙,一个服务器很闲)
session:客户端与服务建立的沟通,保存在服务器
1.RR:roundrobin轮询rs分别调度,当rs配置有差别时不推荐(你一个我一个)
2.WRR:weight rr加权轮询(权重:给谁多点给谁少点)
3.SH:source Hashing对源进行Hash,将来自于同一个IP地址的请求始终发往第一次挑中的rs,从而实现会话绑定(对源地址进行Hash运算运算出一个值后LVS的session就会记录下来,来源的ip经过运算和记录的Hash一致就打到同一个服务器上)
4.DH:destinationHash,目的地址Hash,第一次轮询调度至rs,后续将发往同一个目标地址的请求始终发送至第一次挑中的rs,典型使用场景是正向代理缓存场景中的负载均衡(对目的地址进行Hash,同一个目的地址调度到同一个主机)
9.2lvs动态调度算法
1.LC(最少链接):活动链接数x256+非活动链接数
2.WLC(权重最少链接):默认调度方法=活动链接数x256+非活动链接数/weight(第一次可能打到性能不好的服务器)
3.SED(初始链)接高权重优先):(活动链接数+1+非活动链接数)x256/weight(虽然第一次能打到好的服务器但是经过几轮后它还是会持续将流量打到这个服务器)
4.NQ:第一轮均分,后续SED
5.LBLC:动态DH算法,根据负载均衡实现正向代理
6.LCLBR:带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS
7.FO(灰度发布):当服务器承接大量链接,我们可以对服务器进行过载标记,那么vs调度器就不会把链接调度到有过载标记的主机中(当服务需要更新时,可以通过污点标记,使流量前往下一个服务器)
8.OVF
10.lvs-火墙mark标记解决调度问题
10.1为什么打标记
在lvs中加入443端口的集群,加入后现在有两个集群80和443,且这两个集群调度的主机时同一个,那么这个调度时有问题的,比如现在访问80的集群调度到10,而访问443应该调度到20上,然而它并没有这样去调度,根本原因是因为这两个是分开控制的,所有我们可以通过火墙标记来解决轮询调度问题
10.2参数说明
iptables -t mangle(附加说明) -A PEROUTING(表示在进厂前就要做的事) -d(目的地) $vip -p(协议) $tcp/Udp -m multiport(为多个端口打上一个标记,把这个端口变为一个组,访问这个组里的端口视为访问同一个标记) --dports $port1,port2 -i MARK --set-mark $number
10.3配置
首先在后端服务器rs1,rs2安装mod_ssl(ssl加密模块让rs支持https)
yum install mod_ssl -y
安装完后给这两台rs重启httpd服务
在lvs中为端口做标记
iptables -t mangle -A PREROIUTING -d 192.168.0.200 -p tcp -m muliport --dports 80,443 -j MARK --set-mark 66#打标记
iptables -nL#查看有没有打上标记
接下来进行调度
先清空ipvsadm -C
ipvsadm -A -f 66 -s rr
ipvsadm -a -f 66 -r 192.168.0.10 -g(直连路由)-i(隧道)-m(nat)
ipvsadm -a -f 66 -r 192.168.0.20 -g
做完后就可以进行测试了
11.lvs持久链接(session会话问题解决)
主要是为了在访问一个网址时,za会话会中断导致数据丢失
解决方案
对调度进行时间设定,不管用什么算法,在同一时间内的数据打到同一台主机,这个时间过了以后就打到另一台主机上
配置
在lvs调度器中设定
[root@lvs ~]# ipvsadm -E -f 66 -s rr -p [3000]