高并发负载均衡3-LVS的DR搭建
LVS
LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器,是一个由章文嵩博士发起的自由软件项目,官方站点是:http://www.linuxvirtualserver.org。现在LVS已经是Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须重新编译内核以支持LVS功能模块,但是从Linux2.4内核心之后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。
使用LVS技术要达到的目标是:通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能,高可用的服务器群集,它具有良好的可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。
LVS体系架构
使用LVS架设的服务器集群系统有三个部分组成:最前端的负载均衡层(Loader Balancer),中间的服务器群组层,用Server Array表示,最底层的数据共享存储层,用Shared Storage表示。在用户看来所有的应用都是透明的,用户只是在使用一个虚拟服务器提供的高性能服务。
LVS的体系架构如图:
https://baike.baidu.com/item/LVS/17738?fr=aladdin
http://www.linuxe.cn/post-181.html
隐藏的Virtual IP 配置原理
将VIP配置在环回接口lo上
负载均衡调度方法
四种静态调度方法:
rr: 轮叫调度(Round-Robin Scheduling)
wrr:加权轮叫调度(Weighted Round-Robin Scheduling)
dh: 目标地址散列调度(Destination Hashing Scheduling)
sh:源地址散列调度(Source Hashing Scheduling)
动态调度方法:
lc: 最小连接调度(Least-Connection Scheduling)
wlc: 加权最小连接调度(Weighted Least-Connection Scheduling)
sed: 最短期望延迟
nq: never queue
LBLC: 基于局部性的最少链接(Locality-Based Least Connections Scheduling)
DH:
LBLCR:带复制的基于局部性最少链接(Locality-Based Least Connections with Replication Scheduling)
LVS在Linux中自带的ipvs内核模块
#ipvs内核模块
yum install ipvsadm -y
#管理集群服务
添加:-A -t|u|f service-address [-s scheduler]
-t: TCP协议的集群
-u: UDP协议的集群
service-address: IP:PORT
-f: FWM: 防火墙标记
service-address: Mark Number
修改:-E
删除:-D -t|u|f service-address
ipvsadm -A -t 192.168.9.100:80 -s rr
#管理集群服务中的RS
添加:-a -t|u|f service-address -r server-address [-g|i|m] [-w weight]
-t|u|f service-address:事先定义好的某集群服务
-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-address -r server-address
\# ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.8 –g
\# ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.9 -g
查看
-L|l
-n: 数字格式显示主机地址和端口
--stats:统计数据
--rate: 速率
--timeout: 显示tcp、tcpfin和udp的会话超时时长
-:c 显示当前的ipvs连接状况
删除所有集群服务
-C:清空ipvs规则
保存规则
-S
\# ipvsadm -S > /path/to/somefile
载入此前的规则:
-R
\# ipvsadm -R < /path/form/somefile
本机VMware LVS网络部署
操作步骤
#配置虚拟网络
[root@node11 ~]# ifconfig ens33:2 192.168.10.100/24
#修改arp协议配置
#修改ens33接口
[root@node12 ens33]# cat arp_ignore
0
[root@node12 ens33]# echo 1 >arp_ignore
[root@node12 ens33]# cat arp_ignore
1
[root@node12 ens33]# echo 2 >arp_announce
[root@node12 ens33]# cat arp_announce
2
[root@node12 ens33]# pwd
/proc/sys/net/ipv4/conf/ens33
# 修改all接口
[root@node12 all]# echo 1 >arp_ignore
[root@node12 all]# echo 2 >arp_announce
[root@node12 all]# cat arp_announce
2
#配置vip
[root@node12 all]# ifconfig lo:2 192.168.10.100 netmask 255.255.255.255
#node13修改 配置
[root@node13 ~]# echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignore
[root@node13 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@node13 ~]# echo 2 > /proc/sys/net/ipv4/conf/ens33/arp_announce
[root@node13 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@node13 ~]# ifconfig lo:2 192.168.10.100 netmask 255.255.255.255
#RS中的服务 部署httpd 创建index.html
# node12-node13执行
[root@node12 all]# yum install httpd -y
[root@node12 all]# service httpd start
Redirecting to /bin/systemctl start httpd.service
[root@node12 all]# echo 'from node12' > /var/www/html/index.html
[root@node12 all]# cat /var/www/html/index.html
from node12
#LVS服务配置
#node11
[root@node11 ~]# yum install ipvsadm
[root@node11 ~]# ipvsadm -A -t 192.168.10.100:80 -s rr
[root@node11 ~]# ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.72 -g -w 1
[root@node11 ~]# ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.73 -g -w 1
[root@node11 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.10.100:80 rr
-> 192.168.10.72:80 Route 1 0 0
-> 192.168.10.73:80 Route 1 0 0
# 验证
#浏览器访问 192.168.10.100 看到负载
node11:
netstat -natp 结论看不到socket连接
node12~node13:
netstat -natp 结论看到很多的socket连接
node11:
ipvsadm -lnc 查看偷窥记录本
TCP 00:57 FIN_WAIT 192.168.150.1:51587 192.168.150.100:80 192.168.150.12:80
FIN_WAIT: 连接过,偷窥了所有的包
SYN_RECV: 基本上lvs都记录了,证明lvs没事,一定是后边网络层出问题
[root@node11 ~]# ipvsadm -lnc
IPVS connection entries
pro expire state source virtual destination
TCP 00:44 FIN_WAIT 192.168.10.1:10689 192.168.10.100:80 192.168.10.73:80
TCP 00:55 FIN_WAIT 192.168.10.1:10691 192.168.10.100:80 192.168.10.72:80
TCP 00:55 FIN_WAIT 192.168.10.1:10692 192.168.10.100:80 192.168.10.73:80
TCP 00:44 FIN_WAIT 192.168.10.1:10688 192.168.10.100:80 192.168.10.72:80
本文来自博客园,作者:gary2048,转载请注明原文链接:https://www.cnblogs.com/zhoum/p/15340503.html