群集负载均衡–LVS DR+keepalived部署实战

时间:2020-9-16 作者:admin

LVS+Keepalived高可用集群

文章目录

在该系列前两篇文章中,我们全面认识了LVS并配置完成了简单的DR-LVS集群。当集群的请求量过大时,LVS会有宕机的可能,为提高集群的高可用性并增加后端检测功能、简化配置,在集群中引入KeepAlived。

KeepAlived 简介

KeepAlived最初是为LVS设计,用来管理并监控LVS集群系统中各个服务节点的状态,后来加入了VRRP功能,发展一个多功能、通用的轻量级高可用组件,可以为ipvs、nginx、haproxy等诸多服务提供高可用功能。

群集负载均衡--LVS DR+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.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

群集负载均衡--LVS DR+keepalived部署实战

群集负载均衡--LVS DR+keepalived部署实战

  • 如果看不到使用这条命令
//使用无法重启网络或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       

群集负载均衡--LVS DR+keepalived部署实战

群集负载均衡--LVS DR+keepalived部署实战

3.6:服务器部署keepdalived服务器

3.61:keeppalived.conf是主配置文件

  • 指定全局参数

群集负载均衡--LVS DR+keepalived部署实战

  • vrrp_instance 实例名称

群集负载均衡--LVS DR+keepalived部署实战

群集负载均衡--LVS DR+keepalived部署实战

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:客户机进行访问

群集负载均衡--LVS DR+keepalived部署实战

群集负载均衡--LVS DR+keepalived部署实战

  • 此时可以关闭主服务器的漂移地址 ifdown ens33:0,再次访问页面,发现依然可以访问,双机热备成功
  • 两台服务器多刷新几次会显示另一台web首页
  • 若无法显示网页,尝试重启两台lvs服务器的dr.sh脚本或其他服务
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。