LVS+Keepalived高可用集群详细部署过程
文章目录
一、理解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.11、192.168.100.55
- 提供的应用服务:Web
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检测14.0.0.11的
- 测试2:访问http://14.0.0.11,确认可用性及内容变化
- 测试3:查看日志文件/var/log/messages中的变化
三、LVS+Keepalived高可用群集部署
3.1 案例:负载均衡+高可用群集
- Keepalived的设计目标是构建高可用的LVS负载均衡群集,可用调用ipvsadm工具来创建虚拟服务器、管理服务器池,而不仅仅用作双机热备
- 使用Keepalived构建LVS群集更加简便易用
- 主要优势
- 对LVS负载调度器实现热备切换,提高可用性
- 对服务器池中的节点进行健康检查,自动移除失效节点,恢复后再重新加入
3.2 案例拓扑
- 在基于LVS+Keepalived实现的群集结构中,至少包括两台热备的负载调度器,三台以上的节点服务器
配置主调度器
【1】全局配置、热备配置
-
应为主、从调度器实现热备功能,漂移地址使用LVS群集的VIP地址
【2】Web服务器池配置 -
在Keepalived的热备配置基础上,添加“virtual_server VIP 端口 {…}” 区段来配置虚拟服务器
-
包括对负载调度算法、群集工作模式、健康检查间隔、真实服务器地址等参数的设置
【3】重启Keepalived服务
配置从调度器
【1】从调度器的配置与主调度器基本相同
- 包括全局配置、热备配置、服务器池配置
【2】只需要调整router_id、state、priority参数
【3】配置完成后重启Keepalived服务
配置Web节点服务器
- 在DR模式的LVS集群中,除了需要调整/proc系统的ARP响应参数以外,还需要为虚拟接口lo:0配置VIP地址,并添加一条到VIP的本地路由
测试群集
- 客户机浏览器中,能够通过群集的VIP地址(14.0.0.11)正常访问Web页面内容
- 当主、从调度器任何一个失效时,Web站点仍然可以访问
- 只要服务器池有两台及以上的真实服务器可用,就可以实现访问量的负载均衡
- 通过主、从调度器 的/var/log/messages日志文件,可以跟踪故障切换流程
- 可执行“ipvsadm -ln”、“ipvasdm -lnc”操作命令查看负分配情况
四、实操
【1】DR调度服务器 192.168.100.11 keepalived ipvsadm
【3】DR调度服务器 192.168.100.33 keepalived ipvsadm
【5】节点服务器 192.168.100.55 httpd
【6】节点服务器 192.168.100.66 httpd
【2】win 10客户端 192.168.100.20
漂移地址:192.168.100.10
——————————————DR调度服务器——————————————————
【1】
[aaa@qq.com ~]# iptables -F
[aaa@qq.com ~]# setenforce 0
[aaa@qq.com ~]# yum install keepalived ipvsadm -y
[aaa@qq.com ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1
####proc响应关闭重定向功能
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.default.send_redirects=0
net.ipv4.conf.ens33.send_redirects=0
[aaa@qq.com ~]# sysctl -p ###即时生效
[aaa@qq.com ~]# cd /etc/sysconfig/network-scripts/
[aaa@qq.com network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0
[aaa@qq.com network-scripts]# vim ifcfg-ens33:0 ###修改VIP地址
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.100.10
NETMASK=255.255.255.0
[aaa@qq.com network-scripts]# vim ifcfg-ens33 ###修改本地网卡地址
IPADDR=192.168.100.11
NETMASK=255.255.255.0
GATEWAY=192.168.100.1
##########本地的虚拟机改为仅主机模式
配置LVS-DR模式
[aaa@qq.com network-scripts]# cd /etc/init.d
[aaa@qq.com init.d]# vim dr.sh
#!/bin/bash
GW=192.168.100.1
VIP=192.168.100.10
RIP1=192.168.100.55
RIP2=192.168.100.66
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 “ipvsadm stoped -------------------[ok]”
;;
status)
if [ ! -e /var/lock/subsys/ipvsadm ];then
echo “ipvsadm stoped---------------”
exit
else
echo “ipvsadm Runnig --------[ok]”
fi
;;
*)
echo “Usage: $0 [start|stop|status]”
exit 1
esac
exit 0
[aaa@qq.com init.d]# chmod +x dr.sh
[aaa@qq.com init.d]# service network restart
[aaa@qq.com init.d]# ifconfig ###有ens33和ens33:0
[aaa@qq.com init.d]# systemctl stop firewalld
[aaa@qq.com init.d]# setenforce 0
[aaa@qq.com init.d]# service dr.sh start
【3】
[aaa@qq.com ~]# yum install keepalived ipvsadm -y
[aaa@qq.com ~]# vim /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.ens33.send_redirects=0
[aaa@qq.com ~]# sysctl -p
[aaa@qq.com ~]# cd /etc/sysconfig/network-scripts/
[aaa@qq.com network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33:0 ###ens33本地IP地址,ens33:0 VIP
[aaa@qq.com network-scripts]# vim ifcfg-ens33:0 ###修改VIP地址
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.100.10
NETMASK=255.255.255.0
[aaa@qq.com network-scripts]# vim ifcfg-ens33 ###修改本地网卡地址
IPADDR=192.168.100.33
NETMASK=255.255.255.0
GATEWAY=192.168.100.1
##########本地的虚拟机改为仅主机模式
配置LVS-DR模式
[aaa@qq.com network-scripts]# cd /etc/init.d
[aaa@qq.com init.d]# vim dr.sh
#!/bin/bash
GW=192.168.100.1
VIP=192.168.100.10
RIP1=192.168.100.55
RIP2=192.168.100.66
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 "ipvsadm stoped -------------------[ok]"
;;
status)
if [ ! -e /var/lock/subsys/ipvsadm ];then
echo "ipvsadm stoped---------------"
exit
else
echo "ipvsadm Runnig --------[ok]"
fi
;;
*)
echo "Usage: $0 [start|stop|status]"
exit 1
esac
exit 0
[aaa@qq.com init.d]# chmod +x dr.sh
[aaa@qq.com init.d]# service network restart
[aaa@qq.com init.d]# ifconfig
ens33: 192.168.100.33
ens33:0: 192.168.100.10
[aaa@qq.com init.d]# service dr.sh start
[aaa@qq.com init.d]# setenforce 0
[aaa@qq.com init.d]# systemctl stop firewalld.service
———————————节点服务器——————————————
###先把两个节点网卡改为仅主机模式
【5】
[aaa@qq.com ~]# cd /etc/sysconfig/network-scripts/
[aaa@qq.com network-scripts]# cp -p ifcfg-lo ifcfg-lo:0
[aaa@qq.com network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.100.10
NETMASK=255.255.255.0
[aaa@qq.com network-scripts]# vim ifcfg-ens33
IPADDR=192.168.100.55
NETMASK=255.255.255.0
GATEWAY=192.168.100.1
———本地yum源安装httpd-----也可以直接NAT模式yum install httpd -y
[aaa@qq.com network-scripts]# cd /etc/yum.repos.d/
[aaa@qq.com yum.repos.d]# mkdir bak
[aaa@qq.com yum.repos.d]# mv CentOS-* bak/
[aaa@qq.com yum.repos.d]# vim abc.repo
[abc]
name=test
baseurl=file:///mnt
enabled=1
gpgcheck=0
[aaa@qq.com yum.repos.d]# mount /dev/sr0 /mnt
[aaa@qq.com yum.repos.d]# df -Th
[aaa@qq.com yum.repos.d]# yum install httpd -y
———————————————————————————
[aaa@qq.com yum.repos.d]# cd /etc/init.d/
[aaa@qq.com 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/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
[aaa@qq.com init.d]# chmod +x web.sh
[aaa@qq.com init.d]# systemctl stop firewalld
[aaa@qq.com init.d]# setenforce 0
[aaa@qq.com init.d]# service network restart
[aaa@qq.com init.d]# ifconfig ###有ens33和lo:0
[aaa@qq.com init.d]# service web.sh start
[aaa@qq.com init.d]# systemctl start httpd
[aaa@qq.com init.d]# cd /var/www/html
[aaa@qq.com html]# vim index.html
<h1>this is aaa web</h1>
【6】
[aaa@qq.com ~]# yum install httpd -y
###先把两个节点网卡改为仅主机模式
[aaa@qq.com ~]# cd /etc/sysconfig/network-scripts/
[aaa@qq.com network-scripts]# cp -p ifcfg-lo ifcfg-lo:0
[aaa@qq.com network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.100.10
NETMASK=255.255.255.0
[aaa@qq.com network-scripts]# vim ifcfg-ens33
IPADDR=192.168.100.66
NETMASK=255.255.255.0
GATEWAY=192.168.100.1
[aaa@qq.com yum.repos.d]# cd /etc/init.d/
[aaa@qq.com 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/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
[aaa@qq.com init.d]# service network restart
[aaa@qq.com init.d]# ifconfig
[aaa@qq.com init.d]# systemctl start httpd.service
[aaa@qq.com init.d]# systemctl stop firewalld.service
[aaa@qq.com init.d]# setenforce 0
[aaa@qq.com init.d]# cd /var/www/html/
[aaa@qq.com html]# vim index.html
<h1>this is bbb web</h1>
#####keepalived部署(在调度服务器上设置)
[aaa@qq.com init.d]# cd /etc/keepalived/ ###进入keepalived配置文件站点目录
[aaa@qq.com keepalived]# vim keepalived.conf
10 smtp_server 127.0.0.1 ###邮件服务指向本地
...
12 router_id LVS_01 ###指定名称,备份服务器不同名称
...
20 state MASTER ###备份服务器是BACKUP
21 interface ens33
22 virtual_router_id 51 ###组号相同
23 priority 100 ###优先级备份小于主
...
29 virtual_ipaddress {
30 192.168.100.10
31 }
...
34 virtual_server 192.168.100.10 80 {
...
37 lb_kind DR ###LVS模式
...
41 real_server 192.168.100.55 80 {
42 weight 1
43 TCP_CHECK {
44 connect_port 80 ###添加端口
45 connect_timeout 3
46 nb_get_retry 3
47 delay_before_retry 3
48 }
49 }
50 real_server 192.168.100.66 80 { ###9yy ,p粘贴
51 weight 1
52 TCP_CHECK {
53 connect_port 80
54 connect_timeout 3
55 nb_get_retry 3
56 delay_before_retry 3
57 }
58 }
59 }
###下面的virtual_server全部删除
[aaa@qq.com keepalived]# systemctl start keepalived.service
###把本地的配置文件复制到第二台服务器
[aaa@qq.com keepalived]# scp keepalived.conf aaa@qq.com:/etc/keepalived/
【3】
[aaa@qq.com init.d]# vim /etc/keepalived/keepalived.conf
router_id LVS_02 ###router_id不相同02,角色身份为BACKUP,优先级90
state BACKUP
priority 90
[aaa@qq.com keepalived]# systemctl start keepalived.service
####验证结果
###Win10 设为仅主机模式,网络ip改为100网段:192.168.100.20
网页搜索192.168.100.10
刷新