LVS负载均衡之三:LVS
[*]
实现LVS的DR模式
LVS的DR模式的原理详细介绍请看LVS负载均衡之一:LVS-NAT、LVS-DR模式的原理详细介绍这篇博文。
一. 实验环境
三台机器:
[*] Director节点:(ens33 192.168.10.53vip 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 #开启虚拟接口
http://i2.运维网.com/images/blog/201806/28/a0c87ba5a0ae65156c4627b04094d783.png
(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 stopfirewalld.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
最后在本机上自测访问网站服务
http://i2.运维网.com/images/blog/201806/28/049d1e9c576ec10f8222726967f7f106.png
http://i2.运维网.com/images/blog/201806/28/d45ab7f9ab3a02e78b1f9f4eaa90394a.png
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
http://i2.运维网.com/images/blog/201806/28/d626189e5ff6cc9c9da6bf4c9e9d81a4.png
(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 --------------------"
;;
stop)
/sbin/ipvsadm -C
systemctl stop ipvsadm
ifconfig ens33:0 down
route del $VIP
echo "ipvsamd stoped----------------------"
;;
status)
if [ ! -e /var/lock/subsys/ipvsadm ];then
echo "ipvsadm stoped---------------"
exit 1
else
echo "ipvsamd Runing ---------"
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/, 将能够看到由真实服务器提供的网页内容。
第一次访问:
http://i2.运维网.com/images/blog/201806/28/963d15be737f061f068fd7a3fbc7a3b9.png
Real Server连接次数查看:
http://i2.运维网.com/images/blog/201806/28/3349fd135875260738c38ed81822d920.png
刷新一次:
http://i2.运维网.com/images/blog/201806/28/ab2a27f9913bb883153f945ef16c7054.png
Real Server连接次数查看:
http://i2.运维网.com/images/blog/201806/28/32688859853e3cba7f49b8b8f0e11e90.png
[*]
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节点上的;
http://i2.运维网.com/images/blog/201806/28/a71d1ada545ed63ce5ee1bbe64190614.png
这时如果在master上执行 systemctl stop keepalived 命令,这时vip已经不在master上,在slave节点上执行 ip addr 命令可以看到 vip 已经正确漂到slave节点。
http://i2.运维网.com/images/blog/201806/28/a9e35a74d7f877b8eb26e2d513dc0fe7.png
这时客户端去访问 http://192.168.10.80 访问依然正常。
http://i2.运维网.com/images/blog/201806/28/ef357246bb87d48a6738b2e627fcf0e4.png
(2)连通性
在客户机执行“ping 192.168.10.80 -t”,能够正常ping通。
禁用master(lvs1)的ens33网卡,发现还是能正常ping通。
http://i2.运维网.com/images/blog/201806/28/2a623778f206817a41b4d546ac902949.png
http://i2.运维网.com/images/blog/201806/28/58047edb0f67709caf55f0cd6e19e88c.png
(3)web访问测试
禁用master(lvs1)的ens33网卡,再次访问上述web服务,网页文档显示正常。
http://i2.运维网.com/images/blog/201806/28/f505298ec6124408300e95a1cd2a0593.png
http://i2.运维网.com/images/blog/201806/28/63669c23b33e032274356337bc2d819e.png
http://i2.运维网.com/images/blog/201806/28/34ab5001be8b1557ac5f8fb32303d41e.png
页:
[1]