1 LVS-DR 集群
LVS-DR (Linux Virtual Server Director Server ) 工作模式, 是生产环境中最常用的一种工作模式
1.1:LVS-DR工作原理
LVS-DR 模式, Director Server 作为群集的访问入口, 不作为网关使用, 节点Director Server 与Real Server 需要在同一个网络中, 返回给客户端的数据不需要经过Director Server。为了响应对整个群集的访问, Director Server与Real Server 都需要配置VIP 地址,工作原理如下图所示。
1.2:数据包流向分析
1. 客户端发送请求到Director Server请求的数据报文(源IP 是CIP,目标IP 是VIP )到达内核空间
2. Director Server和Real Server在同一个网络中,数据通过二层数据链路层来传输。
3. 内核空间判断数据包的目标IP 是本机VIP , 此时IPVS 比对数据包请求的服务是否是集群服务, 是集群服务就重新封装数据包。修改源MAC 地址为Director Server 的MAC地址, 修改目标MAC 地址为Real Server 的MAC 地址, 源IP 地址与目标IP 地址没有改变, 然后将数据包发送给Real Server 。
4. 到达Real Server 的请求报文的MAC 地址是自身的MAC 地址, 就接收此报文。数据包重新封装报文(源IP 地址为VIP, 目标IP 为CIP), 将响应报文通过lo 接口传送给物理网卡然后向外发出。
1.3 LVS-DR模式的特点
- Director Server 和Real Server 必须在同一个物理网络中。
- Real Server 可以使用私有地址, 也可以使用公网地址。如果使用公网地址,可以通过互联网对RIP 进行直接访问。
- 所有的请求报文经由Director Server, 但回复响应报文不能经过Director Server 。
- Real Server 的网关不允许指向Di「ecto「Server IP , 即不允许数据包经过Director Server 。
- Real Server 上的lo 接口配置VIP 的IP 地址。
2 案例分析
在DR 模式的群集中, LVS 负载调度器作为群集的访问入口, 但不作为网关使用;服务器池中的所有节点都各自接入Internet, 发送给客户机的Web 响应数据包不需要经过LVS 负载调度器, 如下图所示。
这种方式入站、出站访问数据被分别处理, 因此LVS 负载调度器和所有的节点服务器都需要配置VIP 地址,以便响应对整个群集的访问。考虑到数据存储的安全性, 共享存储设备会放在内部的专用网络中。
2.1 配置负载调度器
1 . 配置虚拟IP 地址( VIP )
采用虚接口的方式(ens33: 0 ) , 为网卡ens33 绑定VIP 地址, 以便响应群集访问。配置结果为ens33 172. 16. 16. 173/24、ens33: O 1 72. 16. 16. 172/24 。
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0
[root@localhost network-scripts]# vi ifcfg-ens33:0
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.10.172
NETMASK=255.255.255.0
[root@localhost network-scripts]# systemctl restart network
2 .调整proc 响应参数
对于DR 群集模式来说,由千LVS 负载调度器和各节点需要共用VI P 地址, 应该关闭Linux 内核的重定向参数响应。
[root@localhost ~]# vi /etc/sysctl.conf
在末尾添加:
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@localhost ~]# sysctl -p
3. 配置负载分配策略
配置负载分配策略的命令如下:
[root@localhost ~]#yum -y install ipvsadm
[root@localhost ~]#ipvsadm -v \\查看版本
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]#ipvsadm -C
[root@localhost ~]# ipvsadm -A -t 192.168.10.172:80 -s rr
[root@localhost ~]# ipvsadm -a -t 192.168.10.172:80 -r 192.168.10.102 -g -w 1
[root@localhost ~]# ipvsadm -a -t 192.168.10.172:80 -r 192.168.10.103 -g -w 1
[root@localhost ~]# ipvsadm-save
-A -t localhost.localdomain:http -s rr
-a -t localhost.localdomain:http -r 192.168.10.102:http -g -w 1
-a -t localhost.localdomain:http -r 192.168.10.103:http -g -w 1
[root@localhost ~]# systemctl enable ipvsadm
2.2 配置WEB节点服务器
使用DR 模式时, 节点服务器也需要配置VIP 地址, 并调整内核的ARP 响应参数以阻止更新VI P 的MAC 地址, 避免发生冲突。除此以外, Web 服务的配置与NAT 方式类似。
1 配置虚拟IP 地址( VIP ) 。
在每个节点服务器, 同样需要具有VI P 地址172. 16 .16 . 172, 但此地址仅用作发送Web响应数据包的源地址, 并不需要监听客户机的访问请求(改由调度器监听并分发)。因此使用虚接口1 0: 0 来承载VIP 地址, 并为本机添加一条路山记录, 将访问VIP 的数据限制在本地, 以避免通信紊乱
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]#cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vi ifcfg-lo:0
修改
DEVICE=lo:0
NETMASK=255.255.255.255 \\子网掩码必须为255.255.255.255
IPADDR=192.168.10.172
ONBOOT=yes
[root@localhost network-scripts]# systemctl restart network
[root@localhost network-scripts]# ifconfig
[root@localhost network-scripts]# cd
[root@localhost ~]# vi /etc/rc.local
添加
/sbin/route add -host 192.168.10.172 dev lo:0
[root@localhost ~]# route add -host 192.168.10.172 dev lo:0
2 调整proc 响应参数。
调整proc 响应参数的命令如下:
[root@localhost ~]# vi /etc/sysctl.conf
添加:
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
[root@localhost ~]# sysctl -p
>>>arp_ignore =1
当收到arp请求时,只有ARP请求数据包所请求的IP地址属于当前网卡的IP地址,才会回应ARP响应数据包。
>>>arp_announce = 2
当发送arp请求时,忽略IP数据包的源IP地址,总是选择网卡所配置的首选IP地址作为ARP请求数据包的发送方IP地址
目的:因为lo:0的ip地址和调度器的ens33:0的ip地址是一样的,为了不造成ip冲突,要禁止更新VIP的mac地址。
3 安装httpd , 创建测试网页。
安装httpd , 创建测试网页
4 . 启用httpd 服务程序。
2.3 测试LVS群集
安排多台测试机,从Internet 中直接访问http:/11 72 . 1 6 . 16 . 1 72/, 将能够看到由真实服务器提供的网页内容。如果各节点的网页不同,则不同客户机看到的网页可能也不一样( 可以多刷新几次)。
在LVS 负载调度器中,通过查看节点状态可以观察当前的负载分配情况,对于轮询算法来说, 每个节点所获得的连接负载应大致相当。