Linux集群 使用多台伺服器搭建成一個集群來運行應用程式,不僅可以避免單點故障,還能提升伺服器的承載能力 集群從功能實現上分為兩種:高可用集群和負載均衡集群 高可用集群,當一臺伺服器宕機不能提供服務時,還有另外的伺服器頂替 負載均衡集群,把用戶的請求分攤到多台伺服器上 搭建高可用集群 高可用集群, ...
Linux集群
使用多台伺服器搭建成一個集群來運行應用程式,不僅可以避免單點故障,還能提升伺服器的承載能力
集群從功能實現上分為兩種:高可用集群和負載均衡集群
高可用集群,當一臺伺服器宕機不能提供服務時,還有另外的伺服器頂替
負載均衡集群,把用戶的請求分攤到多台伺服器上
搭建高可用集群
高可用集群,即“HA集群”,也稱作“雙機熱備”
常見實現高可用的開源軟體有heartbeat和keepalived
keepalived工作原理
VRRP協議,是實現路由高可用的一種通信協議,在這個協議里會將多台功能相同的路由器組成一個小組,這個小組裡有一個master主機和n個backup備用機,工作時,master會通過組播的形式向各個backup發送VRRP協議的數據包,當backup收不到master發來的VRRP數據包時,就會認為master宕機了。
keepalived就是採用VRRP協議實現的高可用。keepalived要有三個模塊,分別是core、check和vrrp。其中core模塊為keepalived的核心,負責主進程的啟動、維護以及全局配置文件的載入和解析;check模塊負責健康檢查;vrrp模塊用來實現VRRP協議
實現Wed高可用
VIP:虛擬ip,伺服器靠這個ip對外提供服務,當master機器宕機時,VIP被分配到backup
安裝服務
準備兩台機器,一臺master,一臺backup
在兩台機器上安裝keepalived和nginx服務
# yum install -y keepalived
# yum install -y epel-release
# yum install -y nginx
配置keepalived文件
編輯master的配置文件
# vi /etc/keepalived/keepalived.conf
global_defs {
notification_email {
[email protected] //定義接收告警的人}
notification_email_from [email protected] //定義發郵件地址
smtp_server 127.0.0.1 //定義發郵件地址,127.0.0.1為使用本機自帶郵件伺服器發送
smtp_connect_timeout 30
router_id LVS_DEVEL
} vrrp_script kei_nginx {
script "/usr/local/sbin/check_ng.sh" //自定義腳本,該腳本為監控nginx服務的腳本
interval 3 //每隔3s執行一次該腳本
} vrrp_instance VI_1 {
state MASTER //角色為master interface ens33 //針對哪個網卡監聽VIP
virtual_router_id 51
priority 100 //權重為100,master要比backup大
advert_int 1
authentication {
auth_type PASS
auth_pass kei>com //定義自定義密碼
}
virtual_ipaddress {
192.168.37.100 //定義VIP
}
track_script {
kei_nginx //定義監控腳本
}
} 退出保存 編輯backup的配置文件 # vi /etc/keepalived/keepalived.conf
global_defs {
notification_email {[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
} vrrp_script kei_nginx {
script "/usr/local/sbin/check_ng.sh"
interval 3
} vrrp_instance VI_1 {
state BACKUP //角色為backup
interface ens33
virtual_router_id 51
priority 90 //比master數值小
advert_int 1
authentication {
auth_type PASS
auth_pass kei>com
}
virtual_ipaddress {
192.168.37.100
} track_script {
kei_nginx
}
} 退出保存
編輯監控腳本(此腳本兩台機器配置一樣)
定義一個監控nginx服務的腳本 # vi /usr/local/sbin/check_ng.shd=`date --date today +%Y%m%d_%H:%M:%S`
//時間變數,用於記錄日誌
n=`ps -C nginx --no-heading|wc -l`
計算nginx進程數量if [ $n -eq "0" ]; then
systemctl start nginx
n2=`ps -C nginx --no-heading|wc -l`
if [ $n2 -eq "0" ]; then
echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
systemctl stop keepalived
fi
fi //如果進程為0,則啟動nginx,並再次檢測進程數量 //如果還為0,說明nginx無法啟動,此時需要關閉keepalived
其他配置(兩台機器操作)
給腳本許可權
# chmod a+x /usr/local/sbin/check_ng.sh
啟動keepalived
# systemctl start keepalived
查看狀態
在master機器上
查看IP
# ip addr
查看nginx服務進程
# ps aux |grep nginx
驗證高可用
先把master上的nginx關掉
# systemctl stop nginx
等3s再次檢測埠,發現服務被啟動
模擬master宕機
# iptables -I OUTPUT -p vrrp -j DROP
在backup機器上查看是否被設置VIP