高并发高可用lvs和keepalived搭建

前言

上一篇中写了lvs单机版搭建的博客单机版lvs搭建,但是实际生产中如果直接使用单机版的lvs会存在两个问题,还是这张图,我们来说下会有哪几个问题。第一,lvs只在node01上搭建,这里就存在单点故障的问题。第二,如果后面node02和node03的服务挂了,对于lvs是不可知的。

在这里插入图片描述
基于上面的问题,keepalived诞生了,keepalived最开始诞生就是为了解决了lvs单点的问题。但实际上keepalived不仅用在lvs上,还可以用在任何需要做主备的实现高可用的场景。

一、keepalived是什么?

keepalived是一款软件,运行在用户态空间。可以保证机器间主备高可用。
我们就事论事,就比如现在单机版的lvs存在的问题,keepalived是如何解决高可用的问题呢?
第一,node01单点故障如何解决呢?
keepalived使用主备的模型,什么是主备呢?就是主的干活,备的就是备用,等主挂了,备的就直接变成主的。这里有个知识点就是,既然有个是当主的,那么备的是怎么知道主的挂了没?这里大家可以思考下,不外乎两种可能,第一种是主的定期告诉备的,说主还活着。第二种是备的定期来问下主的是否活着。结论是keepalived使用第一种的方式。主的主动告诉备的说主的还活着。为什么采用这种方式呢?理由是减少主的压力。你想下主的肯定是干活的,一直在处理别人发给他的数据,如果这个时候备的也来掺和,主的肯定处理的东西更多了。所以keepalived采用第一种方式,通过主的定期告诉备的还活着的消息,如果备的超过多少时间没有收到消息,那么备的就会出来竞选主。

第二,如果后面node02和node03的服务挂了,对于lvs是不可知的,如何解决呢?
keepalived会针对后面每个真实的real server 起一个进程,这个进程专门用来监控real server状态。如果real server 服务挂了,那么keepalived对应的进程捕获到消息后,会把lvs 中ipvsadm -ln看到的记录,移除掉后面的real server,直到这个real server启动后,才会在ipvsadm -ln中添加这条real server 记录。

二、实验搭建

1.实验拓扑图

在这里插入图片描述

2.网络地址规划

主要通过vmware搭建,网络地址规划如下

主机名IP地址虚拟IP地址(vip)服务
centos7192.168.226.128192.168.226.100lvs服务
node01192.168.226.129192.168.226.100lvs服务
node02192.168.226.130192.168.226.100apache http服务
node03192.168.226.131192.168.226.100apache http服务

3.实验操作步骤

3.1 node02和node03服务搭建

这里和上一篇单机版lvs的node02和node03搭建是一样。直接参考单机版lvs搭建的第二大步骤中的1,2操作即可

3.2 centos7和node01的keepalived和lvs搭建

都执行下面的命令,安装keepalived和ipvsadm

yum install keepalived ipvsadm -y

安装后,按照规划,我们将node01设为keepalived中的主
修改keepalived的配置文件
修改之前,作为了一个好习惯,我们要先将配置文件备份下,万一弄坏了,还可以还原

我把node01修改的配置文件贴出来,这里有几个问题说下。
第一:一定要把vrrp_strict注释掉,如果不注释掉,明明keepalived已经在你机器的ens33弄了个子接口和ip,可是你就是不能访问。
第二:

cd /etc/keepalived
cp keepalived.conf keepalived.conf_bak
! 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注释掉,不然你访问虚拟的ip地址
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    #其实这里只有两个值可以写 MASTER和BACKUP  只是个标识,实际起作用的是下面priority 的数值,越大就是master。这个大家可以通过man 5 keepalived.conf 查看下对这个得解释
    state MASTER
    #换成你机器的接口
    interface ens33
    virtual_router_id 51
    #
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        #这个大家可以通过man 5 keepalived.conf  参考里面的实例写
        192.168.226.100/24 dev ens33 label  ens33:1
    }
}

# 下面是针对上面你在virtual_ipaddress 写的vip地址。实际映射到后面哪几个服务器,在这里配置
virtual_server 192.168.226.100 80 {
    delay_loop 6
    #采用轮询的方式,还有其他,还是通过man 5 keepalived.conf查找
    lb_algo rr
    #采用直接路由的的方式,还有其他比如NAT  TUN(隧道),还是通过man 5 keepalived.conf查找
    lb_kind DR
    persistence_timeout 50
    protocol TCP

    real_server 192.168.226.130 80 {
        weight 1
        # HTTP_GET是健康检查,就是我们的keepalived通过调用real server 根据响应码判断服务是否存活
        #具体详情还是man 5 keepalived.conf查找
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.226.131 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

}

备机centos7上面的keepalived.conf配置文件和上面node01的配置差不多一样。
只是centos7备上面与上面的差别是

#备上面需要将state改成BACKUP,虽然我测试的结果是这个影响不大,但是为了让维护者直观知道,这里还是很有必要写成BACKUP的
state BACKUP
#作为备的,这里值一定要比主的小,上面我们node01作为主的设置为100,那么这里只要比100小就行 
priority 80  

3.3 启动keepalived

在启动keepalived之前先看下网卡情况
node01
在这里插入图片描述

centos7
在这里插入图片描述

在node01和centos7上启动keepalived

systemctl start keepalived

在查看下网卡情况
node01的ens33上多了一个子接口,IP为虚拟ip(vip)
在这里插入图片描述
centos7上没有像node01上多个子接口,理由很简单,同一个局域网内部可能出现两个相同的ip地址
在这里插入图片描述

访问vip测试
192.168.226.100

9月 16 16:38:03 node03 systemd[1]: Starting The Apache HTTP Server...

在这里插入图片描述
说明lvs搭建成功
在这里插入图片描述

3.4 keepalived高可用测试

针对高可用测试。我们就要回到最开始的两个问题

第一,单点故障模拟

我们在node01 上关闭keepalived服务查看lvs主是否移动到centos7这台备上面
在node01上执行

systemctl stop keepalived

在centos7上查看网卡是否多了vip
在这里插入图片描述
说明,centos7机器已经从备变成主,在页面访问vip,看是否正常。经过试验是正常访问的。

第二,模拟real server 挂掉后,keepalived是否感知

最开始的centos7的ipvsadm -ln
在这里插入图片描述
我们在node03上执行关闭服务操作

 systemctl stop httpd

然后在centos7上查看是否把node03从ipvsadm -ln中剔除
可以看到192.168.226.131(node03)这条记录被删除了。
在这里插入图片描述
通过浏览器我们可以正常访问,但是只能访问到node02的机器
在这里插入图片描述

3.5 杂记

如果在上面操作的过程中,我们的node01机器被运维处理好了,keepalived重启,那么node01是否会重登主的地位?答案是会的。理由主要是从考虑成本的问题触发。理论上我们既然选择了一台当主机,那么这台主机一定是配置较高的,而备的一般不怎么用得到,所以备机的配置比较低。所以主的修好应该要抢回主的地址。

我们将node01的keepalived服务启动

systemctl start keepalived

在这里插入图片描述

总结

keepalived不仅用在lvs上面,只要有需要保证可靠性的地方,需要做主备的地方,我们都可以考虑下keepalived。而实际上keepalived只是一个软件,如果没有keepalived,我们只要懂得原理,我相信,我们也能够自己开发出一款类似的软件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值