Linux HA LVS + Keepalived 实现高可用前端负载均衡

Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障。

一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP)

但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候, 备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

Keepalived是VRRP的完美实现

首先准备4台机子

node1 172.16.6.100 ZhongH100.wxjr.com.cn
node1 172.16.6.101 ZhongH101.wxjr.com.cn
master 172.16.6.102 ZhongH102.wxjr.com.cn
slave 172.16.6.103 ZhongH103.wxjr.com.cn
vip 172.16.7.200

系统都是CentOS 6.6 x86_64

基本环境配置

node1 node2主机名互解 ssh互信,4台机器都做时间同步:

node1:

node2:

master:

slave:

node上安装Nginx

node1:

Keepalived20150529182545

node2:

keepalived20150529184041

配置node1和node2

创建配置文件:

检查配置:

配置node2:

配置master和slave

配置master和slave主机名互解和ssh互信:

master安装Keepalived和ipvsadm:

master配置Keepalived:

vim /etc/keepalived/keepalived.conf slave安装和Keepalived:
启动master和slave的Keepalived:
查看LVS状态:
测试web:

Keepalived20150529201854

Keepalived20150529201648

模拟故障

告警邮件都来了:

Keepalived20150529202214

自动切换node1

Keepalived20150529202320

重新启动node2

Keepalived20150529202505

邮件也提示恢复了:

Keepalived20150529202419

Keepalived20150529202533

再次检查LVS状态

关闭master上的Keepalived

查看slave状态

前端状态:

Keepalived20150529203204

大家可以看到,经过上面的演示我们现在LVS的高可用即前端负载均衡的高可用,同时实现对后端realserver监控,也实现后端realserver宕机时会给管理员发送邮件。

但还有几个问题我们还没有解决,问题如下:

  • 所有realserver都down机,怎么处理?是不是用户就没法打开,还是提供一下维护页面。
  • 怎么完成维护模式keepalived切换?
  • 如何在keepalived故障时,发送警告邮件给指定的管理员?

所有realserver都down机,怎么处理?

问题:在集群中如果所有real server全部宕机了,客户端访问时就会出现错误页面,这样是很不友好的

我们得提供一个维护页面来提醒用户,服务器正在维护,什么时间可以访问等,下 面我们就来解决一下这个问题。

解决方案有两种,一种是提供一台备用的real server当所有的服务器宕机时,提供维护页面,但这样做有点浪费服务器。

另一种就是在负载均衡器上提供维护页面,这样是比较靠谱的,也比较常用。

下面 我们就来具体操作一下。

master和slave上安装nginx:

修改master的Keepalived配置文件:

slave:

修改slave的Keepalived配置文件:

Keepalived20150529205702

Keepalived20150529205646

关闭node1 node2的Nginx,master slave的Keepalived:

检查LVS

测试web服务:

Keepalived20150529210616

怎么完成维护模式keepalived切换?

问题:我们一般进行主从切换测试时都是关闭keepalived或关闭网卡接口,有没有一种方法能实现在不关闭keepalived下或网卡接口来实现维护呢?

方法肯定是有的,在keepalived新版本中,支持脚本vrrp_srcipt,具体如何使用大家可以man keepalived.conf查看。

下面我们来演示一下具体怎么实现。

定义脚本:

执行脚本:

修改Keepalived的配置文件:(Master)

修改Keepalived的配置文件:(Slave)

测试

重启Keepalived,创建down文件:

查看IP和日志

slave:

好了,自写监测脚本,完成维护模式切换,到这里就演示成功。

下面我们来解决最后一个问题,就是keepalived主从切换的邮件通告。

如何在keepalived故障时(或主备切换时),发送警告邮件给指定的管理员?

1、keepalived通知脚本进阶示例

下面的脚本可以接受选项,其中

-s, --service SERVICE,...:指定服务脚本名称,当状态切换时可自动启动、重启或关闭此服务;
-a, --address VIP: 指定相关虚拟路由器的VIP地址;
-m, --mode {mm|mb}:指定虚拟路由的模型,mm表示主主,mb表示主备;它们表示相对于同一种服务而方,其VIP的工作类型;
-n, --notify {master|backup|fault}:指定通知的类型,即vrrp角色切换的目标角色;
-h, --help:获取脚本的使用帮助;

下面可以查看示例脚本:

在keepalived.conf配置文件中,其调用方法如下所示:
notify_master "/etc/keepalived/notify.sh -n master -a 192.168.18.200"notify_backup "/etc/keepalived/notify.sh -n backup -a 192.168.18.200"notify_fault "/etc/keepalived/notify.sh -n fault -a 192.168.18.200"

修改配置文件:Master
vim /etc/keepalived/keepalived.conf

修改配置文件:Slave
vim /etc/keepalived/keepalived.conf

测试脚本:

Keepalived20150529210619

模拟故障:

切换到master上查看

查看邮件:

Keepalived20150529210629

大家可以看到,主备切换时,会发送邮件报警

以上

 

声明: 本文采用 BY-NC-SA 协议进行授权 | Deamwork
转载请注明转自《Linux HA LVS + Keepalived 实现高可用前端负载均衡
本文地址:https://www.deamwork.com/archives/linux-ha-lvs-keepalived-balanced.orz6

回复 (0)

› 尚无评论。

发表评论 修改评论取消编辑

允许使用的标签 - 您可以在评论中使用如下的 HTML 标签以及属性。

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <img src="" alt=""> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

 :mrgreen:  :|  :twisted:  :arrow:  8O  :)  :?  8-)  :evil:  :D  :idea:  :oops:  :P  :roll:  ;)  :cry:  :o  :lol:  :x  :(  :!:  :?:

引用通告 (0)

› 尚无引用通告。

欢迎来到Deamwork! o(∩_∩)o
X