1 实验背景
1)系统版本:centos7.8
2)虚拟机:3个centos虚拟机,(其中一个做Director Server,另外两个做Real Server)
3) LVS大致有NAT ,DR ,Tun这三种模式,这里搭建一个典型的DR模式的LVS
Direct Server 的ip是 192.168.121.100
两台Real Server的ip分别是 192.168.121.101 、192.168.121.102
vip是 192.168.121.250
这三个虚拟机的子网掩码是 255.255.255.0
2 Director Server 网络配置
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)配置Real Server的虚拟IP
创建一个虚拟网络接口的配置文件
vim /etc/sysconfig/network-scripts/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=192.168.121.250
NETMASK=255.255.255.0
重启网络,查看是否有这个虚拟网络接口
systemctl restart network
ifconfig | grep ens33:0
3)修改系统内核文件,关闭广播功能
编辑内核配置文件
vim /etc/sysctl.conf
在内核配置文件中添加参数关闭所有网卡广播功能
0 表示禁用发送重定向,禁用发送重定向可以防止网络攻击,如 ARP 欺骗和 IP 欺骗
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加载到内核中来
3 安装Web服务器
使用yum分别在两台Real Server上安装nginx
#我们在Centos下使用yum安装时往往找不到rpm的情况,官方的rpm repository提供的rpm包也不够丰富,
#很多时候需要自己编译很痛苦,而EPEL恰恰可以解决这两方面的问题
yum -y install epel-release
#更新yum源
yum -y update
#安装nginx
yum install -y nginx
# 将两台虚拟机中的nginx主页中的"Welcome to CentOS"
#分别改为"Welcome to CentOS (worker1)" 、 "Welcome to CentOS (worker2)"
vim /usr/share/nginx/html/index.html
# 重启nginx
systemctl start nginx
4 配置Real Server的虚拟网络
在两台Real Server上分别创建一个虚拟的环回网络端口配置文件
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
然后在ifcfg-lo:0写入一下内容
DEVICE=lo:0
IPADDR=192.168.121.250
NETMASK=255.255.255.255
BROADCAST=192.168.121.250
ONBOOT=yes
此时重启网络时虚拟环回地址是无法回信的,需要添加一条主机路由
#所有发送到 192.168.121.250 的数据包将通过本地回环接口发送
route add -host 192.168.121.250 dev lo:0
#为了防止重启失效,将此路由添加至开机自启
echo "route add -host 192.168.121.250 dev lo:0" >> /etc/rc.local
然后重启网络,尝试ping 命令是否有回信
systemctl restart network
ifconfig | grep lo:0
ping 192.168.121.250
5 配置内核文件 控制Real Server的arp通讯行为
#arp-ignore
# 0 只要本机配置有相应IP地址就响应;
# 1 仅在请求的目标地址配置在请求到达网络接口上时,才给予响应;
#arp-announce
# 0 将本机任何网络接口上的任何地址都向外通告;
# 1 尽可能避免向目标网络通告与其网络不匹配的地址信息表;
# 2 仅向目标网络通告与其网络相匹配的地址信息。
在 配置文件/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
6 Director Server添加ipvsadm规则
1)使用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
ipvsadm -A -t 192.168.121.250:80 -s rr
ipvsadm -a -t 192.168.121.250:80 -r 192.168.121.101:80 -g
ipvsadm -a -t 192.168.121.250:80 -r 192.168.121.102:80 -g
2)修改文件,保证重启后ipvsadm 规则不丢失
修改配置文件ipvsadm-config
vim /etc/sysconfig/ipvsadm-config
# IPVSADM_SAVE_ON_STOP 表示ipvsadm停止时,是否自动保存ipvsadm规则
# IPVSADM_SAVE_ON_STOP 表示ipvsadm重启时,是否自动保存ipvsadm规则
# 这两个参数,默认值都是'no',这里需要改成'yes'
IPVSADM_SAVE_ON_STOP="yes"
IPVSADM_SAVE_ON_RESTART="yes"
7、功能测试
查看配置是否生效
ipvsadm -L --stats
在宿主机浏览器打开 http://192.168.121.250/ ,反复刷新可以看到 ‘Welcome to CentOS (worker2)’ ’Welcome to CentOS (worker1)‘ 字样交替出现