共计 5187 个字符,预计需要花费 13 分钟才能阅读完成。
实现 LVS 的 DR 模式
LVS 的 DR 模式的原理详细介绍请看 LVS 负载均衡之 LVS-NAT 与 LVS-DR 模式原理详解这篇文章。
一. 实验环境
三台机器:
-
Director 节点:(ens33 192.168.10.53 vip ens33:0 192.168.10.80)
-
Real server1:(ens33 192.168.10.51 vip lo:0 192.168.10.80)
- Real server2:(ens33 192.168.10.52 vip lo:0 192.168.10.80)
二. 安装和配置
1. 配置两个 real server 服务器
(1)配置虚拟 IP 地址(VIP)
VIP 地址仅用作发送 Web 响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器 Director 监听并分发)。因此使用虚接口 lo:0 来承载 VIP 地址。
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.10.80
NETMASK=255.255.255.255 # 子网掩码必须全为 1
ONBOOT=yes 1
ifup lo:0 # 开启虚拟接口
(2)安装 httpd,创建测试网页
# 安装 httpd
yum install httpd -y
#real server1 创建测试网页
echo "Server 192.168.10.51" > /var/www/html/index.html
#real server2 创建测试网页
echo "Server 192.168.10.52" > /var/www/html/index.html
(3)启动 httpd 服务,关闭防火墙和安全性策略
# 启动 httpd 服务
systemctl start httpd.service
systemctl enable httpd.service
# 关闭防火墙和安全性策略
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
(4)在两台 real server 上配置启动脚本
vim /etc/init.d/rs.sh
#!/bin/bash
VIP=192.168.10.80
case "$1" in
start)
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $VIP dev lo:0 # 为本机添加一条路由记录
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del $VIP /dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stopd"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
这里需要注意的是避免 ARP 通信紊乱,解决方案是:修改 RS 上内核参数(arp_ignore 和 arp_announce)将 RS 上的 VIP 配置在 lo 接口的别名上,并限制其不能响应对 VIP 地址解析请求。
-
arp_ignore= 1 表示系统只响应目的 IP 为本地 IP 的 ARP 请求。
- arp_announce= 2 表示系统不使用 IP 包的源地址来设置 ARP 请求的源地址,而选择发送接口的 IP 地址。
(5)运行启动脚本chmod +x rs.sh service rs.sh start
最后在本机上自测访问网站服务
2. 配置 Director server 服务器
(1)配置虚拟 IP 地址,以便响应群集访问
cd /etc/sysconfig/network-scripts/ cp ifcfg-ens33 ifcfg-ens33:0 vim ifcfg-ens33:0 DEVICE=ens33:0 ONBOOT=yes IPADDR=192.168.10.80 NETMASK=255.255.255.0 ifup ens33:0
(2)安装 ipvsadm 管理工具yum install ipvsadm -y
(3)开启路由功能
vim /etc/sysctl.conf net.ipv4.ip_forward=1 sysctl -p # 保存
(4)调整 /proc 响应参数,关闭 Linux 内核重定向参数响应
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 sysctl -p # 保存
(5)配置 Director 启动脚本
vim /etc/init.d/dr.sh #!/bin/bash GW=192.168.10.1 VIP=192.168.10.80 RIP1=192.168.10.51 RIP2=192.168.10.52 case "$1" in start) /sbin/ipvsadm --save > /etc/sysconfig/ipvsadm systemctl start ipvsadm /sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up /sbin/route add -host $VIP dev ens33:0 /sbin/ipvsadm -A -t $VIP:80 -s rr /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g echo "ipvsadm starting --------------------[ok]" ;; stop) /sbin/ipvsadm -C systemctl stop ipvsadm ifconfig ens33:0 down route del $VIP echo "ipvsamd stoped----------------------[ok]" ;; status) if [! -e /var/lock/subsys/ipvsadm ];then echo "ipvsadm stoped---------------" exit 1 else echo "ipvsamd Runing ---------[ok]" fi ;; *) echo "Usage: $0 {start|stop|status}" exit 1 esac exit 0
(6)启动脚本,添加两个 Real Server 节点服务器
chmod +x /etc/init.d/dr.sh service dr.sh start
(7)关闭防火墙和安全策略
systemctl stop firewalld.service systemctl disable firewalld.service setenforce 0
三. 测试 LVS 群集
用 Windows 客户端直接访问 http://192.168.10.80/,将能够看到由真实服务器提供的网页内容。
第一次访问:
Real Server 连接次数查看:
刷新一次:
Real Server 连接次数查看:
-
LVS 结合 keepalive
1. 高可用群集(High Availability Cluster):以提高应用系统的可靠性、尽可能的减少中断时间为目标,确保服务的连续性,达到高可用(HA)容错效果。
2.LVS 可以实现负载均衡,但是不能够故障切换和健康检查,也就是当一个 rs 服务器出现故障时,LVS 仍然会把请求转发给故障的 rs 服务器,这样就会导致请求无效。keepalive 软件可以解决 LVS 单点故障的问题, 能同时实现 LVS 的高可用性。这里以 LVS-DR 模式为例。
一. 实验环境
上述的 LVS-DR 搭建好 web 群集后,再添加一台备用的 Director Server 服务器,其配置同上。
四台机器:
- Keepalived1 + lvs1(Director1):192.168.10.53(主)
- Keepalived2 + lvs2(Director2):192.168.10.54(从)
- Real server1:192.168.10.51
- Real server2:192.168.10.52
- VIP: 192.168.10.80
二. 安装配置
在两个 Director Server 节点服务器部署 keepalived 服务。
(1)安装 keepalive 软件
yum install keepalived -y
(2)主 keepalived 节点配置(lvs1)
# 主节点 (MASTER) 配置文件
vim /etc/keepalived/keepalived.conf
global_defs {... # 省略部分
smtp_server 127.0.0.1 # 指向本地
router_id LVS_01 # 指定名称, 备份服务器不同名称
... # 省略部分
}
vrrp_instance VI_1 {# 定义 VRRP 热备实例
state MASTER #MASTER 表示主调度器
interface ens33 # 承载 VIP 地址的物理接口
virtual_router_id 51 # 虚拟路由器的 ID 号,每个热备组保持一致
priority 100 # 主调度器优先级
advert_int 1 # 通告间隔秒数
authentication {# 认证信息
auth_type PASS # 认证类型
auth_pass 1111 # 字码密串
}
virtual_ipaddress {# 指定群集 VIP 地址,也就是漂移地址
192.168.10.80
}
}
virtual_server 192.168.10.80 80 {# 虚拟服务器 VIP 地址
delay_loop 6 # 健康检查的间隔时间
lb_algo rr # 轮询 rr 的调度算法
lb_kind DR # 直接路由工作模式
persistence_timeout 0 # 连接保持时间
protocol TCP # 应用服务采用的是 TCP 协议
real_server 192.168.10.51 80 {# 第一个 web 节点的服务器地址、端口
weight 1
TCP_CHECK {connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.10.52 80 {# 第二个 web 节点的服务器地址、端口
router_id LVS_01 weight 1
TCP_CHECK {connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
(3)从 keepalived 节点配置(lvs2)
拷贝主节点的配置文件 keepalived.conf,然后修改如下内容:
router_id LV -> router_id LVS_02 # 从调度器名称
state MASTER -> state BACKUP # 从调度器
priority 100 -> priority 90 # 从调度器优先级
(4)启动 keepalive
# 先主后从分别启动 keepalive
systemctl start keepalived
三. 测试 keepalived 的 HA 特性
(1)虚拟 IP 地址漂移
首先在 master(lvs1)上执行命令 ip addr,可以看到 vip 在 master 节点上的;
这时如果在 master 上执行 systemctl stop keepalived 命令,这时 vip 已经不在 master 上,在 slave 节点上执行 ip addr 命令可以看到 vip 已经正确漂到 slave 节点。
这时客户端去访问 http://192.168.10.80 访问依然正常。
(2)连通性
在客户机执行“ping 192.168.10.80 -t”, 能够正常 ping 通。
禁用 master(lvs1)的 ens33 网卡,发现还是能正常 ping 通。
(3)web 访问测试
禁用 master(lvs1)的 ens33 网卡,再次访问上述 web 服务,网页文档显示正常。