AWS 部署 keepalived实战

       新到一家公司,收到部署keepalived的任务。本以为很简单,结果平台是aws,一路踩坑终于部好了。aws部署keepalived的案例网上很少。仅有的几篇写得很粗,而且也有很多坑。特记录部署过程。

        公司系统很简单,接口、服务也很少,无非是想实现故障转移的功能。其实无需部署keepalived就可以实现,刚开始找不到方向,试想了很多架构方案。但在aws都无法实现。最终找到了一个较可行性的方案:


基本思路为:弹性ip(带公网ip地址)---选择性绑定AB两台服务器的弹性网络接口来实现故障转移。

准备工作:

1、新建VPC

2、在VPC下新建一个子网

3、在VPC下的子网中新建两台EC2(不带公网IP)

4、其它网关和安全组等不作详解。aws上有详细的解说和教程。

安装keepalived:

1、先将弹性ip绑定在主服务器A上面(私有地址为10.0.0.6自己配置),并下载证书文件,通过ssh远程连接。

用户名为ec2-user 选择下载的证书登陆。


2、yum安装keepalived

yum install -y keepalived


3、备服务器也是同上安装keepalived

4、修改登陆方式为用户密码登陆

设置root密码    sudo passwd root

切换到root用户   su

修改ssh配置       

sed -ri 's/^#?(PasswordAuthentication)\s+(yes|no)/\1 yes/' /etc/ssh/sshd_config
sed -ri 's/^#?(PermitRootLogin)\s+(yes|no)/\1 yes/' /etc/ssh/sshd_config
sed -ri 's/^/#/;s/sleep 10"\s+/&\n/' /root/.ssh/authorized_keys

重启ssh服务      service sshd restart

安装aws工具

由于此思路是通过keepalived判断服务的可用性,再由aws的命令自动修改弹性ip来实现故障转移,所以还必须安装aws命令工具。

yum install jp awscli

进入AWs控制台/服务/IAM中去创建一个账号,然后创建一个系统管理员的组,把这个账号加入到组中,这个过程中会得到Access Key ID和Secret Access Key。在服务器上运行aws configure进行注册

填入Access Key ID和Secret Access Key(其中Access Key ID是用于集群查Secret Access Key的一个key,而Secret Access Key用作客户端数据的加密和服务端数据的解密)

region是指你服务器所在的区域,比如ap-northeast-2。 

最后一个参数json


配置keepalived

1、AWS中VRRP协议的组播被禁止,所以需修改为单播:配置文件同下

    unicast_src_ip 10.0.0.6                          #本机ip
    unicast_peer {                                       #单播对像ip
    10.0.0.7
    }

主服务器配置文件:/etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {
   script_user root                                 #设置脚本运行账户为root! 不然后面会报错WARNING - default user                                                                                   #'keepalived_script' for script execution does not exist - please create
   enable_script_security                        #设置脚本可运行性
   router_id LVS_MASTER
}
vrrp_instance VI_1 {              
    state MASTER                                     #设置服务器状态为主服务器                                        
    interface eth0                                     #网卡
    virtual_router_id 51                              #vrrp  id  主备必须相同
    priority 100                                          #权重
    advert_int 1
    unicast_src_ip 10.0.0.6                          #本机ip
    unicast_peer {                                       #单播对像ip
    10.0.0.7
    }
    authentication {                                       #服务器间的认证
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {                                      #vip  ip
        10.0.0.8
    }
    notify_master /etc/keepalived/scripts/add_eip.sh          #当此服务器状态变为MASTER时运行的脚本
    notify_backup /etc/keepalived/scripts/del_eip.sh           #当此服务器状态变为BACKUP时运行的脚本
}

2、在/etc/keepalived/下新建scripts       mkdir  /etc/keepalived/scripts

3、授权        chmod -R 711 /etc/keepalived/scripts    注:此处为重点不能设为777,系统会认为不安全,从而不运行脚本

4、新建add_eip.sh脚本 (作用:分离弹性ip,并将弹性ip绑定到自身网口上) 

内容:

#/bin/bash
EIP=13.*.*.201                          #弹性ip地址(公网ip)
INSTANCE_ID=i-0b2d*************   #此服务器(EC2)的实例的id
aws ec2 disassociate-address --public-ip $EIP

aws ec2 associate-address --public-ip $EIP --instance-id $INSTANCE_ID

授权             chmod +x ./add_eip.sh    chmod -R 711 add_eip.sh

5、新建del_eip.sh脚本  (作用和上面类似,可以不要)

内容:

#/bin/bash
EIP=13.*.*.201                                 #弹性ip地址(公网ip)
INSTANCE_ID=i-0b2d*************   #备服务器(EC2)的实例的id
aws ec2 disassociate-address --public-ip $EIP

aws ec2 associate-address --public-ip $EIP --instance-id $INSTANCE_ID

备服务器配置

! Configuration File for keepalived
global_defs {
   script_user root                                 #设置脚本运行账户为root! 不然后面会报错WARNING - default user                                                                                   #'keepalived_script' for script execution does not exist - please create
   enable_script_security                        #设置脚本可运行性
   router_id LVS_SLAVE
}
vrrp_instance VI_1 {              
    state BACKUP                                     #设置服务器状态为备服务器                                        
    interface eth0                                     #网卡
    virtual_router_id 51                              #vrrp  id  主备必须相同
    priority 100                                          #权重
    advert_int 1
    unicast_src_ip 10.0.0.7                        #本机ip
    unicast_peer {                                       #单播对像ip
    10.0.0.6
    }
    authentication {                                       #服务器间的认证
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {                                      #vip  ip
        10.0.0.8
    }
    notify_master /etc/keepalived/scripts/add_eip.sh          #当此服务器状态变为MASTER时运行的脚本
    notify_backup /etc/keepalived/scripts/del_eip.sh           #当此服务器状态变为BACKUP时运行的脚本
}

脚本和主服务器反调一下。

测试

当keepalived状备变为master时。。执行脚本add_eip.sh。切换弹性ip到本服务器。实现故障转移。

猜你喜欢

转载自blog.csdn.net/qijkkwcw/article/details/80900579
AWS