您的位置:首页 > 运维架构 > 网站架构

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

2018-07-24 14:45 253 查看

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工具

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

  python get-pip.py --user

b.使用 

pip
 安装 AWS CLI。

[code]pip install awscli --upgrade --user

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

[code]vi ~/.bash_profile
[code]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。

[code][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

[code]    sudo yum install -y keepalived

    sudo yum install -y haproxy

    sudo yum install -y vim

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

[code]#!/bin/bash

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

INSTANCE_ID=i-abc # 主机实例id

#eipalloc-e563deed 为弹性IP地址id,即10.11.11.12 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的执行权限。

  

[code]  sudo chmod a+x /etc/keepalived/master.sh 

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

[code]! 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 110

    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.sh

} 

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

[code][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.12 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脚本文件

[code][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.12 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实例) 添加脚本执行权限。 

[code]   sudo chmod a+x /etc/keepalived/master.sh

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

14、(BACKUP实例) 修改配置文件/etc/keepalived/keepalived.conf,配置内容修改如下:

[code]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 100
    unicast_src_ip 172.31.82.187
    advert_int 1
    unicast_peer {
       172.31.72.142
    }
    track_script {
      chk_haproxy
    }
    notify_master /etc/keepalived/master.sh
    notify_backup /etc/keepalived/backup.sh
}

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

[code]   sudo systemctl enable haproxy

    sudo chkconfig haproxy on

    sudo systemctl start haproxy

    sudo systemctl enable keepalived

    sudo chkconfig keepalived on

    sudo systemctl start keepalived

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

[code]  yum install -y tcpdump 

17、查看VRRP路由状态,我这里的网络接口是ens5,用ip addr查看,你如果的接口是eth0,这用eth0替换ens5。

[code]sudo tcpdum -i ens5 “ip proto 112”

18、这里最好修改一下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架构搭建成功。

 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: