实现LVS

LVS-NAT架构图:

环境概述:以192.168.10.x/24模拟外网 10.0.0.x/24模拟内网

共四台主机
一台:Client:192.168.10.101/24   GW:无 因为仅主机处于同一网段中,不需要通过GW去往下一跳。
一台:lvs  
eth1 仅主机 192.168.10.100/16
eth0 NAT 10.0.0.10/24
两台RS:
RS1: 10.0.0.20/24    GW:10.0.0.8 NAT
RS2: 10.0.0.30/24    GW:10.0.0.8 NAT

软件包:
ipvsadm(LVS安装)
mod_ssl(RS1、RS2)
httpd
(RS1、RS2)

准备工作:
1.据LVS-NAT工作模式,RS发出的响应包需原路返回VS服务器期间经过forward链(因为dest是客户机的CIP并非是VS的DIP,VS只是做了一个DNAT将请求调度给RS所以会经过forward链从postrouting链出去)因此VS需要开启ip_forwoard功能。

sysctl -a | grep 'ip_forward'
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p

 

2.修改RS1、RS2的RIP,gatway指向DIP。

sed -ri.bak 's@(GATEWAY=).*@\110.0.0.10@' /etc/sysconfig/network-scripts/ifcfg-eth0

3.修改RS1、RS2 httpd根目录下的索引文件(修改主页面,以便后面查看VS调度请求于哪一台RS)。PS:hostname需提前分别修改成RS1和RS2

( hostname;hostname -I ) > /var/www/html/index.html

配置LVS搭建集群服务:
配置前测试:当客户机访问LVS对外的VIP时是无法访问的。

1.以LVS对外提供访问的VIP身份去创建集群服务,并将RS加入到集群服务中。

ipvsadm -A -t 192.168.10.100:80 -s wrr  
ipvsadm -a -t 192.168.10.100:80 -r 10.0.0.20:80 -m
ipvsadm -a -t 192.168.10.100:80 -r 10.0.0.30:80 -m -w 3

<查看集群服务信息>

ipvsadm -Ln

2.可以看到RS1默认权重为1、RS2的设置权重为3,当客户机访问VIP LVS在进行请求调度时RS1和RS2比列为 1:3  <且RS2优先接收调度请求>

 3.保存集群服务配置

rpm -ql ipvsadm   #找到service文件并打开可以看到service文件提供到LVS集群服务配置导入导出命令及配置的存放路径

 

<保存配置>

ipvsadm-save -n > /etc/sysconfig/ipvsadm
cat /etc/sysconfig/ipvsadm

4.清空LVS集群配置,通过导出命令将已保存的集群配置文件导出,查看是否能够成功。

ipvsadm -C  #清空所有集群服务命令
ipvsadm -Ln

<导出以保存的集群配置,成功导出并且与清空前的配置一模一样>

ipvsadm-restore < /etc/sysconfig/ipvsadm
ipvsadm -Ln

5.集群服务的配置信息已保存到ipvsadm.service指定的文件当中,设置为开机自启后当服务启动时就会自动的将保存的集群服务配置到集群服务当中。<永久化保存>

sysctl -a | grep 'ip_forward'
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p

 

LVS-DR架构图:

环境概述:

共五台主机
一台:Client:192.168.10.101/24   GW:192.168.10.200

 一台:路由
eth1:192.168.10.200/32
eth0:10.0.0.200/24

一台:lvs  
eth0:DIP:NAT 10.0.0.10/24 lo:10.0.0.100/32
两台RS:
RS1: 10.0.0.20/24    GW:10.0.0.200 NAT  lo:10.0.0.100/32
RS2: 10.0.0.30/24    GW:10.0.0.200 NAT  lo: 10.0.0.100/32

 PS:
1)相关软件包已提前安装。
2)所有主机禁用iptables和SELinux
3)路由器 eth1 eth0 已提前配置妥当(因为是虚拟机模拟路由器,因此要开启ip_forward功能转发数据包)。

sysctl -a | grep 'ip_forward'
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p

 网路环境配置:
1.Client 网关指向处于同一网段的路由器eth1 接口IP。

route add default gw 192.168.10.200  

2.LVS、RS1、RS2 网关统统指向路由器eth0 接口IP。
<LVS>

<RS1>

<RS2>

3.配置LVS RS1 RS2 的VIP,绑定在lo(回环网卡)。


ifconfig lo:1 10.0.0.100/32    #LVS
ifconfig lo:1 10.0.0.100/32    #RS1
ifconfig lo:1 10.0.0.100/32    #RS2

 

4.将RS1、RS2 绑定VIP的lo(回环网卡)网卡的 忽略ARP请求功能开启、ARP广播功能关闭。 

echo 1 >   /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 >   /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 >   /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 >   /proc/sys/net/ipv4/conf/lo/arp_announce 

5.创建服务器集群(这里用rr<轮询调度算法>,方便测试,生产中怎么好怎么来)

ipvsadm -A -t 10.0.0.100:80 -s rr
ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.20:80 -g
ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.30:80 -g

6.测试环节:
1)查看测试文件信息。

2)抓包查看详细信息
<在进行TCP三次握手时,发现第一次握手请求了两次  解读:这是由于Client的请求到LVS的VIP后被调度到了RS,因此出现两次请求。>

3)查看请求被调度前的源MAC于目标MAC的变化
<第一次请求  解读:Src为路由器的eth0 MAC Dest为LVS的eth0 MAC (因为VIM绑定在lo上 没有实际的MAC所以记录的是eth0的MAC)>

 <第二次请求 解读:SRC为LVS eth0 MAC Dest则变成了RS2 的 eth0 MAC ,在抓包前已经关闭掉了lo的ARP广播及开启ARP请求忽略功能也就意味着,也就是以为着LVS不可能以三层的方式(路由转发)将请求转发到RS2上、也是因此而避免了VIP冲突的问题,所以LVS服务器只能以二层的方式进行转发(修改目标MAC),由于并未关闭RS2的eth0的ARP广播功能和并未开启ARP请求忽略所以能够被LVS服务器获取到eth0 的MAC,从而进行修改用户请求的Dest MAC 进行调度>

 

 

总结:
1)LVS是集成在内核中的功能不会参与Client与RS之间的握手只充当转发作用。
2)LVS的VIP可以设置在eth0网卡上,因为LVS的VIP参与到工作当中,不需要关闭ARP广播和开启ARP请求忽略功能。
3)LVS之所以要配置网GW(即便是一个错误的GW),涉及到内核中的一个功能。(面试反问精选)

cat /proc/sys/net/ipv4/conf/all/rp_filter  #默认开启 默认参数为1

#0标示不开启地址校验;
#1表开启严格的反向路径校验。对每一个收到的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最佳路径,则直接丢弃该数据包;
#2表示开启松散的反向路径校验,对每个收到的数据包,校验其源地址是否可以到达,即反向路径是否可以ping通,如反向路径不通,则直接丢弃该数据包。

4)lo中的VIP之所以是32位的子网掩码,是因为配置的IP倘若与lo配置的IP处于同一个网段都会被当成lo的IP,从而不访问外网。架构图中在lo的VIP(10.0.0.100)如果是24位子网掩码那么则视10.0.0.10/24 10.0.0.20/24 10.0.0.30/24  都是lo的IP从而不访问外网、从而无法接收用户请求。(面试反问精选)
5)DIP与RIP必须在同一个网段、VIP可不与RIP处于同一个网段(跨网段),只需在路由接口上配置一个与VIP相同网段的IP即可 。
6)VS、RS在配置GW时都应使用eth0(真实网卡)进行GW的指向。指向与eth0(真实网卡)处于同一网段的路由器接口IP,因为架构图中VIP绑定的为lo网卡(虚拟网卡、最终还是依托真实网卡工作)。
7)-m 为NAT模式 -g 为DR模式,调度算法是LVS创建集群服务对集群服务指定(LVS负责调度)、工作模式是RS加入集群服务时针对RS来指定(RS负责工作)。
8)-p 设置持久化连接的时间(单位:sec  默认时间:360sec)。作用:在指定的时间内,用户的请求不会被调度到其他RS,以此保存session信息,一般配合轮询算法使用。
9)LVS存在SPOF、无法检测RS健康性问题(始终往LVS调度),后期可通过Keeplive、Nginx反向代理解决。(还未学到  就绪...)

posted on 2021-07-18 00:17  1251618589  阅读(4)  评论(0编辑  收藏  举报

导航