1,LVS群集是针对Linux内核开发的一个负载均衡项目,基于IP地址虚拟化应用VIP,为基于IP地址和内容请求分发的负载均衡提出了一种高效的解决办法。可使用ipvsadm管理工具。通过整合多台相对廉价的普通服务器,以同一个地址对外提供相同的服务。
2,负载均衡的直接路由工作模式。简称DR工作模式,负载调度器仅作为客户机的访问入口,各节点服务器与调度器位于同一个物理网络,节点服务器直接回应客户机的请求,而不再经过负载调度器。
3,Keepalived是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换(Failover)和健康检查(Health Checking)功能--判断LVS负载调度器,节点服务器的可用性,及时隔离并替换为新的服务器,当故障主机恢复后将其重新加入集群。
实验部署简单拓扑:
服务器配置;
服务器主机 共同VIP 192.168.30.111 安装软件包
LVS1主调度器 IP 192.168.30.77 keepalived ,ipvsadm
LVS2从服务器 IP 192.168.30.55 keepalived , ipvsadm
节点服务器WEB1 IP 192.168.30.15 httpd
节点服务器WEB2 IP 192.168.30.99 httpd
客户机 IP 192.168.30.100 测试使用
LVS调度服务器配置
主从服务器配置基本相同(不同之处下面进行标注)
(1)配置虚拟ip地址,采用虚接口的方式(ens33:0),为网卡ens33绑定VIP地址,以便相应群集访问。
cp ifcfg-ens33 ifcfg-ens33:0
vim ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.30.111
NETMASK=255.255.255.0ifup ens33:0 #启用虚拟ip
(2)调整/proc相应参数,对于DR群集模式来说,由于LVS负载调度器和各节点需要共用VIP地址,应该关闭Linux内核的重定向参数响应
vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0sysctl -p #刷新内核参数
(3)配置LVS负载均衡,
yum install keepalived ipvsadm -y #使用yum安装必要的软件包
编写脚本方便管理
cd /etc/init.d/
vim dr.sh
#!/bin/bash
GW=192.168.30.1
VIP=192.168.30.111
RIP1=192.168.30.15
RIP2=192.168.30.99
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 ##添加本机路由记录,将访问VIP的数据限制在本地,避免通信紊乱
/sbin/ipvsadm -A -t $VIP:80 -s rr #设置LVS,采用rr轮询算法
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g #添加节点服务器web1,采用DR模式
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g # 添加节点服务器web2,采用DR模式
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 0chmod +x dr.sh
service dr.sh start
(4)在调度服务器上keepalived的设置部署
cd /etc/keepalived/
vim keepalived.conf
global_defs {
...
smtp_server 127.0.0.1 #指向本地
router_id LVS_01 #指定名称,备份服务器不同名称,设为LVS_02
...
}vrrp_instance VI_1 {
state MASTER #备份服务器是BACKUP
virtual_router_id 10 #组号相同
...
auth_pass abc123 #验证密码
priority 100 #优先级备份小于主服务器
...
virtual_ipaddress {
192.168.30.111 #指定VIP地址
}
...
virtual_server 192.168.30.111 80 {lb_kind DR #指定DR模式
...
real_server 192.168.30.15 80 { #节点服务器web1 地址 端口
weight 1
TCP_CHECK { #TCP检查方式
connect_port 80 #添加端口
connect_timeout 3 #连接超时
nb_get_retry 3 #重试次数
delay_before_retry 3 #重试间隔秒数
}
}
real_server 192.168.30.99 80 { #节点服务器web2 地址 端口
weight 1
TCP_CHECK {
connect_port 80connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}systemctl start keepalived #开启keepalived服务
节点服务器配置
两个节点服务器配置基本相同(个别不同之处会在下面标注)
(1)配置虚拟VIP,在每个节点服务器,同样需要具有VIP地址192.168.30.111 但此地址仅用作发送web响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发)。因此使用虚接口lo:0来承载VIP地址。
cd /etc/sysconfig/network-scripts
cp ifcfg-lo ifcfg-lo:0vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.30.111
NETMASK=255.255.255.0
ONBOOT=yesifup ifcfg-lo:0
(2)安装httpd提供web服务,并关闭防火墙,selinux功能,创建测试页面
yum -y install httpd
service httpd start
service iptables stop
setenforce 0
两个节点服务器测试页面不同
echo "<h1>this is benet web</h1>">/var/www/html/index.html #创建节点服务器web1的测试页面
echo "<h1>this is accp web</h1>">/var/www/html/index.html #创建节点服务器web2的测试页面
(3)编辑一个服务脚本方便管理
cd /etc/init.d/
vim web.sh#!/bin/bash
VIP=192.168.30.111
case "$1" in
start)
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $VIP dev lo:0 #添加本机路由记录,将访问VIP的数据限制在本地,避免通信紊乱
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce #调整/proc响应参数
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 0chmod +x web.sh
service web.sh startfirefox "http://127.0.0.1/" & #在本机浏览器检验能否看到测试页面
service web.sh stop
service web.sh start(建议重启服务)