目录
一、LVS简介
LVS 官网:
二、LVS 负载均衡模式
2.1 LVS-NAT模式:
2.1.1 简介
2.1.2 工作流程图:
2.1.3 说明:
2.1.4 LVS-NAT的优缺点:
2.2 LVS-DR模式:
2.2.1 简介
2.2.2 工作原理:
2.2.3 工作流程图:
2.2.4 说明:
2.2.5 DR模式的特点:
2.3 LVS-UN模式:
2.3.1 简介
2.3.2 工作步骤:
2.4 LVS-FULLNET 模式
2.4.1 简介
2.4.2 工作流程图:
2.4.3 说明:
2.4.4 LVS-FULLNET模式的优缺点:
2.5 各种模式的区别:
三、调度算法
3.1 LVS调度算法类型:
3.2 LVS静态调度算法:
3.3 LVS动态调度算法:
四、ipvsadm管理工具的使用
4.1 LVS软件相关信息
4.2 用法以及参数:
五、实验案例
5.1 部署NAT模式集群案例
5.1.1 实验环境
5.1.2 配置命令
5.1.2.1 所有主机都进行操作:
5.1.2.2 在client主机上操作:
5.1.2.3 在LVS主机上操作:
5.1.2.4 在webserver.com主机上操作:
5.1.2.5 在webserver2.com主机上操作:
5.1.2.6 测试:
5.1.2.6.1 修改LVS主机上的策略:
5.1.2.6.2 再次测试:
5.2 部署DR模式集群案例
5.2.1 实验环境
5.2.2 配置命令
5.2.2.1 所有主机都进行操作:
5.2.2.2 在client主机上操作:
5.2.2.3 在router主机上操作:
5.2.2.4 在lvs主机上操作:
5.2.2.5 在webserver.com主机上操作:
5.2.2.6 在webserver2.com主机上操作:
5.3 LVS火墙标记实验
5.3.1 配置命令
5.3.1.1 在webserver.com主机上操作:
5.3.1.2 在webserver2.com主机上操作:
5.3.1.3 在lvs主机上添加443策略:
5.3.2 测试:
一、LVS简介
LVS 官网:
http://www.linuxvirtualserver.org/
LVS:Linux Virtual Server(Linux虚拟服务器 ),负载调度器,内核集成。创始人前阿里云首席科学家章文嵩博士(现已经在滴滴) ,是阿里的四层SLB(Server LoadBalance) 是基于LVS+keepalived 实现。LVS 相关术语VS: Virtual Server ,负责调度RS:RealServer ,负责真正提供服务
二、LVS 负载均衡模式
lvs-nat : 修改请求报文的目标IP, 多目标 IP 的 DNATlvs-dr : 操纵封装新的 MAC 地址lvs-tun : 在原请求IP 报文之外新加一个 IP 首部lvs-fullnat : 修改请求报文的源和目标 IP
2.1 LVS-NAT模式:
2.1.1 简介
NAT模式称为全称Virtualserver via Network address translation(VS/NAT),是通过网络地址转换的方法来实现调度的。首先调度器(Director)接收到客户的请求数据包时(请求的目的IP为VIP),根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后调度就把客户端发送的请求数据包的目标IP地址及端口改成后端真实服务器的IP地址(RIP),这样真实服务器(RS)就能够接收到客户的请求数据包了。真实服务器响应完请求后,查看默认路由(NAT模式下我们需要把RS的默认路由设置为DS服务器。)把响应后的数据包发送给DS,DS再接收到响应包后,把包的源地址改成虚拟地址(VIP)然后发送回给客户端。
2.1.2 工作流程图:
2.1.3 说明:
(1)当用户请求到达DirectorServer,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP。
(2) PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链。
(3) IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP ,在这个过程完成了目标IP的转换(DNAT)。
(4) POSTROUTING链通过选路,将数据包发送给Real Server。
(5) Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP 。
(6) Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址(SNAT),然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP。
2.1.4 LVS-NAT的优缺点:
(1)NAT技术将请求的报文和响应的报文都需要通过DS进行地址改写,因此网站访问量比较大的时候DS负载均衡调度器有比较大的瓶颈,一般要求最多之能10-20台节点。
(2)节省IP,只需要在DS上配置一个公网IP地址就可以了。
(3)每台内部的节点服务器的网关地址必须是调度器LB的内网地址。
(4)NAT模式支持对IP地址和端口进行转换。即用户请求的端口和真实服务器的端口可以不一致。
2.2 LVS-DR模式:
2.2.1 简介
全称:Virtual Server via Direct Routing(VS-DR),也叫直接路由模式,用直接路由技术实现虚拟服务器。当参与集群的计算机和作为控制管理的计算机在同一个网段时可以用此方法,控制管理的计算机接收到请求包时直接送到参与集群的节点。直接路由模式比较特别,很难说和什么方面相似,前种模式基本上都是工作在网络层上(三层),而直接路由模式则应该是工作在数据链路层上(二层)。
2.2.2 工作原理:
DS和RS都使用同一个IP对外服务。但只有DS对ARP请求进行响应,所有RS对本身这个IP的ARP请求保持静默(对ARP请求不做响应),也就是说,网关会把对这个服务IP的请求全部定向给DS,而DS收到数据包后根据调度算法,找出对应的 RS,把目的MAC地址改为RS的MAC并发给这台RS。这时RS收到这个数据包,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端。由于DS要对二层包头进行改换,所以DS和RS之间必须在一个广播域,也可以简单的理解为在同一台交换机上。
2.2.3 工作流程图:
2.2.4 说明:
(1)当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP;
(2)PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链;
(3)IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址;
(4)由于DS和RS在同一个网络中,所以是通过二层,数据链路层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server;
(5)RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。 此时的源IP地址为VIP,目标IP为CIP;
(6)响应报文最终送达至客户端。
2.2.5 DR模式的特点:
- 在前端路由器做静态地址路由绑定,将对于VIP的地址仅路由到Director Server
- 在arp的层次上实现在ARP解析时做防火墙规则,过滤RS响应ARP请求。修改RS上内核参数(arp_ignore和arp_announce)将RS上的VIP配置在网卡接口的别名上,并限制其不能响应对VIP地址解析请求。
- RS可以使用私有地址;但也可以使用公网地址,此时可以直接通过互联网连入RS以实现配置、监控等;
- RS的网关一定不能指向DIP;
- 因为DR模式是通过MAC地址改写机制实现转发,RS跟Dirctory要在同一物理网络内(不能由路由器分隔);
- 请求报文经过Directory,但响应报文一定不经过Director
- 不支持端口映射;
- RS可以使用大多数的操作系统;
- RS上的lo接口配置VIP的IP地址;
2.3 LVS-UN模式:
2.3.1 简介
在VS/NAT 的集群系统中,请求和响应的数据报文都需要通过负载调度器,当真实服务器的数目在10台和20台之间时,负载调度器将成为整个集群系统的新瓶颈。大多数 Internet服务都有这样的特点:请求报文较短而响应报文往往包含大量的数据。如果能将请求和响应分开处理,即在负载调度器中只负责调度请求而响应直 接返回给客户,将极大地提高整个集群系统的吞吐量。
IP隧道(IP tunneling)是将一个IP报文封装在另一个IP报文的技术,这可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址。IP隧道技 术亦称为IP封装技术(IP encapsulation)。IP隧道主要用于移动主机和虚拟私有网络(Virtual Private Network),在其中隧道都是静态建立的,隧道一端有一个IP地址,另一端也有唯一的IP地址。
在TUN模式下,利用IP隧道技术将请求报文封装转发给后端服务器,响应报文能从后端服务器直接返回给客户。但在这里,后端服务器有一组而非一个,所以我们不可能静态地建立一一对应的隧道,而是动态地选择 一台服务器,将请求报文封装和转发给选出的服务器。
2.3.2 工作步骤:
- 客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。
- 负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将此包发送给RS。
- RS收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己lo接口上的VIP,所以会处理次请求报文,并将响应报文通过lo接口送给eth0网卡直接发送给客户端。注意:需要设置lo接口的VIP不能在共网上出现
2.4 LVS-FULLNET 模式
2.4.1 简介
FULL-NAT模式可以实际上是根据LVS-NAT模式的一种扩展。在NAT模式下DS需要先对请求进行目的地址转换(DNAT),然后对响应包进行源地址转换(SNAT),先后进行两次NAT,而 FULL-NAT则分别对请求进行和响应进行DNAT和SNAT,进行4次NAT,当然这样多次数的NAT会对性能大大削减,但是由于对请求报文的目的地址和源地址都进行了转换,后端的RS可以不在同一个VLAN下。
2.4.2 工作流程图:
2.4.3 说明:
- 首先client 发送请求package给VIP;
- VIP 收到package后,会根据LVS设置的LB算法选择一个合适的RS,然后把package 的目地址修改为RS的ip地址,把源地址改成DS的ip地址;
- RS收到这个package后发现目标地址是自己,就处理这个package ,处理完后把这个包发送给DS;
- DS收到这个package 后把源地址改成VIP的IP,目的地址改成CIP(客户端ip),然后发送给客户端;
2.4.4 LVS-FULLNET模式的优缺点:
- RIP,DIP可以使用私有地址;
- RIP和DIP可以不再同一个网络中,且RIP的网关未必需要指向DIP;
- 支持端口映射;
- RS的OS可以使用任意类型;
- 请求报文经由Director,响应报文也经由Director;
- FULL-NAT因为要经过4次NAT,所以性能比NAT还要低;
- 由于做了源地址转换,RS无法获取到客户端的真实IP;
2.5 各种模式的区别:
llvs-dr与lvs-tun:请求报文要经由Director,但响应报文由RS直接发往Client
lvs-dr:通过封装新的MAC首部实现,通过MAC网络转发
lvs-tun:通过在原IP报文外封装新IP头实现转发,支持远距离通信
vs-nat与lvs-fullnat:请求和响应报文都经由Director
lvs-nat:RIP的网关要指向DIP
lvs-fullnat:RIP和DIP未必在同一IP网络,但要能通信
三、调度算法
3.1 LVS调度算法类型:
ipvs scheduler :根据其调度时是否考虑各 RS 当前的负载状态被分为两种:静态方法和动态方法静态方法:仅根据算法本身进行调度,不考虑 RS 的负载情况动态方法:主要根据每 RS 当前的负载状态及调度算法进行调度 Overhead=value 较小的 RS 将被调度
3.2 LVS静态调度算法:
1、RR : roundrobin 轮询 RS 分别被调度,当 RS 配置有差别时不推荐2 、 WRR : Weighted RR ,加权轮询根据 RS 的配置进行加权调度,性能差的 RS 被调度的次数少3 、 SH : Source Hashing ,实现 session sticky ,源 IP 地址 hash ;将来自于同一个 IP 地址的请求始终发往第一次挑中的 RS ,从而实现会话绑定4 、 DH : Destination Hashing ;目标地址哈希,第一次轮询调度至 RS ,后续将发往同一个目标地址的请求始终转发至第一次挑中的 RS ,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商
3.3 LVS动态调度算法:
主要根据 RS 当前的负载状态及调度算法进行调度 Overhead=value 较小的 RS 会被调度1 、 LC : least connections (最少链接发) 适用于长连接应用Overhead (负载值) =activeconns (活动链接数) x 256+inactiveconns (非活动链接数)2 、 WLC : Weighted LC (权重最少链接) 默认调度方法Overhead=(activeconns x 256+inactiveconns)/weight3 、 SED : Shortest Expection Delay, 初始连接高权重优先Overhead=(activeconns+1+inactiveconns) x 256/weight 但是,当node1 的权重为 1 , node2 的权重为 10 ,经过运算前几次的调度都会被 node2 承接4 、 NQ : Never Queue ,第一轮均匀分配,后续 SED5 、 LBLC : Locality-Based LC ,动态的 DH 算法,使用场景:根据负载状态实现正向代理6 、 LBLCR : LBLC with Replication ,带复制功能的 LBLC ,解决 LBLC 负载不均衡问题,从负载重的复制到负载轻的RS
四、ipvsadm管理工具的使用
4.1 LVS软件相关信息
ipvsadm是LVS的管理工具,ipvsadm工作在用户空间,通过ipvsadm命令编写负载均衡规则。
程序包: ipvsadm下载: yum install ipvsadm -yUnit File: ipvsadm.service主程序: /usr/sbin/ipvsadm规则保存工具: /usr/sbin/ipvsadm-save规则重载工具: /usr/sbin/ipvsadm-restore配置文件: /etc/sysconfig/ipvsadm-configipvs 调度规则文件: /etc/sysconfig/ipvsadm
4.2 用法以及参数:
-A:增加LVS的VIP记录 -a:增加real server记录 -E:修改LVS记录 -e:修改real server列表信息 -D:删除一条LVS记录 -d:删除real server列表信息 -R:恢复虚拟服务器规则 -S:保存虚拟服务器规则,或者server ipvsadm save,和iptables一样 ipvsadm -Sn > /root/lvsrules.txt #保存规则 cat /root/lvsrules.txt | ipvsadm -R #恢复规则 -C:清除虚拟服务器列表所有记录 -L:显示列表信息,和iptables一样 -t | u:指定LVS提供tcp或者是udp服务,后面常跟选项 real-server-ip:port或者virtual-server-ip:port -s:指定LVS的负载调度算法,后面接详细的调度算法,如-s rr | wrr | lc | wlc,不指定的话默认是wlc -p [timeout]:指定一个服务持续时间,用于会话保持,当同个用户重复请求时,给同一个real server处理,默认是300秒 -r:指定real server的ip地址 -i:LVS工作在隧道模式下 -m:LVS工作在NAT模式下 -g:LVS工作在DR模式下 -w:指定real server的权重 -n:不进行dns解析
五、实验案例
5.1 部署NAT模式集群案例
5.1.1 实验环境
主机名 | ip | vip | 角色 |
client | 192.168.10.140 | 测试机 | |
LVS | 192.168.94.130 | 192.168.10.130 | 调度器(LVS) |
webserver.com | 192.168.94.132 | null | 真实服务器(RS) |
webserver2.com | 192.168.94.140 | null | 真实服务器(RS) |
5.1.2 配置命令
5.1.2.1 所有主机都进行操作:
[root@webserver html]# systemctl stop firewalld #关闭防火墙
[root@webserver html]# setenforce 0 #关闭selinux
5.1.2.2 在client主机上操作:
[root@client ~]# vmset.sh eth0 192.168.10.140 client.com #用脚本给eth0添加ip和在/etc/hosts添加ip和主机名
[root@client ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection #查看eth0配置
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=192.168.10.140/24,192.168.10.2
method=manual
dns=114.114.114.114;[root@client ~]# cat /bin/vmset.sh #查看脚本,这个脚本适用每个主机
#!/bin/bash
rm -fr /etc/NetworkManager/system-connections/$1.nmconnection
cat > /etc/NetworkManager/system-connections/$1.nmconnection <<EOF
[connection]
id=$1
type=ethernet
interface-name=$1[ipv4]
address1=$2/24,192.168.10.2
method=manual
dns=114.114.114.114;
EOFchmod 600 /etc/NetworkManager/system-connections/$1.nmconnection
nmcli connection reload
nmcli connection up $1hostnamectl hostname $3
cat > /etc/hosts <<EOF
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
$2 $3
EOF
5.1.2.3 在LVS主机上操作:
[root@lvs ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection #查看eth0配置
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=192.168.10.130/24,192.168.10.2
method=manual
dns=114.114.114.114;
[root@lvs ~]# cat /etc/NetworkManager/system-connections/eth1.nmconnection #查看eth1配置
[connection]
id=eth1
type=ethernet
interface-name=eth1[ipv4]
address1=192.168.94.130/24
method=manual[root@lvs ~]# sysctl -a | grep ip_forward #查看ip_forward打开内核路由功能
net.ipv4.ip_forward = 0
net.ipv4.ip_forward_update_priority = 1
net.ipv4.ip_forward_use_pmtu = 0
[root@lvs ~]# cat /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_forward = 1
[root@lvs ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@lvs ~]# yum install ipvsadm -y #下载lvs软件
[root@lvs ~]# ipvsadm -A -t 192.168.10.130:80 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.10.130:80 -r 192.168.94.132:80 -m
[root@lvs ~]# ipvsadm -a -t 192.168.10.130:80 -r 192.168.94.140:80 -m
[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.10.130:80 rr
-> 192.168.94.132:80 Masq 1 0 0
-> 192.168.94.140:80 Masq 1 0 0
[root@lvs ~]#
5.1.2.4 在webserver.com主机上操作:
[root@webserver ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection #查看eth0配置
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=192.168.94.132/24,192.168.94.130
method=manual[root@webserver ~]# route -n #查看网关
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.94.130 0.0.0.0 UG 100 0 0 eth0
192.168.94.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
[root@webserver ~]# yum install httpd -y #下载httpd服务
[root@webserver ~]# systemctl enable --now httpd #开启和自启动httpd服务[root@webserver html]# echo webserver - 192.168.94.132 > /var/www/html/index.html #在httpd服务默认的路径下给一个文档并编写内容,内容可以更改
5.1.2.5 在webserver2.com主机上操作:
[root@server2 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection #查看eth0配置
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=192.168.94.140/24,192.168.94.130
method=manual[root@server2 ~]# route -n #查看网关
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.94.130 0.0.0.0 UG 100 0 0 eth0
192.168.94.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0[root@webserver2~]# yum install httpd -y #下载httpd服务
[root@webserver2 ~]# systemctl enable --now httpd #开启和自启动httpd服务[root@webserver2 html]# echo webserver2 - 192.168.94.140 > /var/www/html/index.html #在httpd服务默认的路径下给一个文档并编写内容,内容可以更改
5.1.2.6 测试:
[root@client ~]# for i in {1..10}
> do
> curl 192.168.10.130
> done
5.1.2.6.1 修改LVS主机上的策略:
[root@lvs ~]# ipvsadm -C
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn[root@lvs ~]# ipvsadm -A -t 192.168.10.130:80 -s wrr
[root@lvs ~]# ipvsadm -a -t 192.168.10.130:80 -r 192.168.94.132:80 -m -w 2
[root@lvs ~]# ipvsadm -a -t 192.168.10.130:80 -r 192.168.94.140:80 -m -w 1
[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.10.130:80 wrr
-> 192.168.94.132:80 Masq 2 0 0
-> 192.168.94.140:80 Masq 1 0 0
[root@lvs ~]#
5.1.2.6.2 再次测试:
[root@client ~]# for i in {1..10}; do curl 192.168.10.130; done
5.2 部署DR模式集群案例
5.2.1 实验环境
主机名 | ip | vip | 角色 |
client | nat:192.168.10.200 | null | 测试主机 |
router | nat:192.168.10.100,仅主机:192.168.94.100 | null | 路由器 |
lvs | 仅主机:192.168.94.130,GW:192.168.94.100 | lo:192.168.94.200/32 | 调度器 |
webserver.com | 仅主机:192.168.94.132,GW:192.168.94.100 | lo:192.168.94.200/32 | 真实服务器(RS) |
webserver2.com | 仅主机:192.168.94.140,GW:192.168.94.100 | lo:192.168.94.200/32 | 真实服务器(RS) |
5.2.2 配置命令
5.2.2.1 所有主机都进行操作:
[root@webserver html]# systemctl stop firewalld #关闭防火墙
[root@webserver html]# setenforce 0 #关闭selinux
5.2.2.2 在client主机上操作:
[root@client ~]# vmset.sh eth0 192.168.10.200 client.com #用脚本给eth0添加ip和在/etc/hosts添加ip和主机名
[root@client ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection #查看eth0配置
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=192.168.10.200/24,192.168.10.100
method=manual
dns=114.114.114.114;[root@client ~]# nmcli connection reload
[root@client ~]# nmcli connection up eth0
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
[root@client ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.10.100 0.0.0.0 UG 100 0 0 eth0
192.168.10.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
[root@client ~]# cat /bin/vmset.sh #查看脚本,这个脚本适用每个主机
#!/bin/bash
rm -fr /etc/NetworkManager/system-connections/$1.nmconnection
cat > /etc/NetworkManager/system-connections/$1.nmconnection <<EOF
[connection]
id=$1
type=ethernet
interface-name=$1[ipv4]
address1=$2/24,192.168.10.2
method=manual
dns=114.114.114.114;
EOFchmod 600 /etc/NetworkManager/system-connections/$1.nmconnection
nmcli connection reload
nmcli connection up $1hostnamectl hostname $3
cat > /etc/hosts <<EOF
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
$2 $3
EOF
5.2.2.3 在router主机上操作:
[root@router ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=192.168.10.100/24,192.168.10.2
method=manual
dns=114.114.114.114;
[root@router ~]# cat /etc/NetworkManager/system-connections/eth1.nmconnection
[connection]
id=eth1
type=ethernet
interface-name=eth1[ipv4]
address1=192.168.94.100/24
method=manual
[root@router ~]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 1 #开启内核路由功能
net.ipv4.ip_forward_update_priority = 1
net.ipv4.ip_forward_use_pmtu = 0
5.2.2.4 在lvs主机上操作:
[root@lvs ~]# cat /etc/NetworkManager/system-connections/eth1.nmconnection
[connection]
id=eth1
type=ethernet
interface-name=eth1[ipv4]
address1=192.168.94.130/24,192.168.94.100
method=manual[root@lvs ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.94.100 0.0.0.0 UG 100 0 0 eth1
192.168.94.0 0.0.0.0 255.255.255.0 U 100 0 0 eth1[root@lvs ~]# ipvsadm -C #删除策略
[root@lvs ~]# ipvsadm -Ln #查看策略
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@lvs ~]# ipvsadm -A -t 192.168.94.200:80 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.94.200:80 -r 192.168.94.132:80 -g -w 1
[root@lvs ~]# ipvsadm -a -t 192.168.94.200:80 -r 192.168.94.140:80 -g -w 1
[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.94.200:80 rr
-> 192.168.94.132:80 Route 1 0 0
-> 192.168.94.140:80 Route 2 0 0
[root@lvs ~]#
5.2.2.5 在webserver.com主机上操作:
[root@webserver ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection #查看eth0配置
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=192.168.94.132/24,192.168.94.100
method=manual[root@webserver ~]# route -n #查看网关
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.94.100 0.0.0.0 UG 100 0 0 eth0
192.168.94.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
[root@webserver ~]# yum install httpd -y #下载httpd服务
[root@webserver ~]# systemctl enable --now httpd #开启和自启动httpd服务[root@webserver html]# echo webserver - 192.168.94.132 > /var/www/html/index.html #在httpd服务默认的路径下给一个文档并编写内容,内容可以更改
#使用vip不对外响应
[root@webserver ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@webserver ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce[root@webserver ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@webserver ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
5.2.2.6 在webserver2.com主机上操作:
[root@server2 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection #查看eth0配置
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=192.168.94.140/24,192.168.94.100
method=manual[root@server2 ~]# route -n #查看网关
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.94.100 0.0.0.0 UG 100 0 0 eth0
192.168.94.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0[root@webserver2~]# yum install httpd -y #下载httpd服务
[root@webserver2 ~]# systemctl enable --now httpd #开启和自启动httpd服务[root@webserver2 html]# echo webserver2 - 192.168.94.140 > /var/www/html/index.html #在httpd服务默认的路径下给一个文档并编写内容,内容可以更改
#使用vip不对外响应
[root@webserver ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@webserver ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@webserver ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@webserver ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
5.2.2.7 测试:
[root@client ~]# for i in {1..10}
> do
> curl 192.168.94.200
> done
5.3 LVS火墙标记实验
在上个实验完成的基础上,完成下面配置。
5.3.1 配置命令
5.3.1.1 在webserver.com主机上操作:
[root@webserver ~]# yum install mod_ssl -y #安装mod_ssl模块让其支持https
[root@webserver ~]# systemctl restart httpd
5.3.1.2 在webserver2.com主机上操作:
[root@webserver2 ~]# yum install mod_ssl -y #安装mod_ssl模块让其支持https
[root@webserver2 ~]# systemctl restart httpd
5.3.1.3 在lvs主机上添加443策略:
[root@lvs ~]# ipvsadm -A -t 192.168.94.200:443 -s wrr
[root@lvs ~]# ipvsadm -a -t 192.168.94.200:443 -r 192.168.94.132:443 -g -w 1
[root@lvs ~]# ipvsadm -a -t 192.168.94.200:443 -r 192.168.94.140:443 -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.94.200:80 wrr
-> 192.168.94.132:80 Route 1 0 0
-> 192.168.94.140:80 Route 2 0 0
TCP 192.168.94.200:443 wrr
-> 192.168.94.132:443 Route 1 0 0
-> 192.168.94.140:443 Route 2 0 0
[root@lvs ~]#测试问题:
[root@client ~]# curl 192.168.94.200;curl -k https://192.168.94.200
webserver2 - 192.168.94.140
webserver2 - 192.168.94.140
[root@client ~]# curl 192.168.94.200;curl -k https://192.168.94.200
webserver2 - 192.168.94.140
webserver2 - 192.168.94.140
[root@client ~]# curl 192.168.94.200;curl -k https://192.168.94.200
webserver - 192.168.94.132
webserver - 192.168.94.132
当访问vip时两次调度都到了
解决办法:[root@lvs ~]# iptables -t mangle -A PREROUTING -d 192.168.94.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 66 #lvs主机中为端口做标记
[root@lvs ~]# ipvsadm -C
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn[root@lvs ~]# ipvsadm -A -f 66 -s rr
[root@lvs ~]# ipvsadm -a -f 66 -r 192.168.94.132 -g
[root@lvs ~]# ipvsadm -a -f 66 -r 192.168.94.140 -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 66 rr
-> 192.168.94.132:0 Route 1 0 0
-> 192.168.94.140:0 Route 1 0 0
[root@lvs ~]#
5.3.2 测试:
[root@client ~]# curl 192.168.94.200;curl -k https://192.168.94.200
webserver2 - 192.168.94.140
webserver - 192.168.94.132
[root@client ~]# curl 192.168.94.200;curl -k https://192.168.94.200
webserver2 - 192.168.94.140
webserver - 192.168.94.132