LVS+keepalived实现高可用的DR模式负载均衡的搭建过程
LVS+keepalived实现高可用的DR模式负载均衡的搭建过程
一.问题总结(写在前面的话)
首先,我们先看下一下上一篇博客LVS负载均衡DR模式的搭建过程(不用keepalived)搭建完成后出现的问题,总结写主要有以下几点:
1. 没有实现高可用
首先,LVS是个单机,会存在单点故障,说白了,如果LVS这个服务器挂掉,那么整个业务就完全挂掉了,gameover了;
第二:后端的业务服务器server端,如果某台机器故障了,而LVS还往他们身上进行流量的转发,那就会得不到响应,那么业务线就会部分故障,只能部分可用;
2.容易出错
搭建过程完全是用命令来实现的,极其容易出错,如果能够用配置文件,事先做好,这样就能减少错误的出现,方便我们运维的搭建和维护;
3.不能持久化
搭建过程完全基于命令的话,配置一次,机器一旦重启,LVS上的配置就消失了,不能持久化
二.问题解决方案
1.单点故障解决方案
1.解决的方向
其实单点故障解决说起来很简单,之所以叫单点故障,就是因为它是一台机器,那我们就增加多台,也就是用1变多来解决单点故障;
2.解决的形式
要实现上面我们说的1变多,那么有以下两种方式:
主备:一台主机,多台备机
主主:两台都是主机,并且也都作为对方的从机,
3.最终的选择
基于我们的实现,我们选择主备方式就行。为什么选择主备呢?
1.节省成本 我们只需要买一台好的主机,备机可以买稍微差一点的;
2.搭建较为简单,在中小型企业中,这种方式完全可以满足高可用;
2.健康检查
1.概念
健康检查,通俗的讲,就是确定各个服务是否正常,注意,这里说的是各个服务,而不是各个服务器(物理机)。那么主要检查什么呢?
2.健康检查的对象
从第一部分我们总结的问题可以看出,健康检查主要是两个部分:
1.检查LVS是否可用;
2.检查server的业务服务端是否可用
3.实现方式
1.检查LVS主机服务
目前我想到的实现方式有以下两种:
- 备机定时去轮询主机,问主机是否还活着,服务是否还可用;
- 主机定时广播,主机每隔一段时间向备机发送广播,说我还活着,我的服务还是健康可用的;
那我们如何选择呢?在这里,我选择主机定时广播的形式,主机主动告诉备机主机的状态。为什么这样呢?因为如果多个备机定时去轮询,会增加主机的开销,每个备机都要给予回复。
2.检查server端的服务
那我们先思考一个问题,如何知道server端还活着呢?可能我们首先想到的是ping一下,在这里我要说一下,ping只能说明服务器的网络是通的,而不能说明服务器里的服务是可用的。为什么呢????因为ping在网络协议中,它还不属于应用层!!!它是3层的协议。其实很简单,我们想想怎么确定一个网站挂了,我们只需要浏览器访问一下不就行了么?对,所以我们只要发送一下http请求,能够返回200,那么就可以了。
3.LVS的高可用的实现方案
1.自力更生
为什么叫自立更生呢?因为我们完全可以根据上面的需求,自己开发一个程序,来解决上面的问题。这并不是不可以啊,只是这种方式可能耗时较长,同时,开发的程序没有经过大量生产的使用,是否存在一定的漏洞也未可知,生产使用过的话,风险较大;
2.活生生的人
我们完全可以专门招几个人,就时刻盯着,一旦出现故障,立马切换。但是,但是,但是什么呢?我认为,人是最不靠谱的。
3.拥抱开源
我们可以寻找相应的开源软件,看看哪些在业内比较有名,应用比较多,生产经受住了大量的实验。通过大量的比较,我们发现keepalived比较合适,并且keepalived诞生最初要解决的问题也是LVS的高可用。所以毫无疑问,我们当然选择keepalived。
4.Keepalived
1.简介
Keepalived软件起初是专门为LVS负载均衡软件设计的用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务的高可用解决方案软件。
Keepalived软件主要是通过VRRP协议实现高可用功能的,VRRP是Virtual Router Redundancy Protocol(虚拟路由器冗余协议)的缩写.VRRP出现的目的就是为了解决静态路由单点故障问题的。哈哈。通过看这个简介我们就知道,这就是我们需要的,真是再合适不过了。
这里我们要重申一点,Keepalived不仅能够实现LVS的高可用,也是一个通用的工具,用来实现服务的高可用。
2.功能
那么在LVS这个系统中,Keepalived到底要做哪些事情呢?
- 监控本身的服务,时刻关注本身的身体状况,看是否可用;
- 广播通告 主机通告给备机本身的健康状况,备机监听主机状况,主机over了,那么一堆备机进行选举,推举出一个新的主机;
- 对server端服务进行健康检查,看是否可用;
- 利用配置文件,进行LVS中VIP及ipvs模块的配置。
基于上面这些理论,我们开始进行具体的搭建过程。
5.搭建过程
1.实验物料及流程图
由于条件有限,我用电脑搭建了4台虚拟机,装的系统是Centos7,虚拟机网络采用的NAT模式。大家如果想做实验的话,可以参考我的上一篇博客,VMware虚拟机下安装CentOS(NAT模式) 。
1.我使用3台服务器,其中n1做负载服务器主机,n2和n3作为server端,n4作为负载服务器备机
2.CIP:192.168.15.3,即我宿主机vmnet网卡上设置的ip地址
3.VIP:192.168.15.100,即n1和n4上eth0:1这个往卡上的ip地址只不过n4上备机在未启用时是虚的
4.DIP:192.168.15.61,即n1上的eth0网卡的地址
5.DIP:192.168.15.64,即n4上的eth0网卡的地址
5.RIP:n2上的IP:192.168.15.62 n3上的地址:192.168.15.63
6.网关是192.168.15.2
7.黑色实线箭头代表请求,绿色实线箭头代表响应,其他各种颜色的虚线箭头,代表相互之间的切换
2.开始安装
其实有了上一篇博客《LVS负载均衡DR模式的搭建过程(不用keepalived)》的理论基础及相关的过程,本次安装自然水到渠成的事情。下面我就直接开始,相关的理论我们就略过了,不懂的地方请看上一篇博客,在此就不在赘述。
1.安装keepalived
分别在n1和n4上安装keepalived软件,执行命令如下:
yum install keepalived -y
2.安装ipvsadm模块
分别在n1和n4上安装ipvsadm软件,执行命令如下:
yum install keepalived ipvsadm -y
3.在n2和n3上配置LO回环接口、httpd服务、修改arp_ignore和 arp_announce ,具体操作请查看上一篇博客《LVS负载均衡DR模式的搭建过程(不用keepalived)》,在此不再进行演示了。
4.配置keepalived
配置文件的地址目录: /etc/keepalived
n1主机上的配置:
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.15.100/24 dev eth0 label eth0:3
}
}
virtual_server 192.168.15.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 0
protocol TCP
real_server 192.168.15.62 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.15.63 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
n4备机上的配置:
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.15.100/24 dev eth0 label eth0:3
}
}
virtual_server 192.168.15.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 0
protocol TCP
real_server 192.168.15.62 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.15.63 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
两个配置文件有少许的差别,还请大家仔细看哦!
5.验证
n1上执行:ipvsadm -ln
n1上执行:
ifconfig
ipvsadm -ln
浏览器访问 http://192.168.15.100/ 连续间隔刷新,可以看到一会负载到server1,一会负载到server2
此时如果我们停掉n1,n4的备机会直接被推举为主:
但是当n1恢复后,n4又直接被n1替换掉,n4继续做冷板凳。并且机器重启后,LVS不需要重新配置,立即就生效哦。
下面我再把n2服务器给停掉,我们可以看到,LVS负载中也会将n2这个节点剔除掉。
从路由表中,也可以看到只负载给了n3
但是,只要n2一修复,LVS负载均衡服务器就又会加上n2.
注意:如果http://192.168.15.100访问不了,很有可能是防火墙没有关闭,关闭防火墙就可以了。
到此为止,整个安装过程就完成了。
有写的不正确的地方,希望大家多多指正,目前在我机器上,这样的流程是完全走通了。当然,这中间也还有很多的小细节问题,需要我们慢慢了解。
本文地址:https://blog.csdn.net/lvxinchun/article/details/107303007
下一篇: Redis协议具体用法详解
推荐阅读
-
windows NLB+ARR实现Web负载均衡高可用/可伸缩的方法
-
lvs+keepalive实现双主模式(采用DR),同时实现TCP和UDP检测实现非web端的负载均衡,同时实现跨网段的通讯
-
Mycat - 高可用与负载均衡实现,满满的干货!
-
Keepalived实现Nginx负载均衡高可用的示例代码
-
LVS+keepalived实现高可用的DR模式负载均衡的搭建过程
-
使用MySQL Router实现高可用、负载均衡、读写分离的详细教程
-
lvs+keepalive实现双主模式(采用DR),同时实现TCP和UDP检测实现非web端的负载均衡,同时实现跨网段的通讯
-
Nginx+Keepalived+Tomcat搭建高可用/负载均衡/动静分离的Web服务器集群
-
Nginx+Keepalived+Tomcat搭建高可用/负载均衡/动静分离的Web服务器集群
-
windows NLB+ARR实现Web负载均衡高可用/可伸缩的方法