一、LVS 简介
LVS的三种工作模式
- NAT 地址转换
调度器会作为所有节点服务器的默认网关,也是客户端的访问入口和节点服务器返回响应消息的出口,所以调度器会承载双向流量的负载压力,可能会为整个群集的性能瓶颈。由于节点服务器都会处于内网环境,使用私网IP,所以具有一点的安全行。
- TUN IP隧道 IP Tunnel
调度器仅作为客户端的访问入口,节点服务器的响应消息是直接返回客户端的,不需要经过调度器。但是由于节点服务器需要部署在不同的公网环境,所以要有独立的公网IP,而且调度器与节点服务器是通过专用的IP隧道实现相互通信,因此IP隧道模式的成本较高、安全性较低,且数据IP隧道传输的过程中需要额外的封装和解封装,性能也会受到一定的影响。
- DR 直接路由 Direct Routing
调度器仅作为客户端的访问入口,节点服务器的响应消息是直接返回客户端的,不需要经过调度器。(与NAT模式的区别)
节点服务器与调度器是部署在同一个物理网络里,因此不需要建议专用的IP隧道。(与IP隧道模式的区别)
DR模式是企业首选的LVS模式。
LVS调度算法
rr(轮询) wrr(加权轮询) sh(源地址哈希) dh(目的地址哈希) lc(最小连接)
wlc(加权最小连接):优先分配请求给 <连接数>/<权重值> 的值最小的节点服务器
lblc(基于地址的最小连接):优先根据目的地址哈希将请求分配给同一个节点服务器,若此节点服务器满负荷了则优先将请求分配当前连接数最小的节点服务器
LVS-DR模式工作过程:
- 客户端通过VIP将访问请求报文(源IP为客户端IP,目的IP为VIP)发送到调度器
- 调度器通过调度算法选择最适合的节点服务器,并重新封装数据报文(将源MAC改为调度器的MAC,目的MAC改为节点服务器的MAC地址),再通过交换机转发请求给节点服务器
- 节点服务器收到请求报文后,确认目的MAC和目的IP无误后解包并送到应用层进行处理
- 节点服务器在返回响应报文前,会先重新封装报文(源IP为VIP,目的为客户端IP),再将响应报文先通过lo接口传送给物理网卡,再通过物理网卡发送给客户端
LVS-DR模式部署:
- 部署NFS共享存储
- 部署Web节点服务器,在lo:0接口配置VIP,修改内核参数arp_ignore=1、arp_announce=2,添加路由route add -host <VIP> dev lo:0
- 部署调度器,在ensXX:0接口配置VIP,修改内核参数关闭IP路由转发和ICMP重定向功能ip_forward=0、send_redirects=0,安装ipvsadm工具,添加虚拟服务器和真实服务器的相关配置,使用-g选项选择DR模式
- 客户端访问VIP测试
注:如果需要跨网段通信,调度器和节点服务器的默认网关要指向路由器的网关接口地址
二、DR模式部署
服务器部署:7-1 调度服务器;7-2和7-3 节点服务器;7-4 客户端
1. 配置 7-1 调度服务器
1.1 配置虚拟ip地址
临时配置:
[root@localhost ~]#ifconfig ens33:0 172.168.1.100/32永久配置:
[root@localhost network-scripts]#cp ifcfg-ens33 ifcfg-ens33:0
#配置虚拟网卡,若为隧道模式ifcfg-tunl0
[root@localhost network-scripts]#vim ifcfg-ens33:0
#删除dns与网关,注意子网NAME=ens33:0
DEVICE=ens33:0
IPADDR=172.168.1.100
NETMASK=255.255.255.255[root@localhost network-scripts]#systemctl restart network
[root@localhost network-scripts]#ifup ifcfg-ens33:0
#启动网卡
1.2 调整/proc响应参数
[root@localhost ~]# vim /etc/sysctl.confnet.ipv4.ip_forward = 0
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
1.3 加载模块
#配置负载分配策略
[root@localhost ~]# modprobe ip_vs
[root@localhost ~]# cat /proc/net/ip_vs
#加载模块
[root@localhost ~] yum install ipvsadm.x86_64 -y
[root@localhost ~]# ipvsadm-save >/etc/sysconfig/ipvsadm
[root@localhost ~]# systemctl start ipvsadm.service
[root@localhost ~]# ipvsadm -A -t 172.168.1.100:80 -s rr
[root@localhost ~]#
[root@localhost ~]# ipvsadm -a -t 172.168.1.100:80 -r 172.168.1.12 -g
[root@localhost ~]# ipvsadm -a -t 172.168.1.100:80 -r 172.168.1.13 -g
[root@localhost ~]#
[root@localhost ~]# ipvsadm -ln
2. 配置 7-2 节点服务器
2.1 安装 httpd 服务
[root@localhost ~]# yum install httpd -y
[root@localhost ~]# systemctl start httpd
2.2 添加回环地址
[root@localhost ~]# ifconfig lo:0 172.168.1.100/32
[root@localhost ~]# ip a
2.3 配置网页
[root@localhost ~]# cd /var/www/html
[root@localhost html]# echo 7-2 > index.html
[root@localhost html]# cat index.html
7-2
[root@localhost network-scripts]# vim /etc/sysctl.conf
#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
[root@localhost network-scripts]# sysctl -p
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 = 20 - 默认值
1 - 开启
2 - 关闭
3. 配置 7-3 节点服务器
2.1 安装 httpd 服务
[root@localhost ~]# yum install httpd -y
[root@localhost ~]# systemctl start httpd
2.2 添加回环地址
[root@localhost ~]# ifconfig lo:0 172.168.1.100/32
[root@localhost ~]# ip a
2.3 配置网页
[root@localhost ~]# cd /var/www/html
[root@localhost html]# echo 7-3 > index.html
[root@localhost html]# cat index.html
7-3
[root@localhost network-scripts]# vim /etc/sysctl.conf [root@localhost network-scripts]# sysctl -p
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