LVS+Keepalived高可用集群
文章目录
- LVS+Keepalived高可用集群
-
-
- KeepAlived 简介
-
- 一:理解Keepalived实现原理
-
- 1.1 Keepalived使用场景
- 1.2 Keepalived工具介绍
- 1.3 Keepalived实现原理剖析
- 二、Keepalived的部署
-
- 2.1 Keepalived案例讲解
- 2.2 Keepalived安装与启动
- 2.3 配置Keepalived master服务器
- 2.4 Keepalived双机热备效果测试
- 三、LVS+Keepalived高可用群集部署
-
- 3.1 案例:负载均衡+高可用群集
-
- 3.2:两台LVS服务器都安装工具包
- 3.3:两台LVS服务器都开启路由转发,关闭重定向
- 3.4:配置DR模式
- 3.5:配置两台节点
- 3.6:服务器部署keepdalived服务器
-
- 3.61:keeppalived.conf是主配置文件
- 3.7:配置第二台LVS调度器
- 3.8:开启keepalived服务
- 3.9:客户机进行访问
在该系列前两篇文章中,我们全面认识了LVS并配置完成了简单的DR-LVS集群。当集群的请求量过大时,LVS会有宕机的可能,为提高集群的高可用性并增加后端检测功能、简化配置,在集群中引入KeepAlived。
KeepAlived 简介
KeepAlived最初是为LVS设计,用来管理并监控LVS集群系统中各个服务节点的状态,后来加入了VRRP功能,发展一个多功能、通用的轻量级高可用组件,可以为ipvs、nginx、haproxy等诸多服务提供高可用功能。
一:理解Keepalived实现原理
1.1 Keepalived使用场景
- 企业应用中,单台服务器承担应用存在单点故障的危险
- 单点故障一旦发生,企业服务将发生中断,造成极大的危害
1.2 Keepalived工具介绍
专为LVS和HA设计的一款健康检查工具
支持故障自动切换(Failover)
支持节点健康状态检查(Health Checking)
官方网站:http://www.keepalived.org
1.3 Keepalived实现原理剖析
- Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能
- VRRP(虚拟路由冗余协议)是针对路由器的一种备份解决方案
- 由多台路由器组成一个热备组,通过公用的虚拟IP地址对外提供服务
- 每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态
- 若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务
二、Keepalived的部署
2.1 Keepalived案例讲解
- Keepalived可实现多机热备,每个热备组可有多台服务器
- 双机热备的故障切换是由虚拟IP地址的漂移来实现,适用于各种应用服务器
- 实现基于Web服务的双机热备
- 漂移地址:192.168.100.10(VIP)
- 主、备服务器:192.168.100.129、192.168.100.128
- 提供的应用服务:Web 192.168.100.50
2.2 Keepalived安装与启动
- 在LVS群集环境中应用时,也需用到ipvsadm管理工具
- YUM安装Keepalived
- 启用Keepalived服务
2.3 配置Keepalived master服务器
- Keepalived配置目录位于/etc/keepalived/
- keepalived.conf是主配置文件
- global_defs{…}区段指定全局参数
- vrrp_instance实例名称{…}区段指定VRRP热备参数
- 注释文字以"!"符号开头
- 目录samples,提供了许多配置样例作为参考
- 常用配置选项
- router_id HA_TEST_R1:本路由器(服务器)的名称
- vrrp_instance V1_1:定义VRRP热备实例
- state MASTER:热备状态,MASTER表示主服务器
- interface ens33:承载VIP地址的物理接口(之前的版本是eth0,一定要修改)
- virtual_router_id 1:虚拟路由器的ID号,每个热备组保持一致
- 常用配置选项
- priority 100:优先级,数值越大优先级越高(0-100)
- adver_int 1:通告间隔秒数(心跳频率)
- auth_type PASS:认证类型
- auth_pass 123456:密码字串
- virtual_ipaddress{vip}:指定漂移地址(VIP),可以有多个
- Keepalived备份服务器的配置与master的配置有三个选项不同
- router_id:设为自有名称
- state:设为BACKUP (大写)
- priority:值低于主服务器
- 其他选项与master相同
2.4 Keepalived双机热备效果测试
- 测试双机热备的效果
- 主、备均启用Web服务,设置不同内容
- 先后禁用、启用主服务器的网卡
- 执行的测试
- 测试1:使用ping检测20.0.0.41的
- 测试2:访问http://20.0.0.41,确认可用性及内容变化
- 测试3:查看日志文件/var/log/messages中的变化
三、LVS+Keepalived高可用群集部署
3.1 案例:负载均衡+高可用群集
- Keepalived的设计目标是构建高可用的LVS负载均衡群集,可用调用ipvsadm工具来创建虚拟服务器、管理服务器池,而不仅仅用作双机热备
- 使用Keepalived构建LVS群集更加简便易用
- 主要优势
- 对LVS负载调度器实现热备切换,提高可用性
- 对服务器池中的节点进行健康检查,自动移除失效节点,恢复后再重新加入
实验环境:
【1】DR调度服务器 192.168.100.129 keepalived ipvsadm
【3】DR调度服务器 192.168.100.128 keepalived ipvsadm
【5】节点服务器 192.168.100.120 httpd
【6】节点服务器 192.168.100.130 httpd
【2】win 10客户端 192.168.100.50
漂移地址:192.168.100.10
3.2:两台LVS服务器都安装工具包
//keepalived:双机热备要用到的,ipvsadm:调度管理要用
[root@lvs01 ~]# yum install keepalived ipvsadm -y
[root@lvs02 ~]# yum install keepalived ipvsadm -y
3.3:两台LVS服务器都开启路由转发,关闭重定向
- 防止路由混乱
'//尾行插入下段配置'
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
#重载配置,使之生效
[root@lvs01 ~]# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
-
配置VIP网卡跟真实网卡信息**【仅主机模式】**
-
虚拟网卡:ens33:0 真实网卡ens33
[root@lvs01 ~]# cd /etc/sysconfig/network-scripts/
[root@lvs01 network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33:0
[root@lvs01 network-scripts]# vim ifcfg-ens33:0 //编辑虚拟IP地址
//删除原来内容 添加以下内容
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.100.10
NETMASK=255.255.255.0
#配置真实IP
BOOTPROTO=static //修改为static
---省略信息
IPADDR=192.168.100.129 //真实地址为192.168.100.129
GATEWAY=192.168.100.1
NETMASK=255.255.255.0
...................lvs02配置网卡----------------------------
[root@lvs02 network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0
[root@lvs02 network-scripts]# vim ifcfg-ens33:0
//一样的操作
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.100.10
NETMASK=255.255.255.0
//配置ens33
IPADDR=192.168.100.128
GATEWAY=20.0.0.2
NETMAKE=255.255.255.0
- 如果看不到使用这条命令
//使用无法重启网络或ping不通
systemctl start NetworkManager
3.4:配置DR模式
- 两台lvs都要配置
#!/bin/bash
GW=192.168.100.1
VIP=192.168.100.10 ##虚拟ip
RIP1=192.168.100.120 ##真实web服务器ip
RIP2=192.168.100.130
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
##设置ens33:0地址,广播地址,子网掩码,并开启
/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 ##指定真实服务器,dr模式
/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
#增加执行权限
[root@lvs01 network-scripts]# chmod +x /etc/init.d/dr.sh
- 两台LVS服务器都重各项配置
//开启dr服务配置
[root@lvs01 network-scripts]# service dr.sh start
ipvsadm starting --------------------[ok]
//关闭或关闭防护功能
[root@lvs01 network-scripts]# setenforce 0
[root@lvs01 network-scripts]# systemctl restart network
[root@lvs01 network-scripts]# systemctl stop
[root@lvs02 network-scripts]# systemctl restart network
3.5:配置两台节点
- 首先下载apache服务
[root@shuai ~]# yum -y install httpd
[root@shuai02 ~]# yum -y install httpd
- 配置两台网卡跟虚拟IP【仅主机】
[root@shuai02 network-scripts]# cp -p ifcfg-lo ifcfg-lo:0
[root@shuai02 network-scripts]# vim ifcfg-lo:0
//编写以下内容
DEVICE=lo:0
IPADDR=192.168.100.10
NETMASK=255.255.255.0
ONBOOT=yes
IPADDR=192.168.100.120
GATEWAY=192.168.100.1
NETMASK=255.255.255.0
--------------配置shuai02节点服务器-------------------
[root@shuai ~]# cd /etc/sysconfig/network-scripts/
[root@shuai network-scripts]# cp -p ifcfg-lo ifcfg-lo:0
[root@shuai network-scripts]# vim ifcfg-lo:0
//编写lo服务器
DEVICE=lo:0
IPADDR=192.168.100.10
NETMASK=255.255.255.0
ONBOOT=yes
//编辑ens33网卡
IPADDR=192.168.100.130
GATEWAY=192.168.100.1
NETMASK=255.255.255.0
#重启两台接节点服务器的网卡
[root@shuai network-scripts]# service network restart
Restarting network (via systemctl): [ 确定 ]
-
节点服务器配置抑制ARP响应
-
两台通用的配置
#!/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 '//arp忽略'
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 '//arp开启'
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
//增加执行权限
[root@shuai network-scripts]# chmod +x /etc/init.d/wed.sh
#复制脚本文件到shuai01节点服务器
[root@shuai init.d]# scp wed.sh root@192.168.100.120:/etc/init.d/
root@192.168.100.120's password:
wed.sh 100% 1440 2.0MB/s 00:00
- 开启服务
[root@shuai network-scripts]# systemctl stop firewalld.service
[root@shuai network-scripts]# setenforce 0
[root@shuai network-scripts]# service web.sh start
[root@shuai network-scripts]# service wed.sh start
RealServer Start OK
- 编辑两个节点服务器的首页信息
#编写shui首页信息
[root@shuai init.d]# cd /var/www/html/
[root@shuai html]# vim index.html
//编写
<h1>this is shuai web</h1>
#编写shuai02
<h1>this is shuai02</h1>
#重启两台服务
systemctl start httpd
netstat -ntap | grep httpd
tcp6 0 0 :::80 :::* LISTEN 16174/httpd
3.6:服务器部署keepdalived服务器
3.61:keeppalived.conf是主配置文件
- 指定全局参数
- vrrp_instance 实例名称
3.7:配置第二台LVS调度器
[root@lvs1 ~]# vim /etc/keepalived/keepalived.conf
...省略内容
router_id LVS_02 '//router_id不能相同'
...省略内容
vrrp_instance VI_1 {
state BACKUP '//此处选择为BACKUP备服务器'
interface ens33
virtual_router_id 10
priority 90 '//优先级需要低于主服务器'
...省略内容
'//其他配置都相同'
3.8:开启keepalived服务
[root@lvs01 keepalived]# systemctl start keepalived
[root@lvs02 keepalived]# systemctl start keepalived
3.9:客户机进行访问
- 此时可以关闭主服务器的漂移地址 ifdown ens33:0,再次访问页面,发现依然可以访问,双机热备成功
- 两台服务器多刷新几次会显示另一台web首页
- 若无法显示网页,尝试重启两台lvs服务器的dr.sh脚本或其他服务