工作原理
- 客户端发送请求到 Director Server (负载均衡器),请求的数据报文(源IP是CIP,目标IP是VIP)到达内核空间
- Director Server 和 Real Server 在同一个网络中,数据通过二层数据链路层来传输
- 内核空间判断数据包的目标IP是本机IP,此时IPVS比对数据包请求的服务是否是集群服务,是集群服务就重新封装数据包。修改源 MAC 地址为 Director Server 的 MAC 地址,修改目标 MAC 地址为 Real Server 的 MAC 地址,源IP地址与目标IP地址没有改变,然后将数据包发送给 Real Server
- 到达 Real Server 的请求报文的 MAC 地址是自身的 MAC 地址,就接收此报文。数据包重新封装报文(源IP地址为VIP,目标IP 为CIP),将响应报文通过IO接口传送给物理网卡然后向外发出
- Real server 直接将响应报文传送到客户端
环境
| 主机信息 | 主机服务 |
|---|---|
| 192.168.2.200 | 虚拟IP(VIP) |
| 192.168.2.100 | lvs调度器(DS) |
| 192.168.2.111 | web服务器1(RS) |
| 192.168.2.112 | web服务器2(RS) |
一、lvs 调度器安装
1、安装ipvsadm工具
- # 安装
- yum install ipvsadm
-
- # 启动
- systemctl start ipvsadm
2、永久创建虚拟IP
- # 临时创建虚拟IP
- ifconfig ens33:0 192.168.2.200 netmask 255.255.255.0
-
-
- cd /etc/sysconfig/network-scripts/
- cp ifcfg-ens33 ifcfg-ens33:0
-
- # 修改NAME,DEVICE名称,删除UUID,DNS,网关
- vim ifcfg-ens33:0
-
- NAME=ens33:0
- DEVICE=ens33:0
- ONBOOT=yes
- IPADDR=192.168.2.200
- NETMASK=255.255.255.0
3、重启网络服务
systemctl restart network
4、调整 proc 响应参数
- # 对于 DR 群集模式来说,由于 LVS 负载调度器和各节点需要共用 VIP 地址
- # 需要关闭 ICMP 的重定向,不充当路由器
- cat <<EOF > /etc/sysctl.d/lvs-dr.conf
- net.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
- EOF
-
- # 动态加载ip_vs模块
- modprobe ip_vs
-
- # 刷新配置
- sysctl -p /etc/sysctl.d/lvs-dr.conf
5、配置策略
- # 清空策略
- ipvsadm -C
-
- -A: 添加虚拟服务器
- -a:添加节点
- -t:指定vip及tcp端口
- -s:指定算法
- rr:轮询
- -r:指定节点ip及端口
- -g:表示使用DR模式
- -w:设置权重
-
- ipvsadm -A -t 192.168.2.200:80 -s rr
- ipvsadm -a -t 192.168.2.200:80 -r 192.168.2.111:80 -g -w 1
- ipvsadm -a -t 192.168.2.200:80 -r 192.168.2.112:80 -g -w 1
-
- # 保存
- ipvsadm-save > /etc/sysconfig/ipvsadm
-
- # 查看策略
- ipvsadm -ln
二、Web 服务器安装(2台都要安装)
1、安装并启动 httpd
- yum install httpd -y
- systemctl start httpd
2、修改主页内容
- # 修改 web 服务器 1
- vim /var/www/html/index.html
- this is 192.168.2.111
-
- # 修改 web 服务器 2
- vim /var/www/html/index.html
- this is 192.168.2.112
3、添加回环网卡
- cd /etc/sysconfig/network-scripts/
- cp ifcfg-lo ifcfg-lo:0
-
- # 修改回环网卡名,IP地址,子网掩码
- vim ifcfg-lo:0
-
- DEVICE=lo:0
- IPADDR=192.168.2.200
- NETMASK=255.255.255.255
- NETWORK=127.0.0.0
- # If you're having problems with gated making 127.0.0.0/8 a martian,
- # you can change this to something else (255.255.255.255, for example)
- #BROADCAST=127.255.255.255
- ONBOOT=yes
- #NAME=loopback
-
- # 重启网络服务
- systemctl restart network
4、设置路由
- route add -host 192.168.2.200 dev lo:0
- route -n
-
- # 开机启动
- vim /etc/rc.d/rc.local
- /usr/sbin/route add -host 192.168.2.200 dev lo:0
-
- chmod +x /etc/rc.d/rc.local
5、调整 proc 响应参数
- # 系统只响应目的IP为本地IP的ARP请求
- # 系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址
-
- cat <<EOF > /etc/sysctl.d/lvs-dr.conf
- net.ipv4.conf.lo.arp_ignore = 1
- net.ipv4.conf.lo.arp_announce = 2
- net.ipv4.conf.all.arp_ignore = 1
- net.ipv4.conf.all.arp_announce = 2
- EOF
-
- # 刷新配置
- sysctl -p /etc/sysctl.d/lvs-dr.conf
6、访问

