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主机服务

目前我想到的实现方式有以下两种:

  1. 备机定时去轮询主机,问主机是否还活着,服务是否还可用;
  2. 主机定时广播,主机每隔一段时间向备机发送广播,说我还活着,我的服务还是健康可用的;

那我们如何选择呢?在这里,我选择主机定时广播的形式,主机主动告诉备机主机的状态。为什么这样呢?因为如果多个备机定时去轮询,会增加主机的开销,每个备机都要给予回复。

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到底要做哪些事情呢?

  1. 监控本身的服务,时刻关注本身的身体状况,看是否可用;
  2. 广播通告 主机通告给备机本身的健康状况,备机监听主机状况,主机over了,那么一堆备机进行选举,推举出一个新的主机;
  3. 对server端服务进行健康检查,看是否可用;
  4. 利用配置文件,进行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访问不了,很有可能是防火墙没有关闭,关闭防火墙就可以了。
到此为止,整个安装过程就完成了。

有写的不正确的地方,希望大家多多指正,目前在我机器上,这样的流程是完全走通了。当然,这中间也还有很多的小细节问题,需要我们慢慢了解。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值