在AWS构建跨可用区域高可用Keeplived架构

1、在AWS上构建跨可用区域(AZ)高可用(HA)的Keeplived服务。Keeplived采用主从模式。架构图如下:


2、去AWS IAM WEB UI控制台,创建一个角色。步骤如下:

创建角色-》选择EC2产品-》创建策略(Policy)-》服务项,选择EC2;操作添加以下API操作。

DisassociateAddress,DescribeInstances,DescribeInstances,UnassignPrivateIpAddresses,AssignPrivateIpAddresses,AssociateAddress,DescribeInstanceStatus。

保存名称为:keepalived

3、新建一个用户awscli,分配keepalived的角色,用于操作aws cli API。创建好用户,会生成一个Access Key ID 和 Secret Access Key。下载csv文件到本地电脑。后面调用API需要用到。

4、在AWS实现跨可用区域的Keepalived 实现主从模式,由于利用虚拟IP,无法实现在VPC内实现跨区域访问,所以只能利用弹性IP实现,当然也可以购买AWS DNS 53服务。


要实现主从模式,首先要准备两天EC2实力,MASTER,BACKUP。两台机器都必须具有访问公网的能力,也就是两台机器

都必须有公网ip也就是public ip。这里我给MASTER BACKUP都分配公网ip。说明见表格如下:

机器       IP 公网ip 实例ID
MASTER(主机名:  master1) 172.31.72.142 A区 10.11.11.12 i-abc
BACKUP(主机名称:master2) 172.31.82.187 B区 10.11.11.13 i-efg 

5、(MASTER实例、BACKUP实例)安装aws cli命令。

a.安装pip工具

    curl -O https://bootstrap.pypa.io/get-pip.py

    python get-pip.py --user

b.使用 pip 安装 AWS CLI。

pip install awscli --upgrade --user

c.将AWS命令加入加入PATH中。我这里,以root执行,把aws命令,加入到root身份的环境中。

vi ~/.bash_profile

export PATH=~/.local/bin:$PATH

source ~/.bash_profile

6、(MASTER实例、BACKUP实例) 配置AWS CLI证书,打开之前下载的证书csv文件,里面有Access Key ID 和Secret Access Key。

在MASTER和BACKUP都配置AWS CLI证书,配置方法执行aws configure按提示输入就OK。

[root@master1 centos]# aws configure
AWS Access Key ID [****************S3FA]:XXX
AWS Secret Access Key [****************Tzlj]:XXX
Default region name [us-east-1]:us-east-1
Default output format [json]:json

7、(MASTER实例、BACKUP实例)安装keeplived,haproxy

    sudo yum install -y keepalived
    sudo yum install -y haproxy
    sudo yum install -y vim

8、(MASTE实例)编写notify_master脚本文件,vim /etc/keepalived/master.sh

#!/bin/bash

EIP=10.11.11.12 # MASTER IP地址也是弹性IP地址

INSTANCE_ID=i-abc # 主机实例id
#eipalloc-e563deed 为弹性IP地址id,即10.11.11.1 ip地址
/root/.local/bin/aws ec2 disassociate-address --association-id eipalloc-e563deed
/root/.local/bin/aws ec2 associate-address --public-ip $EIP --instance-id $INSTANCE_ID 

9、(MASTER实例)修改master.sh的执行权限。

    sudo chmod a+x /etc/keepalived/master.sh 

10、(MASTER实例)修改配置文件/etc/keepalived/keepalived.conf,编辑内容如下:

! Configuration File for keepalived

global_defs {
    router_id LVS_DEVEL
}

vrrp_script chk_haproxy {
   script "killall -0 haproxy"
   interval 3
   weight 5
}

vrrp_script check_apiserver {
script "/etc/keepalived/check_apiserver.sh"
interval 3
weight -2
fall 10
rise 2
}

vrrp_instance VI_1 {
    state MASTER
    debug 2
    interface ens5
    virtual_router_id 51
    priority 101
    unicast_src_ip 172.31.72.142
    advert_int 1
    unicast_peer {
       172.31.82.187
    }
    track_script {
       chk_haproxy
    }
    notify_master /etc/keepalived/master.h

11、(BACKUP实例)编写notify_master脚本文件。脚本内容如下:

[root@master2 centos]vim /etc/keepalived/master.sh

#!/bin/bash

EIP=10.11.11.12 # MASTER IP地址也是弹性IP地址

INSTANCE_ID=i-efg #备份机实例id

#eipalloc-e563deed 为弹性IP地址id,即10.11.11.1 ip地址
/root/.local/bin/aws ec2 disassociate-address --association-id eipalloc-e563deed

/root/.local/bin/aws ec2 associate-address --public-ip $EIP --instance-id $INSTANCE_ID 

12、(BACKUP实例)编写notify_backup脚本文件

[root@master2 centos] vim /etc/keepalived/backup.sh

#!/bin/bash

BACKUPIP=10.11.11.13  #备机的ip地址,此台机器为备机,当主机启动时候,需要释放主机ip,还原备份机器ip
EIP=10.11.11.12 # 弹性ip,也是主机的ip

BACKUP_INSTANCE_ID=i-efg # 备机实例
MASTER_INSTANCE_ID=i-abc  # 主机实例

#还原备份机器ip
/root/.local/bin/aws ec2 associate-address --public-ip $BACKUPIP --instance-id $BACKUP_INSTANCE_ID
#释放主机ip,eipalloc-e563deed 为弹性IP地址id,即10.11.11.1 ip地址
/root/.local/bin/aws ec2 disassociate-address --association-id eipalloc-e563deed
#给主机添加上ip
/root/.local/bin/aws ec2 associate-address --public-ip $EIP --instance-id $MASTER_INSTANCE_ID 

13、(BACKUP实例) 添加脚本执行权限。

    sudo chmod a+x /etc/keepalived/master.sh

    sudo chmod a+x /etc/keepalived/backup.sh

14、(MASTER实例、BACKUP实例) 执行下面命令,启动服务。先启动MASTE服务,再启动BACKUP服务。

    sudo systemctl enable haproxy
    sudo chkconfig haproxy on
    sudo systemctl start haproxy
    sudo systemctl enable keepalived
    sudo chkconfig keepalived on
    sudo systemctl start keepalived

15、在MASTER或者BACKUP机器上,或者所有机器安装tcpdump工具查看虚拟路由(VRRP)状态。

  yum install -y tcpdump 
16、查看VRRP路由状态,我这里的网络接口是ens5,用ip addr查看,你如果的接口是eth0,这用eth0替换ens5。
sudo tcpdum -i ens5 “ip proto 112”

17、这里最好修改一下Keepalive输出日志,因为默认都是在/var/log/messages输出的,怎么修改Keepalive单独日志,网上有方法。由于篇幅关系,这里不再给出。

测试步骤:

1、两边服务都起来后,看看MASTER keepalived是否是MASTER状态,BACKUP keepalived是否是BACKUP状态。

2、停掉MASTER,看看BACKUP实例,BACKUP keepalived是否由backup状态变成master状态,同时BACKUP公网IP是否变成MASTER的IP,用MASTER 之前的IP登录一下,看一下主机名称就可以了。这时候MASTER公网IP被BACKUP抢占。

3、启动MASTER,看看BACKUP实例的keepalived是否又由master状态变成backup状态,同时MASTER公网IP被恢复,BACKUP公网IP又回到之前的IP。

4、也可以观察tcpdump的监控情况。上面测试都通过,AWS跨可用区域的高可用Keepalived架构搭建成功。


猜你喜欢

转载自blog.csdn.net/QFYJ_TL/article/details/81013925
今日推荐