一.Keepalived概述
- Keepalived是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换和健康检查,来判断LVS负载调度器、节点服务器的可用性,及时隔离并且替换为新的服务器,当故障主机恢复后将其重新加入群集
- Keepalived的官方网站位于http://www.keepalived.org/,在非LVS的群集环境中使用时,Keepalived也可以作为热备软件使用
二.Keepalived的热备方式
- Keepalived采用VRRP(虚拟路由冗余协议)热备份协议,以软件的方式实现Linux服务器的多机热备功能。
- VRRP是针对路由器的一种备份解决方案——由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务,每个热备组内同一时刻只有一台主路由器提供服务,其他路由器处于冗余状态,如果当前在线的路由器失效,则其他路由器会自动接替(优先级决定接替顺序)虚拟IP地址,以继续提供服务(前文提供了VRRP协议的博客详解)
- 热备组内的每台路由器都可能成为主路由器,虚拟路由器的IP地址(VIP)可以在热备组内的路由器之间进行转移,所以也称为漂移IP地址。
- 此外,使用Keepalived时,漂移地址的实现不需要手动建立虚接口配置文件,而是由Keepalived根据配置文件自动管理
实验案例说明:
1.两台LVS负载均衡服务器,调度两台WEB服务器
2.两台LVS服务器同时配置Keepalived,实现负载均衡和双机热备
3.客户端主机能够通过虚拟ip地址,访问到后台的 Web服务器的网页
4.实验结果验证:其中一台 DR 宕机,访问正常进行,所有服务照常运行
角色 | IP |
LVS服务器1(主) | 192.168.100.100 |
LVS服务器2(备) | 192.168.100.101 |
WEB服务器1 | 192.168.100.200 |
WEB服务器2 | 192.168.100.201 |
虚拟IP(VIP) | 192.168.100.10 |
一.配置两台LVS服务(DR模式)
配置第一台LVS服务:
- 安装 ipvsadm 和 keepalived 包
yum install ipvsadm keepalived -y
- LVS服务器1配置,开启路由转发功能
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
#proc响应关闭重定向功能
net.ipve.conf.all.send_redirects = 0
net.ipve.conf.default.send_redirects = 0
net.ipve.conf.ens33.send_redirects = 0
- 重启功能
sysctl -p
- 设置虚拟网卡ens33:0
cd /etc/systemct/network-scripts/
cp -p ifcfg-ens33 ifcfg-ens33:0
//全部删除后添加虚拟网卡配置
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.100.10
NETMASK=255.255.255.0
- 启用虚拟网卡
ifup ens33:0
- 编写脚本,便于service管理LVS服务,启动和停止,查看LVS状态
cd /etc/init.d
vim dr.sh
#!/bin/bash
GW=192.168.100.1
VIP=192.168.100.10
RIP1=192.168.100.200
RIP2=192.168.100.201
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]"
;;
stop)
/sbin/ipvsadm -C
systemctl stop ipvsadm
ifconfig ens33:0 down
route del $VIP
echo "ipvsamd stoped--------------------[ok]"
;;
status)
if [ ! -e ar/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
- 添加执行权限,执行脚本
chmod +x dr.sh
service dr.sh start
配置第二台LVS服务:
- LVS服务器2配置与1设置相同,重复操作一遍即可
二.配置两台Aapche服务
- 安装 httpd
yum install httpd -y
- 创建站点目录,添加网页内容
vim /var/www/html/index.html
<h1>this is kgc web</h1>
- 创建虚拟网卡
cd /etc/systemct/network-scripts/
cp -p ifcfg-lo ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.100.10
NETMASK=255.255.255.0
- 编写服务启动脚本,路径:/etc/init.d
cd /etc/init.d
vim web.sh
#!/bin/bash
VIP=192.168.100.10
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/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/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 Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
- 添加权限,并执行
chmod +x web.sh
service web.sh start
- 关闭防火墙开启httpd服务
systemctl stop firewalld.service
systemctl start httpd
- 配置第二台节点服务器 web2
节点服务器2按照服务器1重新配置
站点目录更改
<h1>this is accp web</h1>
- 测试网页:
三.在两台LVS服务器上分别部署部keepalived
- 在第一台LVS服务器 (DR) 上部署:
vim /etc/keepalived/keepalived.conf
- 启动服务
systemctl start keepalived.service
- 在第二台LVS服务器 (DR) 上部署:
vim /etc/keepalived/keepalived.conf
- 启动服务
systemctl start keepalived.service
四.验证实验:
由于部署了 LVS 和 keepalived,目的是,负载均衡和双机热备。
此时,我们模拟一下故障,宕掉其中一台 DR1,如果客户端依旧可以和虚拟 IP地址 互通,且能够正常访问网站的话,就说明 DR2 就代替 DR1 工作了,防止单点故障的效果实现了。
- 故障模拟:宕掉 主LVS
ifdown ens33:0
- 结果验证,在客户端 ping 一下虚拟ip
- 访问Apache服务网站验证: