ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

aws ec2 keepalived 的高可用构建

2019-02-21 15:56:52  阅读:271  来源: 互联网

标签:script keepalived aws 192.168 master ec2 IP user


前言:

AWS 已有ALB (Application Load Balancer) 和 NLB (Network Load Balancer),可滿足大部分業務需求,但某些業務場景仍需要自建高可用環境。
此文便是基於AWS EC2 自建高可用主機。

準備:

EC2 host1:192.168.10.10
EC2 host2:192.168.10.20
Float IP:192.168.10.30

思路:

AWS EC2 主機支持分配輔助IP,可使用AWS CLI 創建輔助IP,基於此方式,只要當主機或服務出現故障時,將輔助IP 分配給另一臺正常的主機即可。
那麼要解決的就是對主機及服務的判斷,最初的想法是寫個腳本做存活判斷,即:
1.主機讀取指定status文件內字符,判斷是否屬於master,然後檢測自身的服務是否處於存活狀態,存活則pass,否則檢查另一臺主機及服務狀態,存活則將Float IP 分配給另一個存活的主機並改寫status文件內容。
2.不屬於master,則檢測自身的服務是否處於存活狀態,存活則檢查master服務是否存活,存活則pass,否則將Float IP 分配給自己並改寫status文件內容。
將腳本加入crontab,並每3秒執行一次

後來感覺還是用keepalived 做更省事些……

正文:
這裏不做keepalived 安裝說明,只講講keepalived 的實現思路及最終配置。
keepalived 間使用單播方式,使用pidof 檢測應用服務,使用notify_master 狀態轉換通知執行創建Float IP腳本,將Foat IP分配給自身

keepalived master配置:

global_defs {
script_user ec2-user                  #指定執行腳本用戶
enable_script_security
}

vrrp_script check_haproxy {
script "/sbin/pidof haproxy"
interval 5
fall 2
rise 2
weight -30
user ec2-user
}

vrrp_instance VI_1 {
state MASTER
interface eth0
smtp_alert
virtual_router_id 51
priority 120
unicast_src_ip 192.168.10.10

unicast_peer {
192.168.10.20
}

advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}

track_script {
check_haproxy
}

notify_master "/etc/keepalived/floatip.sh"
}

keepalived backup配置:

global_defs {
script_user ec2-user
enable_script_security
}

vrrp_script check_haproxy {
script "/sbin/pidof haproxy"
interval 5
fall 2
rise 2
weight -30
user ec2-user
}

vrrp_instance VI_1 {
state BACKUP
interface eth0
smtp_alert
virtual_router_id 51
priority 100
unicast_src_ip 192.168.10.20

unicast_peer {
192.168.10.10
}

advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}

track_script {
check_haproxy
}

notify_master "/etc/keepalived/floatip.sh"
}

floatip.sh

#!/bin/bash
PIP=192.168.10.30
INTERFACE_ID=eni-f65555

/usr/bin/aws ec2 assign-private-ip-addresses --allow-reassignment \
--network-interface-id  $INTERFACE_ID --private-ip-addresses $PIP

注意:
在執行aws cli時,需要明確ec2 主機的網絡接口id,這裏的網絡接口指的是本機,因爲keepalived 定義的是本機狀態轉換爲master 時觸發的notify_master 通知

後言:
使用keepalived 後,不用在寫存活監控的腳本,只需寫好aws cli創建floatip的腳本即可

參考:
https://www.peternijssen.nl/high-availability-haproxy-keepalived-aws/

标签:script,keepalived,aws,192.168,master,ec2,IP,user
来源: https://blog.51cto.com/morrowind/2352984

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有