文档首页/ 虚拟私有云 VPC/ 用户指南/ 虚拟IP地址/ 虚拟IP配置示例/ 使用虚拟IP和Keepalived搭建高可用Web集群
更新时间:2024-10-25 GMT+08:00

使用虚拟IP和Keepalived搭建高可用Web集群

应用场景

虚拟IP(Virtual IP Address)是从VPC子网网段中划分的一个内网IP地址,通常搭配高可用软件(比如Keepalived)使用,主要用来搭建高可用的主备集群。多个云服务器形成主备集群,当主云服务器发生故障无法对外提供服务时,系统动态将虚拟IP切换到备云服务器,通过备云服务器继续对外提供服务。本文档为您详细介绍使用虚拟IP和Keepalived搭建高可用Web集群的方法。

方案架构

本示例中,高可用Web集群架构如图1所示,将虚拟IP同时绑定至ECS-HA1和ECS-HA2,使用Keepalived搭建一个高可用集群。同时,为虚拟IP绑定EIP,该集群具备公网访问能力,可以面向公网提供Web访问服务。实现原理如下:
  1. ECS-HA1作为主云服务器,通过与虚拟IP绑定的EIP对外提供服务,ECS-HA2作为备云服务器不承载实际业务。
  2. 当ECS-HA1发生故障时,此时会自动启用ECS-HA2,ECS-HA2将会接管业务并对外提供服务,实现业务不中断的高可用需求。
图1 使用虚拟IP和Keepalived搭建高可用Web集群

方案优势

基于虚拟IP和Keepalived能力,采用“一主一备”或“一主多备”的方法组合使用云服务器,这些云服务器对外呈现为一个虚拟IP。当主云服务器故障时,备云服务器可以转为主云服务器并继续对外提供服务,以此达到高可用性HA(High Availability)的目的,可以解决用户由于云服务器故障导致的对外服务中断问题。

约束与限制

使用虚拟IP搭建的高可用集群,所有服务器必须位于同一个虚拟私有云的子网内。

资源规划说明

本示例中,虚拟私有云VPC和子网、虚拟IP、弹性公网IP以及弹性云服务器ECS等资源只要位于同一个区域内即可,可用区可以任意选择,无需保持一致。

以下资源规划详情仅为示例,您可以根据需要自行修改。

表1 使用虚拟IP和Keepalived搭建高可用Web集群资源规划总体说明

资源类型

资源数量

说明

虚拟私有云VPC和子网

1

  • VPC名称:请根据实际情况填写,本示例为VPC-A。
  • IPv4网段:请根据实际情况填写,本示例为192.168.0.0/16。
  • 子网名称:请根据实际情况填写,本示例为Subnet-A01。
  • 子网IPv4网段:请根据实际情况填写,本示例为192.168.0.0/24。

弹性云服务器ECS

2

本示例中,需要两个ECS作为主备倒换,配置说明如下:

  • 名称:根据实际情况填写,本示例分别为ECS-HA1和ECS-HA2。
  • 镜像:请根据实际情况选择,本示例为公共镜像(CentOS 7.8 64bit)。
  • 系统盘:通用型SSD盘,40GB。
  • 数据盘:本示例未选购数据盘,请您根据实际业务需求选购数据盘,并切实考虑两个ECS节点之间的业务数据一致性问题。
  • 网络:
    • 虚拟私有云:选择您的虚拟私有云,本示例为VPC-A。
    • 子网:选择子网,本示例为Subnet-A01。
  • 安全组:请根据实际情况选择,本示例中ECS-HA1和ECS-HA2使用同一个安全组,安全组名称为Sg-A。
  • 私有IP地址:ECS-HA1为192.168.0.195,ECS-HA2为192.168.0.233

虚拟IP

1

在子网Subnet-A01中申请虚拟IP地址:

  • 创建方式:根据实际情况填写,本示例为自动分配。
  • 虚拟IP地址:本示例为192.168.0.177。
  • 绑定实例:将虚拟IP绑定至ECS-HA1和ECS-HA2。
  • 绑定弹性公网IP:将虚拟IP绑定至EIP-A。

弹性公网IP

1

  • 计费模式:请根据情况选择计费模式,本示例为按需计费。
  • EIP名称:请根据实际情况填写,本示例为EIP-A。
  • EIP地址:EIP地址系统随机分配,本示例为124.X.X.187。

操作流程

使用虚拟IP和Keepalived搭建高可用Web集群,流程如图2所示。

图2 使用虚拟IP和Keepalived搭建高可用Web集群

步骤一:创建云服务资源

  1. 创建1个VPC和1个子网。

    具体方法请参见创建虚拟私有云和子网

  2. 创建2个ECS,分别作为主ECS和备ECS。

    具体方法请参见自定义购买ECS

    本示例中,ECS的网络配置详情如下:
    • 网络:选择已创建的虚拟私有云和子网,VPC-A和Subnet-A01。
    • 安全组:新建一个安全组Sg-A,并添加入方向和出方向规则。您在创建安全组的时候,系统会自动添加部分规则,您需要根据实际情况进行检查修改。

      本示例中,ECS-HA1和ECS-HA2属于同一个安全组,您需要确保表2中的规则均已正确添加。

      表2 安全组Sg-A规则说明

      方向

      策略

      类型

      协议端口

      源地址/目的地址

      描述

      入方向

      允许

      IPv4

      TCP: 22

      源地址:0.0.0.0/0

      放通安全组内ECS的SSH(22)端口,用于远程登录Linux ECS。

      入方向

      允许

      IPv4

      TCP: 3389

      源地址:0.0.0.0/0

      放通安全组内ECS的RDP(3389)端口,用于远程登录Windows ECS。

      入方向

      允许

      IPv4

      TCP: 80

      源地址:0.0.0.0/0

      放通安全组内ECS的HTTP(80)端口,用于外部通过HTTP协议访问ECS上部署的网站。

      入方向

      允许

      IPv4

      全部

      源地址:当前安全组Sg-A

      针对IPv4,用于安全组内ECS之间网络互通。

      入方向

      允许

      IPv6

      全部

      源地址:当前安全组Sg-A

      针对IPv6,用于安全组内ECS之间网络互通。

      出方向

      允许

      IPv4

      全部

      目的地址:0.0.0.0/0

      针对IPv4,用于安全组内ECS访问外部,允许流量从安全组内ECS流出。

      出方向

      允许

      IPv6

      全部

      目的地址:::/0

      针对IPv6,用于安全组内ECS访问外部,允许流量从安全组内ECS流出。

      本示例中,源地址设置为0.0.0.0/0表示允许所有外部IP远程登录云服务器,为了确保安全,建议您遵循最小原则,根据实际情况将源IP设置为特定的IP地址,比如,源地址设置为您的本地PC地址。

      如果您的ECS位于不同的安全组,比如ECS-HA1属于Sg-A,ECS-HA2属于Sg-B,则除了在两个安全组中分别配置表2中的规则,您还需要添加表3中的规则,放通两个安全组之间的内网网络流量。

      表3 安全组Sg-A和Sg-B规则说明

      安全组

      方向

      策略

      类型

      协议端口

      源地址/目的地址

      描述

      Sg-A

      入方向

      允许

      IPv4

      全部

      源地址:Sg-B

      针对全部IPv4协议,允许来自Sg-B内实例的流量访问Sg-A内的实例。

      Sg-B

      入方向

      允许

      IPv4

      全部

      源地址:Sg-A

      针对全部IPv4协议,允许来自Sg-A内实例的流量访问Sg-B内的实例。

    • 弹性公网IP:选择“暂不购买”。
  3. 在子网Subnet-A01内,申请虚拟IP地址。

    具体方法请参见申请虚拟IP地址

  4. 申请弹性公网IP。

    具体方法请参见购买弹性公网IP

步骤二:为主备ECS配置Keepalived

  1. 执行以下操作,为ECS-HA1配置Keepalived。
    1. 将EIP绑定至ECS-HA1。

      具体方法请参见绑定弹性公网IP

    2. 远程登录ECS-HA1。

      ECS有多种登录方法,具体请参见登录弹性云服务器

    3. 执行以下命令,安装Nginx、Keepalived软件包及相关依赖包。

      yum install nginx keepalived -y

      回显类似如下信息,表示安装完成。
      [root@ecs-ha1 ~]# yum install nginx keepalived -y
      Loaded plugins: fastestmirror
      Determining fastest mirrors
      base                                                                                                                                                                 | 3.6 kB  00:00:00     
      epel                                                                                                                                                                 | 4.3 kB  00:00:00     
      extras                                                                                                                                                               | 2.9 kB  00:00:00     
      updates                                                                                                                                                              | 2.9 kB  00:00:00     
      (1/7): epel/x86_64/group                                                                                                                                             | 399 kB  00:00:00     
      (2/7): epel/x86_64/updateinfo                                                                                                                                        | 1.0 MB  00:00:00     
      (3/7): base/7/x86_64/primary_db                                                                                                                                      | 6.1 MB  00:00:00     
      (4/7): base/7/x86_64/group_gz                                                                                                                                        | 153 kB  00:00:00     
      (5/7): epel/x86_64/primary_db                                                                                                                                        | 8.7 MB  00:00:00     
      (6/7): extras/7/x86_64/primary_db                                                                                                                                    | 253 kB  00:00:00     
      (7/7): updates/7/x86_64/primary_db      
      
      .....
      Dependency Installed:
        centos-indexhtml.noarch 0:7-9.el7.centos                   gperftools-libs.x86_64 0:2.6.1-1.el7                 lm_sensors-libs.x86_64 0:3.4.0-8.20160601gitf9185e5.el7_9.1             
        net-snmp-agent-libs.x86_64 1:5.7.2-49.el7_9.4              net-snmp-libs.x86_64 1:5.7.2-49.el7_9.4              nginx-filesystem.noarch 1:1.20.1-10.el7                                 
        openssl11-libs.x86_64 1:1.1.1k-7.el7                      
      
      Complete!
    4. 执行以下操作,修改Nginx配置文件,添加80端口相关配置。
      1. 执行以下命令,打开“/etc/nginx/nginx.conf”文件。

        vim /etc/nginx/nginx.conf

      2. i进入编辑模式。
      3. 将文件中原有的内容,全部替换成以下内容。
        user root;
        worker_processes 1;
        #error_log logs/error.log;
        #error_log logs/error.log notice;
        #error_log logs/error.log info;
        #pid logs/nginx.pid;
        events {
              worker_connections 1024;
              }
        http {
             include mime.types;
             default_type application/octet-stream;
             #log_format main '$remote_addr  - $remote_user [$time_local] "$request" '
             # '$status $body_bytes_sent  "$http_referer" '
             # '"$http_user_agent"  "$http_x_forwarded_for"';
             #access_log logs/access.log main;
             sendfile on;
             #tcp_nopush on;
             #keepalive_timeout 0;
             keepalive_timeout 65;
             #gzip on;
             server {
                  listen 80;
                  server_name localhost;
                  #charset koi8-r;
                  #access_log logs/host.access.log main;
                  location / {
                            root html;
                            index index.html index.htm;
                            }
                  #error_page 404  /404.html;
                  # redirect server error pages to the static page /50x.html
                  error_page 500 502 503 504 /50x.html;
                  location =  /50x.html {
                                      root html;
                                      }
                  }
        }
      4. ESC退出,并输入:wq!保存配置。
    5. 执行以下操作,修改index.html文件内容,用来验证网站的访问情况。
      1. 执行以下命令,打开“/usr/share/nginx/html/index.html”文件。

        vim /usr/share/nginx/html/index.html

      2. i进入编辑模式。
      3. 将文件中原有的内容,全部替换成以下内容。
        Welcome to ECS-HA1
      4. ESC退出,并输入:wq!保存配置。
    6. 执行以下命令,设置Nginx服务开机自启动,并启动Nginx服务。

      systemctl enable nginx

      systemctl start nginx.service

      回显类似如下信息:
      [root@ecs-ha1 ~]# systemctl enable nginx
      Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
      [root@ecs-ha1 ~]# systemctl start nginx.service
    7. 打开浏览器,并输入EIP地址(124.X.X.187),验证Nginx单节点的访问情况。
      网页如下图所示,表示ECS-HA1的Nginx配置成功。
      图3 ECS-HA1访问验证
    8. 执行以下操作,修改Keepalived配置文件。
      1. 执行以下命令,打开“/etc/keepalived/keepalived.conf”文件。

        vim /etc/keepalived/keepalived.conf

      2. i进入编辑模式。
      3. 根据实际情况,替换配置文件中的IP参数,并将文件中原有的内容,全部替换成以下内容。
        • mcast_src_ip和unicast_src_ip:替换为ECS-HA1的私有IP地址,本示例为192.168.0.195。
        • virtual_ipaddress:替换为虚拟IP地址,本示例为192.168.0.177。
        ! Configuration File for keepalived
        global_defs {
        router_id master-node
        }
        vrrp_script chk_http_port {
                  script  "/etc/keepalived/chk_nginx.sh"
                  interval 2
                  weight -5
                  fall 2
                  rise 1
                }
        vrrp_instance VI_1 {
             state BACKUP
             interface eth0
             mcast_src_ip 192.168.0.195
             virtual_router_id 51
             priority 100
             advert_int 1
             authentication {
                       auth_type PASS
                       auth_pass 1111
                       }
             unicast_src_ip 192.168.0.195                                                  
             virtual_ipaddress {
                            192.168.0.177
                            }
        track_script {
             chk_http_port
             }
        }
      4. ESC退出,并输入:wq!保存配置。
    9. 执行以下操作,配置Nginx监控脚本。
      1. 执行以下命令,打开“/etc/keepalived/chk_nginx.sh”文件。

        vim /etc/keepalived/chk_nginx.sh

      2. i进入编辑模式。
      3. 将文件中原有的内容,全部替换成以下内容。
        #!/bin/bash
        counter=$(ps -C nginx --no-heading|wc -l)
        if [ "${counter}" = "0"  ]; then
             systemctl start nginx.service
             sleep 2
             counter=$(ps -C nginx  --no-heading|wc -l)
             if [ "${counter}" =  "0" ]; then
                  systemctl stop keepalived.service
             fi
        fi
      4. ESC退出,并输入:wq!保存配置。
    10. 执行以下命令,为“chk_nginx.sh”文件添加执行权限。

      chmod +x /etc/keepalived/chk_nginx.sh

    11. 执行以下命令,设置Keepalived服务开机自启动,并启动Keepalived服务。

      systemctl enable keepalived

      systemctl start keepalived.service

    12. 将EIP和ECS-HA1解绑定。

      具体方法请参见解绑弹性公网IP

  2. 执行以下操作,为ECS-HA2配置Keepalived。
    1. 将EIP绑定至ECS-HA2。

      具体方法请参见绑定弹性公网IP

    2. 远程登录ECS-HA2。

      ECS有多种登录方法,具体请参见登录弹性云服务器

    3. 执行以下命令,安装Nginx、Keepalived软件包及相关依赖包。

      yum install nginx keepalived -y

      回显类似如下信息,表示安装完成。
      [root@ecs-ha2 ~]# yum install nginx keepalived -y
      Loaded plugins: fastestmirror
      Determining fastest mirrors
      base                                                                                                                                                                 | 3.6 kB  00:00:00     
      epel                                                                                                                                                                 | 4.3 kB  00:00:00     
      extras                                                                                                                                                               | 2.9 kB  00:00:00     
      updates                                                                                                                                                              | 2.9 kB  00:00:00     
      (1/7): epel/x86_64/group                                                                                                                                             | 399 kB  00:00:00     
      (2/7): epel/x86_64/updateinfo                                                                                                                                        | 1.0 MB  00:00:00     
      (3/7): base/7/x86_64/primary_db                                                                                                                                      | 6.1 MB  00:00:00     
      (4/7): base/7/x86_64/group_gz                                                                                                                                        | 153 kB  00:00:00     
      (5/7): epel/x86_64/primary_db                                                                                                                                        | 8.7 MB  00:00:00     
      (6/7): extras/7/x86_64/primary_db                                                                                                                                    | 253 kB  00:00:00     
      (7/7): updates/7/x86_64/primary_db      
      
      .....
      Dependency Installed:
        centos-indexhtml.noarch 0:7-9.el7.centos                   gperftools-libs.x86_64 0:2.6.1-1.el7                 lm_sensors-libs.x86_64 0:3.4.0-8.20160601gitf9185e5.el7_9.1             
        net-snmp-agent-libs.x86_64 1:5.7.2-49.el7_9.4              net-snmp-libs.x86_64 1:5.7.2-49.el7_9.4              nginx-filesystem.noarch 1:1.20.1-10.el7                                 
        openssl11-libs.x86_64 1:1.1.1k-7.el7                      
      
      Complete!
    4. 执行以下操作,修改Nginx配置文件,添加80端口相关配置。
      1. 执行以下命令,打开“/etc/nginx/nginx.conf”文件。

        vim /etc/nginx/nginx.conf

      2. i进入编辑模式。
      3. 将文件中原有的内容,全部替换成以下内容。
        user root;
        worker_processes 1;
        #error_log logs/error.log;
        #error_log logs/error.log notice;
        #error_log logs/error.log info;
        #pid logs/nginx.pid;
        events {
              worker_connections 1024;
              }
        http {
             include mime.types;
             default_type application/octet-stream;
             #log_format main '$remote_addr  - $remote_user [$time_local] "$request" '
             # '$status $body_bytes_sent  "$http_referer" '
             # '"$http_user_agent"  "$http_x_forwarded_for"';
             #access_log logs/access.log main;
             sendfile on;
             #tcp_nopush on;
             #keepalive_timeout 0;
             keepalive_timeout 65;
             #gzip on;
             server {
                  listen 80;
                  server_name localhost;
                  #charset koi8-r;
                  #access_log logs/host.access.log main;
                  location / {
                            root html;
                            index index.html index.htm;
                            }
                  #error_page 404  /404.html;
                  # redirect server error pages to the static page /50x.html
                  error_page 500 502 503 504 /50x.html;
                  location =  /50x.html {
                                      root html;
                                      }
                  }
        }
      4. ESC退出,并输入:wq!保存配置。
    5. 执行以下操作,修改index.html文件内容,用来验证网站的访问情况。
      1. 执行以下命令,打开“/usr/share/nginx/html/index.html”文件。

        vim /usr/share/nginx/html/index.html

      2. i进入编辑模式。
      3. 将文件中原有的内容,全部替换成以下内容。
        Welcome to ECS-HA2
      4. ESC退出,并输入:wq!保存配置。
    6. 执行以下命令,设置Nginx服务开机自启动,并启动Nginx服务。

      systemctl enable nginx

      systemctl start nginx.service

      回显类似如下信息:
      [root@ecs-ha2 ~]# systemctl enable nginx
      Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
      [root@ecs-ha2 ~]# systemctl start nginx.service
    7. 打开浏览器,并输入EIP地址(124.X.X.187),验证Nginx单节点的访问情况。
      网页如下图所示,表示ECS-HA2的Nginx配置成功。
      图4 ECS-HA2访问验证
    8. 执行以下操作,修改Keepalived配置文件。
      1. 执行以下命令,打开“/etc/keepalived/keepalived.conf”文件。

        vim /etc/keepalived/keepalived.conf

      2. i进入编辑模式。
      3. 根据实际情况,替换配置文件中的IP参数,并将文件中原有的内容,全部替换成以下内容。
        • mcast_src_ip和unicast_src_ip:替换为ECS-HA2的私有IP地址,本示例为192.168.0.233。
        • virtual_ipaddress:替换为虚拟IP地址,本示例为192.168.0.177。
        ! Configuration File for keepalived
        global_defs {
        router_id master-node
        }
        vrrp_script chk_http_port {
                  script  "/etc/keepalived/chk_nginx.sh"
                  interval 2
                  weight -5
                  fall 2
                  rise 1
                }
        vrrp_instance VI_1 {
             state BACKUP
             interface eth0
             mcast_src_ip 192.168.0.233
             virtual_router_id 51
             priority 100
             advert_int 1
             authentication {
                       auth_type PASS
                       auth_pass 1111
                       }
             unicast_src_ip 192.168.0.233                                                  
             virtual_ipaddress {
                            192.168.0.177
                            }
        track_script {
             chk_http_port
             }
        }
      4. ESC退出,并输入:wq!保存配置。
    9. 执行以下操作,配置Nginx监控脚本。
      1. 执行以下命令,打开“/etc/keepalived/chk_nginx.sh”文件。

        vim /etc/keepalived/chk_nginx.sh

      2. i进入编辑模式。
      3. 将文件中原有的内容,全部替换成以下内容。
        #!/bin/bash
        counter=$(ps -C nginx --no-heading|wc -l)
        if [ "${counter}" = "0"  ]; then
             systemctl start nginx.service
             sleep 2
             counter=$(ps -C nginx  --no-heading|wc -l)
             if [ "${counter}" =  "0" ]; then
                  systemctl stop keepalived.service
             fi
        fi
      4. ESC退出,并输入:wq!保存配置。
    10. 执行以下命令,为“chk_nginx.sh”文件添加执行权限。

      chmod +x /etc/keepalived/chk_nginx.sh

    11. 执行以下命令,设置Keepalived服务开机自启动,并启动Keepalived服务。

      systemctl enable keepalived

      systemctl start keepalived.service

    12. 将EIP和ECS-HA2解绑定。

      具体方法请参见解绑弹性公网IP

步骤三:将虚拟IP绑定至主备ECS及EIP

  1. 将虚拟IP分别绑定至主备ECS上,本示例中需要绑定ECS-HA1和ECS-HA2。

    具体操作请参见将虚拟IP地址绑定至实例或EIP

  2. 关闭主备ECS网卡的“源/目的检查”功能。
    将虚拟IP绑定至ECS时,系统会自动关闭ECS网卡的“源/目的检查”功能,您需要参考以下操作检查关闭情况。如果未关闭,则请关闭该功能。
    1. 在ECS列表中,单击目标ECS的名称。

      进入ECS详情页。

    2. 选择“弹性网卡”页签,并单击展开ECS的网卡详情区域,可以查看“源/目的检查”功能。

      图5所示,表示“源/目的检查”功能已关闭。

      图5 关闭网卡的“源/目的检查”功能
  3. 将虚拟IP绑定至EIP上,本示例中需要绑定EIP-A。

    具体操作请参见将虚拟IP地址绑定至实例或EIP

步骤四:关闭备ECS的IP转发功能

使用虚拟IP构建主备场景的高可用集群时,需要关闭备ECS的IP转发功能,当主备ECS切换后,则需要确保新的备ECS也关闭IP转发功能。

为了避免ECS主备切换后遗漏配置,建议您将主备ECS的IP转发功能全都关闭。

  1. 打开浏览器,并输入EIP地址(124.X.X.187),通过网页确认主ECS。
    网页如下图所示,表示此时主ECS是ECS-HA1。
    图6 主ECS验证
  2. 远程登录备ECS,本示例是ECS-HA2。

    ECS有多种登录方法,具体请参见登录弹性云服务器

  3. 请根据ECS的操作系统,在表4中选择关闭IP转发功能的操作,本示例ECS为Linux操作系统。
    表4 关闭IP转发功能

    操作系统

    操作指导

    Linux系统

    1. 执行以下命令,切换root用户。

      su root

    2. 执行以下命令,查看IP转发功能是否已开启。

      cat /proc/sys/net/ipv4/ip_forward

      回显结果:1为开启,0为关闭,默认为0。

      • 回显为0,任务结束。
      • 回显为1,继续执行以下操作。
    3. 以下提供两种方法修改配置文件,二选一即可。
      方法一:
      1. 执行以下命令,打开“/etc/sysctl.conf”文件。

        vim /etc/sysctl.conf

      2. i进入编辑模式。
      3. 修改net.ipv4.ip_forward = 0。
      4. ESC退出,并输入:wq!保存配置。

      方法二:

      执行sed命令,命令示例如下:

      sed -i '/net.ipv4.ip_forward/s/1/0/g' /etc/sysctl.conf

    4. 执行以下命令,使修改生效。

      sysctl -p /etc/sysctl.conf

    Windows系统

    1. 在搜索框中输入cmd,打开Windows系统的“命令提示符”窗口,执行以下命令。

      ipconfig/all

      • 回显结果中,“IP 路由已启用”为 “否”, 表示IP转发功能已关闭。
      • 回显结果中,“IP 路由已启用”为 “是”, 表示IP转发功能未关闭,继续执行以下操作。
    2. 在搜索框中输入regedit,打开注册表编辑器。
    3. 编辑HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下的IPEnableRouter值为0。
      • 指定值为 0:关闭 IP 转发。
      • 指定值为 1:启用 IP 转发。

步骤五:验证主备ECS的自动切换功能

  1. 执行以下操作,分别重启主备ECS。
    1. 远程登录ECS-HA1。

      ECS有多种登录方法,具体请参见登录弹性云服务器

    2. 执行以下命令,重启ECS-HA1。

      reboot

    3. 参考1.a~1.b,重启ECS-HA2。
  2. 执行以下操作,验证主ECS的网页访问情况。
    1. 打开浏览器,并输入EIP地址(124.X.X.187),验证主ECS的网页访问情况。
      网页如下图所示,表示此时主ECS是ECS-HA1,且网页访问正常。
      图7 主ECS验证(ECS-HA1)
    2. 远程登录ECS-HA1,并执行以下命令,查看虚拟IP是否已绑定到ECS-HA1的eth0网卡上。

      ip addr show

      回显类似如下信息,可以看到虚拟IP(192.168.0.177)已绑定至eth0网卡上,再次确认ECS-HA1为主ECS。
      [root@ecs-ha1 ~]# ip addr show
      1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
          link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
          inet 127.0.0.1/8 scope host lo
             valid_lft forever preferred_lft forever
          inet6 ::1/128 scope host 
             valid_lft forever preferred_lft forever
      2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
          link/ether fa:16:3e:fe:56:19 brd ff:ff:ff:ff:ff:ff
          inet 192.168.0.195/24 brd 192.168.0.255 scope global noprefixroute dynamic eth0
             valid_lft 107898685sec preferred_lft 107898685sec
          inet 192.168.0.177/32 scope global eth0
             valid_lft forever preferred_lft forever
          inet6 fe80::f816:3eff:fefe:5619/64 scope link 
             valid_lft forever preferred_lft forever
    3. 执行以下命令,停止主ECS的Keepalived服务,本示例中主ECS为ECS-HA1。

      systemctl stop keepalived.service

  3. 执行以下命令,验证主ECS是否切换成ECS-HA2。
    1. 远程登录ECS-HA2,并执行以下命令,查看虚拟IP是否已绑定到ECS-HA2的eth0网卡上。

      ip addr show

      回显类似如下信息,可以看到虚拟IP(192.168.0.177)已绑定至eth0网卡上,此时确认ECS-HA2为主ECS。
      [root@ecs-ha2 ~]# ip addr show
      1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
          link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
          inet 127.0.0.1/8 scope host lo
             valid_lft forever preferred_lft forever
          inet6 ::1/128 scope host 
             valid_lft forever preferred_lft forever
      2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
          link/ether fa:16:3e:fe:56:3f brd ff:ff:ff:ff:ff:ff
          inet 192.168.0.233/24 brd 192.168.0.255 scope global noprefixroute dynamic eth0
             valid_lft 107898091sec preferred_lft 107898091sec
          inet 192.168.0.177/32 scope global eth0
             valid_lft forever preferred_lft forever
          inet6 fe80::f816:3eff:fefe:563f/64 scope link 
             valid_lft forever preferred_lft forever
    2. 打开浏览器,并输入EIP地址(124.X.X.187),验证ECS-HA2作为主ECS时的网页访问情况。
      网页如下图所示,表示此时主ECS是ECS-HA2,且网页访问正常。
      图8 主ECS验证(ECS-HA2)