aws ec2 keepalived 的高可用构建
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了aws ec2 keepalived 的高可用构建相关的知识,希望对你有一定的参考价值。
前言:
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/
以上是关于aws ec2 keepalived 的高可用构建的主要内容,如果未能解决你的问题,请参考以下文章
keepalived + haproxy + mysql 构建高可用数据库
activitmq+keepalived+nfs 非zk的高可用集群构建