概述

Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

开始试验

我在ubuntu18.02 虚拟机上模拟 nginx服务的自动故障转移,
该技术是通过使用 keepalived+ virtual IP来实现的。

具体实验步骤如下:
host1: 192.168.56.107
host2: 192.168.56.108

在两台机器上分别安装nginx

sudo apt-get install nginx

然后分别在nginx服务站点的根目录(/var/www/html)创建一个文件:index.html

host1中的index.html内容

<html>
        <head>
                <title>测试keepalived+Virtual IP</title>
                <meta charset="utf8"></meta>
        </head>
        <body>
                <div style="font-size:24px;">服务器:192.168.56.107</div>
        </body>
</html>

host2中的index.html内容

<html>
        <head>
                <title>测试keepalived+Virtual IP</title>
                <meta charset="utf8"></meta>
        </head>
        <body>
                <div style="font-size:24px;">服务器:192.168.56.108</div>
        </body>
</html>

访问 http://192.168.56.107/ 会显示内容 服务器:192.168.56.107
访问 http://192.168.56.108/ 会显示内容 服务器:192.168.56.108
说明nginx已经正常提供服务。

在两台Linux虚拟机上都安装keepalived软件配置后启动服务

sudo apt-get install keepalived

host1上创建配置文件, sudo vim /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
    state MASTER
    interface enp0s8
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass secret
    }
    virtual_ipaddress {
        192.168.56.110
    }
}

然后启动keepalived服务
sudo service keepalived start

这里的虚拟IP地址设置为 192.168.56.110 这个在宿主机上是可以访问到的。
服务启动后查看一下IP地址信息:
ip addr show enp0s8
会看到如图1情况:
图1

host2上创建配置文件, sudo vim /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
    state BACKUP
    interface enp0s8
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass secret
    }
    virtual_ipaddress {
        192.168.56.110
    }
}

启动keepalived服务
sudo service keepalived start
然后 执行命令:ip addr show enp0s8
也看一下IP地址信息:如图2所示
图2

然后访问 http://192.168.56.110时 会显示内容 服务器:192.168.56.107

接着我们模拟 host1服务器出现故障的情况,比如:宕机

在host1上执行 sudo service keepalived stop

然后再次访问 http://192.168.56.110时 会显示内容 服务器:192.168.56.108

从这里可以看出,host1出现故障时,host2的nginx正常提供服务, 已经正常实现了故障转移。

这时我们看一下host2上的IP地址信息,会发现如图3所示
图3

此时host2上ip地址信息中包含虚拟IP “192.168.56.110” 信息。
host2作为虚拟IP:192.168.56.110 在这里生效了。

然后再次模拟host1故障恢复的情况:

在host1上执行 sudo service keepalived start

然后再次访问 http://192.168.56.110时 会显示内容 服务器:192.168.56.107

在host1上再次执行 ip addr show enp0s8命令,查看IP详细信息,如图4所示:
图4

此时host2上ip地址信息中不包含虚拟IP “192.168.56.110” 信息。
host1作为虚拟IP:192.168.56.110 在这里生效了。

由于keepalived配置文件中设置为master以及priority高一些,导致会优先将host1作为服务提供方。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐