欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

LVS+keepalived实现高可用的DR模式负载均衡的搭建过程

程序员文章站 2022-03-14 18:06:50
LVS+keepalived实现高可用的DR模式负载均衡的搭建过程一.问题总结(写在前面的话)1. 没有实现高可用2.容易出错3.不能持久化二.问题解决方案1.单点故障解决方案1.解决的方向2.解决的形式3.最终的选择2.健康检查1.概念2.健康检查的对象3.实现方式1.检查LVS主机服务2.检查server端的服务3.LVS的高可用的实现方案1.自力更生2.活生生的人3.拥抱开源4.Keepalived1.简介2.功能5.搭建过程1.实验物料及流程图2.开始安装一.问题总结(写在前面的话)首先,我们先...

一.问题总结(写在前面的话)

首先,我们先看下一下上一篇博客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模式)
LVS+keepalived实现高可用的DR模式负载均衡的搭建过程
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
LVS+keepalived实现高可用的DR模式负载均衡的搭建过程
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
LVS+keepalived实现高可用的DR模式负载均衡的搭建过程
n1上执行:

             ifconfig 
             ipvsadm -ln

LVS+keepalived实现高可用的DR模式负载均衡的搭建过程
浏览器访问 http://192.168.15.100/ 连续间隔刷新,可以看到一会负载到server1,一会负载到server2
LVS+keepalived实现高可用的DR模式负载均衡的搭建过程
LVS+keepalived实现高可用的DR模式负载均衡的搭建过程
此时如果我们停掉n1,n4的备机会直接被推举为主:
LVS+keepalived实现高可用的DR模式负载均衡的搭建过程
但是当n1恢复后,n4又直接被n1替换掉,n4继续做冷板凳。并且机器重启后,LVS不需要重新配置,立即就生效哦。

下面我再把n2服务器给停掉,我们可以看到,LVS负载中也会将n2这个节点剔除掉。
LVS+keepalived实现高可用的DR模式负载均衡的搭建过程
从路由表中,也可以看到只负载给了n3
LVS+keepalived实现高可用的DR模式负载均衡的搭建过程
但是,只要n2一修复,LVS负载均衡服务器就又会加上n2.
注意:如果http://192.168.15.100访问不了,很有可能是防火墙没有关闭,关闭防火墙就可以了。
到此为止,整个安装过程就完成了。

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

本文地址:https://blog.csdn.net/lvxinchun/article/details/107303007