2021-07-12笔记
2021/7/12 23:26:21
本文主要是介绍2021-07-12笔记,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
TUN隧道技术
上文说到D-net速度慢消耗算力高,DR需要负载均衡服务器和真实服务器绑定在同一局域网,那有没有一种模式既不用绑定在同一局域网,速度还不慢呢,这就是TUN隧道技术,D-net因为需要修改目标地址所以需要消耗算力并且数据会按原路返回影响速度,DR因为直接mac欺骗需要绑定在同一局域网,TUN隧道技术就是将发送到负载均衡服务器里的数据包包裹起来,外面包上一层从负载均衡服务器到真实服务器的ip地址,这样数据可以成功地从负载均衡服务器跳到真实服务器且不需要mac欺骗,到真实服务器之后将外层包裹的数据包撕掉就是原始数据包,符合源地址到目标地址的链接映射,这样不需要原路返回就可以直接传输给源地址,将D-net和DR两个技术结合在一起就是TUN隧道技术
LVS
DR模型是如何修改vip的:上面说修改vip是在内核修改的,是修改arp协议,arp协议之前说到了电脑刚开机网卡就会把自己的信息公布出去,发送一个含有本地mac地址,目标mac地址为FFFFFF,本地ip,目标ip的数据包,然后和目标ip成功匹配的建立连接,不匹配的直接丢弃,匹配成功发现arp标志就会把FFFFFF改成自己的mac地址,再返回过去
这时候用arp-a命令,是一个链路层的表,打开会显示一条链接的映射。
修改arp协议需要用到的指令
首先进入/proc/sys/net/ipv4/conf/*IF*/
可以看到里面有这两个文件
arp_ignore:定义接收到arp请求时的响应级别
0:只要本地配置的有相应地址,就给予相应
1:仅在请求的目标(mac)地址配置请求到达的接口上的时候,才给予响应
arp_announce :定义将自己地址向外通告时的通告级别
0:将本地任何接口上的任何地址向外通告
1:试图仅向目标网络通告与其网络匹配的地址
2:仅向与本地接口上地址匹配的网络进行通告
这是arp协议里面的两个参数默认值都是0,
但是能否收到或者能否向外通告,是需要网络连接的,一旦有网络了根据协议的规定就一定会往外通告,如果建立了连接,那就不存在隐藏这回事了,所以这个目标地址放到哪个网卡上,别人请求不到,他也说不出去,服务器有物理网卡连接网线的,还有虚拟网卡Lo,Lo是内核里面的一个软件,一个虚拟的代码模拟的网卡,DR模型的弊端走之前讲过是负载均衡服务器和真实服务器要在同一局域网里,那么在同一局域网里传输就不需要物理网卡连接网线通讯了,那就可以把目标地址放到虚拟网卡上,这个虚拟网卡没有连接物理网线,就算通电了也没办法向外通告,外界的数据包只能到物理网卡,到不了虚拟网卡,而且任何接口都有子接口,在Lo上做一个子接口来存放原始目标地址(每块网卡都可以配置多个ip,这个操作就是将Lo这个网卡再配置一个原始目标地址的ip),所以只要把原始目标地址配在内核里虚拟网卡上别的链接就请求不到,也无法发出通告,这个地址只有内核知道有,外界不知道,就形成了对外隐藏对内可见。
简单来说就是修改两个arp协议,且将ip配在Lo网卡上。
调度算法
四种静态:
rr:轮循
wrr:
dh:
sh:
动态调度算法:
LC:最少连接
WLC:加权最少链接
sed:最短期望延迟
nq:never queue
lblc:基于本地的最少链接
DH:
LBLCR:基于本地的带复制功能的最少链接
负载均衡服务器是不会产生握手的,客户端和服务端建立连接需要进行三次握手,负载均衡服务器会在第一次握手的时候偷窥握手包里面的所有信息(sync)并且记录这个握手包给了哪个服务器,当服务器接收到握手包会返回ack确认包,那根据模型的不同,数据返回的方式也不同,但是三次握手的第一次和第三次都是肯定要经过负载均衡服务器的,当第一次和第三次都被负载均衡服务器偷窥到,就会给服务器+1代表服务器身上有一个链接建立好了 。
四次分手
如果客户端要分手会发送一个fin分手包然后负载均衡服务器继续偷窥,服务端在返回ack确认包,再发送fin分手包,客户端再返回ack确认包,负载均衡服务器记录到信息之后就会-1
ipvs
负载均衡服务器技术叫lvs,但是在内核中的模块的名字叫ipvs,是计算机系统自带的
如果想搭建一个lvs服务器,不需要装ipvs但是要搭建一个交互接口,一个用户空间的程序ipvsadm,linux命令是yum install ipvsadm -y。
管理集群服务
添加: -A -t|u|f service-adress[-s scheduler]
ipvsadm -A -t 192.168.9.100:80 -s rr
-t:TCP协议集群
-u:UDP协议集群
service-address: IP:PORT
-f:FWM:防火墙标记
service-address;Mark Number
修改:-E
删除:-D -t|u|f service-address
交互接口肯定有进有出,出的设置是
添加: -a -t|u|f service-adress -r server-address -g|i|m [-w weight]
ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.8 -g
-t|u|f service-adress:事先定义好的某集群服务
-r server-address:某RS的地址,再nat模型中,可使用ip:port实现端口映射
-g|i|m:LVS类型
-g:DR
-i:TUN
-m:NAT
[-w weight]:定义服务器权重
修改:-e
删除:-d -t|u|f service-adress -r server-address
查看
-L|I
-n:数字格式显示主机地址和端口
–stats:统计数据
–rate:速率
–timeout:显示tcp、tcpfin和udp的会话超时时长
-:c显示当前的ipvs连接状况
删除所有集群服务
-C:清空ipvs规则
保存规则
-S
ipvsadm -S > /path/to/somefile
载入此前的规则:
-R
ipvsadm -R< /path/from/somefile
然后就利用上面学到的知识搭建一个lvs
三个服务器,一个当做负载均衡服务器,两个当做RS
要注意的是两个RS服务器需要隐藏目标地址,所以要先更改内核修改arp协议,然后才可以在Lo网卡配置目标地址的ip,负载均衡服务器则直接在物理网卡上直接配置ip就可以
怎么修改arp协议上面已经说了
用echo命令修改arp_ignore和arp_announce两个参数
echo 级别 > 参数
echo 1 > arp_ignore
接下来先给LVS配置目标地址
ifconfig ens33:8 192.168.76.100/24
然后给Rs配置
ifconfig lo:8 192.168.76.100 netmask 255.255.255.255
区别有两点,第一点一个配置在物理网卡,一个在Lo
第二点掩码设置一个是255.255.255.0,一个是255.255.255.255
为什么要把LO接口的掩码设置成这样呢,是因为如果设置成255.255.255.0这样的话掩码和ip进行按位与运算生成的路由条目,和ens33与掩码生成的路由条目,他们可以抵达的网络号是一样的,这样由于LO是在内核所以优先由lo来传送数据,但是lo是一个回环接口,假如包是由一个本地进程为另一个本地进程产生的, 它们将通过外出链的’lo’接口,然后返回进入链的’lo’接口,导致数据出不去,所以规定lo接口的掩码必须四个255
截止到目前为止网络层配完了
一定要注意的是rs先改arp,再配置地址,掩码一定要4个255,
然后就是安装httpd 命令是yum install httpd
然后启动命令systemctl start httpd
一定要关闭防火墙!还有keepalive
然后配置lvs根据上面的命令先添加-A,然后添加-a
然后就可以在网页上访问目标地址,就会被lvs负载到刚才配置的两台服务器
这时候可以验证一下lvs到底有没有握手,用netstat -natp指令查看发现没有连接,也就代表没有握手,去rs两台服务器看就可以看到刚才建立的连接
也可以用ipvsadm -lnc指令来看lvs的偷窥包,看看是否三次握手成功建立连接,也可以看到偷窥包里记录的信息,
state这一栏记录了状态
FIN_WAIT:连接过,偷窥了所有的包
SYN_RECV:基本上lvs都记录了,证明一定是后面网络层出问题了
这篇关于2021-07-12笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-15JavaMailSender是什么,怎么使用?-icode9专业技术文章分享
- 2024-11-15JWT 用户校验学习:从入门到实践
- 2024-11-15Nest学习:新手入门全面指南
- 2024-11-15RestfulAPI学习:新手入门指南
- 2024-11-15Server Component学习:入门教程与实践指南
- 2024-11-15动态路由入门:新手必读指南
- 2024-11-15JWT 用户校验入门:轻松掌握JWT认证基础
- 2024-11-15Nest后端开发入门指南
- 2024-11-15Nest后端开发入门教程
- 2024-11-15RestfulAPI入门:新手快速上手指南