※ 实验环境
(1)系统:centos7.9
(2)虚拟机:4台centos7.9,1台作为nfs共享服务器(NFS共享服务搭建步骤)
一、负载调度器配置
(1)关闭selinux、firewalld、NetworkManager
#关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
#关闭firewalld
systemctl stop firewalld && systemctl disable firewalld
#关闭NetworkManager
systemctl stop NetworkManager && systemctl disable NetworkManager
(2)配置主机IP
#1.创建一个子接口,用来模拟外部网卡
cp -r ifcfg-ens33 ifcfg-ens33:0
vim ifcfg-ens33:0 #修改子接口配置文件
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
DEVICE=ens33:0 #将网卡修改为子接口
ONBOOT=yes
IPADDR=10.10.10.100
NETMASK=255.255.255.0
●重启网卡查看IP是否生效
systemctl restart network
(3)修改系统内核文件,关闭广播功能
#在内核配置文件中添加参数关闭所有网卡广播功能
#0 表示禁用发送重定向,禁用发送重定向可以防止ARP欺骗和IP欺骗
vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0 #所有网卡的
net.ipv4.conf.default.send_redirects = 0 #默然网卡的
net.ipv4.conf.ens33.send_redirects = 0 #ens33网卡的(根据需要修改为真实网卡即可)
#添加完毕后,刷新内核参数使其生效
sysctl -p #刷新内核参数
(4)安装ipvsadm
· 标准镜像中使用yum直接安装
yum install ipvsadm -y
modprobe ip_vs #将ipvsadm加载到内核中来
二、配置web服务器
(1)关闭selinux、firewalld、NetworkManager
#关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
#关闭firewalld
systemctl stop firewalld && systemctl disable firewalld
#关闭NetworkManager
systemctl stop NetworkManager && systemctl disable NetworkManager
(2)这里采用httpd服务,用来模拟web服务器
· 注意:在生产环境中网页内容是一致的,这里做实验为了看效果所以内容不同。
http-1服务器配置:
#安装httpd服务
yum install httpd -y
#启动服务
service httpd start
#写入一个网页文件用来测试
echo "this is one web!" >/var/www/html/index.html
http-2服务器配置:
#安装httpd服务
yum install httpd -y
#启动服务
service httpd start
#写入一个网页文件用来测试
echo "this is two web!" >/var/www/html/index.html
(3)拷贝一个回环网卡子接口,设置IP为负载调度器的虚拟IP,作为标识
将回环接口子接口的IP地址设置为负载调度器的虚拟IP地址是为了确保回送数据包(由后端服务器返回给客户端的响应)通过负载调度器而不是直接发送到网络上。这样,负载调度器可以继续处理负载均衡算法并将响应发送到适当的客户端。
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
(4)配置arp通讯行为
#配置内核文件,控制arp行为
arp-ignore
# 0 只要本机配置有相应IP地址就响应;
# 1 仅在请求的目标地址配置在请求到达网络接口上时,才给予响应;
arp-announce
# 0 将本机任何网络接口上的任何地址都向外通告;
# 1 尽可能避免向目标网络通告与其网络不匹配的地址信息表;
# 2 仅向目标网络通告与其网络相匹配的地址信息。
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
(4)为了解决无法回信问题添加一条主机路由
#所有发送到 10.10.10.100 的数据包将通过本地回环接口发送
route add -host 10.10.10.100 dev lo:0
#为了防止重启失效,将此路由添加至开机自启
echo "route add -host 10.10.10.100 dev lo:0" >>/etc/rc.local
注:web2服务器配置与web1一致,这里不再赘述。
三、添加ipvsadm规则
# -A表示添加一个集群,-a表示添加集群中的子节点,
# -t表示tcp协议,-s指定算法,rr表示轮巡(默认60秒切换一次),-r指定后端真实web服务器,
# -g启用IPVS的网关模式(DR模式)
ipvsadm -A -t 集群IP:80 -s rr
ipvsadm -a -t 集群IP:80 -r web1:80 -g
ipvsadm -a -t 集群IP:80 -r web2:80 -g
(1)保存ipvs规则,使其重启不会丢失
# -S将当前IPVS规则保存到root目录下的ipvsweb文件内
ipvsadm -S > /root/ipvsweb
# -R从指定文件中加载IPVS规则
ipvsadm -R < /root/ipvsweb