在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工具
[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架构搭建成功。
阅读更多
- AWS北京区域第二个EC2可用区帮助客户构建高可用架构
- redis 主从同步配置以及redis+keeplived高可用架构
- 构建高并发高可用的电商平台架构实践
- LVS+keeplived+nginx+apache搭建高可用、高性能php集群
- nginx+keeplived 集群高可用
- 构建高并发高可用的电商平台架构实践
- 构建高并发高可用的电商平台架构实践
- 构建高并发高可用的电商平台架构实践
- 【转】构建高并发高可用的电商平台架构实践
- haproxy+keeplived实现高可用负载均衡
- LVS+keeplived+nginx+apache搭建高可用、高性能php集群
- 构建高并发高可用的电商平台架构实践(2)
- LVS+keeplived+nginx+apache搭建高可用、高性能php集群
- 构建高并发高可用的电商平台架构实践
- 构建高并发高可用的电商平台架构实践
- Spring Cloud构建微服务架构(六)高可用服务注册中心
- LVS+keeplived+nginx+apache搭建高可用、高性能php集群
- 构建高并发高可用的电商平台架构实践
- LVS+keeplived+nginx+tomcat高可用、高性能jsp集群