目录
一、LVS集群概念
1、集群解决的常见三种类型的问题
负载均衡LB:loadBalancing由多个主机组成,每个主机只承担一部分访问。
高可用HA:highAvailability A=正常时间/(正常时间+故障时间)
高性能计算HPC:High-performance computing
2、集群和分布式的区别
集群是同一个业务系统部署在多台主机上,每台主机实现的功能没有差别,数据和代码都是一样的
分布式是一个业务被拆分成多个子业务或者本身就是不同的业务,部署在多台主机上,每台主机实现的功能不同,数据和代码也不一样,完整的业务是每台主机实现的功能加起来。
集群是通过提高单位时间内执行的任务数来提升效率,而分布式是通过缩短单个任务的执行时间来提升效率。
3、角色缩写
VS:Virtual Server
RS:Real Server
CIP:Client IP
VIP:VS外网的IP
DIP:VS内网的IP
RIP:Realserver IP
访问流程:CIP <-->VIP==DIP<-->RIP
二、LVS运行原理
LVS是基于四层来实现的,其根据请求报文的目标ip和目标协议及端口将其调度转发至真实主机,会根据调度算法挑选真实主机。
三、LVS集群的类型
lvs-nat:修改请求报文的目标IP,多目标IP的DNAT
lvs-dr:操纵封装的MAC地址
lvs-tun:在原请求的IP报文之外新加一个IP首部
lvs-fullnat:修改请求报文的源和目标IP
1、nat模式原理
2、dr模式原理
四、LVS实战案例
1、nat模式
(1)环境部署
![](https://i-blog.csdnimg.cn/direct/6a6a68d22bc342cb9d10f08ed6956902.png)
![](https://i-blog.csdnimg.cn/direct/675661d971b141289d7dcac18f94e21d.png)
![](https://i-blog.csdnimg.cn/direct/18bba3ad1485468b8fcf75f7799c3f7c.png)
![](https://i-blog.csdnimg.cn/direct/bac777a29b034a8c90ae930fa357dcfa.png)
(2)步骤
①webserver1:
[root@webserver ~]# vmset.sh eth0 192.168.0.10 webserver.jcl.org
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)编辑网络配置文件设置网关为LVS的RIP
[root@webserver ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[root@webserver ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=192.168.0.10/24,192.168.0.100
method=manual
dns=114.114.114.114;激活网卡
[root@webserver ~]# nmcli connection reload
[root@webserver ~]# nmcli connection up eth0
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6)安装httpd并写入启动文件
[root@webserver ~]# yum install httpd -y
[root@webserver ~]# echo web1->192.168.0.10 /var/www/html/index.html启动http
[root@webserver ~]# systemctl enable --now httpd查看网关是否设置成功
[root@webserver ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.100 0.0.0.0 UG 100 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
②webserver2:
[root@webserver2 ~]# vmset.sh eth0 192.168.0.20 webserver.jcl.org
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6)[root@webserver2 ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[root@webserver2 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=192.168.0.20/24,192.168.0.100
method=manual
dns=114.114.114.114;激活网卡
[root@webserver2 ~]# nmcli connection reload
[root@webserver2 ~]# nmcli connection up eth0
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/7)
安装http并写入启动文件
[root@webserver2 ~]# yum install httpd -y
[root@webserver2 ~]# echo web2->192.168.0.20 /var/www/html/index.html启动http
[root@webserver2 ~]# systemctl enable --now httpd
最后查看一下网关是否设置成功[root@webserver2 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.100 0.0.0.0 UG 100 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
③LVS:
[root@LVS ~]# vmset.sh eth0 172.25.254.100 LVS.jcl.org
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
设置内核使LVS中的两个网段互通
![](https://i-blog.csdnimg.cn/direct/98032bdc91044eb69577f17bff7f7900.png)
刷新
[root@www ~]# sysctl -p
net.ipv4.ip_forward = 1查看是否设置成功
[root@LVS ~]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 1
net.ipv4.ip_forward_update_priority = 1
net.ipv4.ip_forward_use_pmtu = 0给LVS增加策略以便选择哪个RS
先安装 yum install ipvsadm -y
![](https://i-blog.csdnimg.cn/direct/fd2de6f2aea2488ab21a8b674502c80e.png)
④最后测试一下
[root@LVS ~]# curl 192.168.0.10
web1
[root@LVS ~]# curl 192.168.0.20
web2
证明两台RS可以访问
![](https://i-blog.csdnimg.cn/direct/10a8aeb36a6444688e0055d42e2fc7c6.png)
2、DR模式
(1)环境部署
![](https://i-blog.csdnimg.cn/direct/e00a0758bd3b4a0b9a654e04d05edbf3.png)
(2)步骤
①网络配置
LVS:
RIP[root@LVS~]# vmset.sh eth0 192.168.0.50 LVS.jcl.org
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/7)VIP
[root@LVS ~]# ip a a 192.168.0.200/32 dev lo编辑网关
[root@www ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[root@www ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=192.168.0.50/24,192.168.0.100
method=manual
dns=114.114.114.114;激活网卡
[root@www ~]# nmcli connection reload
[root@www ~]# nmcli connection up eth0
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/8)
查看网卡,IP是否设置成功
RS:
router:
Client:
设置网关为router的外网IP
配置IP
②设置内核达到两个网段相通
router:
③在RS上解决响应问题
[root@webserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@webserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@webserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@webserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce[root@webserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@webserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@webserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@webserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
④在LVS上设置策略
[root@LVS ~]# ipvsadm -C ---清楚之前的策略
[root@LVS ~]# ipvsadm -A -t 192.168.0.200:80 -s wrr ---添加VIP服务
[root@LVS ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10 -g -w 1 ---添加RIP并设置为dr模式(-g)
[root@LVS ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20 -g -w 2
[root@LVS ~]# 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.0.200:80 wrr
-> 192.168.0.10:80 Route 1 4 0
-> 192.168.0.20:80 Route 2 0 6
⑤抓包测试
由于硬件原因虚拟机开不了五台,这里挂起了一台RS
可以看到DR模式下改变的不是源目的IP,而是源mac地址和目标mac地址。
五、拓展
1、防火墙标记解决轮询调度问题
首先给LVS主机打标记
在Director主机基于标记定义集群服务,设定策略
[root@LVS ~]# iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 666
[root@LVS ~]# ipvsadm -C ---先清空策略
[root@LVS ~]# ipvsadm -A -f 666 -s rr
[root@LVS ~]# ipvsadm -a -f 666 -r 192.168.0.10 -g
[root@LVS ~]# ipvsadm -a -f 666 -r 192.168.0.20 -g
[root@LVS ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
FWM 666 rr
-> 192.168.0.10:0 Route 1 0 0
-> 192.168.0.20:0 Route 1 0 0
2、lvs持久链接
[root@LVS ~]# ipvsadm -A -f 666 -s rr -p
[root@LVS ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
FWM 666 rr persistent 360
-> 192.168.0.10:0 Route 1 0 0
-> 192.168.0.20:0 Route 1 0 0