1. 程式人生 > >集群介紹 keepalived介紹 用keepalived配置高可用集群

集群介紹 keepalived介紹 用keepalived配置高可用集群

real 文件中 服務端 添加 alived url acc roc ssa

一、集群介紹
技術分享圖片
二、keepalived介紹
技術分享圖片
VRRP協議是keepalived的一個核心,翻譯為中文叫做:虛擬路由冗余協議
keepalived是一個類似於layer3, 4 & 5交換機制的軟件,也就是我們平時說的第3層、第4層和第5層交換。Keepalived是自動完成,不需人工幹涉。
簡介
Keepalived的作用是檢測服務器的狀態,如果有一臺web服務器宕機,或工作出現故障,Keepalived將檢測到,並將有故障的服務器從系統中剔除,同時使用其他服務器代替該服務器的工作,當服務器工作正常後Keepalived自動將服務器加入到服務器群中,這些工作全部自動完成,不需要人工幹涉,需要人工做的只是修復故障的服務器。
工作原理
Layer3,4,5工作在IP/TCP協議棧的IP層,TCP層,及應用層,原理分別如下:
Layer3:Keepalived使用Layer3的方式工作式時,Keepalived會定期向服務器群中的服務器發送一個ICMP的數據包(既我們平時用的Ping程序),如果發現某臺服務的IP地址沒有激活,Keepalived便報告這臺服務器失效,並將它從服務器群中剔除,這種情況的典型例子是某臺服務器被非法關機。Layer3的方式是以服務器的IP地址是否有效作為服務器工作正常與否的標準。
Layer4:如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的狀態來決定服務器工作正常與否。如web server的服務端口一般是80,如果Keepalived檢測到80端口沒有啟動,則Keepalived將把這臺服務器從服務器群中剔除。
Layer5:Layer5對指定的URL執行HTTP GET。然後使用MD5算法對HTTP GET結果進行求和。如果這個總數與預期值不符,那麽測試是錯誤的,服務器將從服務器池中移除。該模塊對同一服務實施多URL獲取檢查。如果您使用承載多個應用程序服務器的服務器,則此功能很有用。此功能使您能夠檢查應用程序服務器是否正常工作。MD5摘要是使用genhash實用程序(包含在keepalived軟件包中)生成的。
SSL_GET與HTTP_GET相同,但使用SSL連接到遠程Web服務器。
MISC_CHECK:此檢查允許用戶定義的腳本作為運行狀況檢查程序運行。結果必須是0或1.該腳本在導演盒上運行,這是測試內部應用程序的理想方式。可以使用完整路徑(即/path_to_script/script.sh)調用可以不帶參數運行的腳本。那些需要參數的需要用雙引號括起來(即“/path_to_script/script.sh arg 1 ... arg n”)
作用
主要用作RealServer的健康狀態檢查以及LoadBalance主機和BackUP主機之間failover的實現。
高可用web架構: LVS+keepalived+nginx+apache+php+eaccelerator(+nfs可選 可不選)

三、用keepalived配置高可用集群
技術分享圖片
本人兩臺機器IP說明,linux-01機器的IP:192.168.238.128作為master ,linux-02機器的IP:192.168.238.130作為backup
[root@linux-01 ~]# yum install -y keepalived
[root@linux-02 ~]# yum install -y keepalived
兩臺機器都安裝nginx,其中128上已經編譯安裝過nginx,130上需要yum安裝nginx
[root@linux-02 ~]# yum install -y nginx
[root@linux-01 ~]# ls /etc/keepalived/keepalived.conf
/etc/keepalived/keepalived.conf
[root@linux-01 ~]# vi !$ //編輯128上的keepalived.conf配置文件
vi /etc/keepalived/keepalived.conf
[root@linux-01 ~]# vi /etc/keepalived/keepalived.conf
[root@linux-01 ~]# > !$ //清空文件內容快捷鍵 >,清空keepalived.conf配置文件內容
/etc/keepalived/keepalived.conf
[root@linux-01 ~]# vim /etc/keepalived/keepalived.conf //在配置文件中新增加如下內容
global_defs {
notification_email {[email protected]
br/>[email protected]
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}

vrrp_script chk_nginx {
script "/usr/local/sbin/check_ng.sh"
interval 3
}

vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass aminglinux>com
}
virtual_ipaddress {
168.238.100
}

track_script {
chk_nginx
}

}
技術分享圖片
[root@linux-01 ~]# vim /usr/local/sbin/check_ng.sh //寫checkng.sh檢測腳本,腳本路徑是在keepalived.conf配置文件中定義的路徑,添加如下內容
!/bin/bash
時間變量,用於記錄日誌
d=`date --date today +%Y%m%d
%H:%M:%S<br/>計算nginx進程數量<br/>n=ps -C nginx --no-heading|wc -l<br/>如果進程為0,則啟動nginx,並且再次檢測nginx進程數量,<br/>如果還為0,說明nginx無法啟動,此時需要關閉keepalived<br/>if [ $n -eq "0" ]; then<br/>/etc/init.d/nginx start<br/>n2=ps -C nginx --no-heading|wc -l<br/>if [ $n2 -eq "0" ]; then<br/>echo "$d nginx down,keepalived will stop" &gt;&gt; /var/log/check_ng.log<br/>systemctl stop keepalived<br/>fi<br/>fi<br/>//解釋腳本:d=date --date today +%Y%m%d_%H:%M:%S表示時間;n=ps -C nginx --no-heading|wc -l是計算nginx進程數;if [ $n -eq "0" ]; then 如果進程數等於0,什麽nginx沒有啟動,需要啟動nginx服務;n2=ps -C nginx --no-heading|wc -l`再去檢測進程數; if [ $n2 -eq "0" ]; then如果進程數還是0;echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log寫一個日誌指定到一個文件裏去方便排查問題;systemctl stop keepalived停止keepalived服務,nginx沒有啟動,需要殺掉keepalived進程,防止“腦裂”,殺掉主上的keepalived是因為要啟動從的keepalived,從上的keepalived會自動啟動,如果主和從的keepalived同時都啟動著,兩者之間會爭搶資源,出現紊亂,這種情況叫做“腦裂”
腦裂
腦裂(split-brain),指在一個高可用(HA)系統中,當聯系著的兩個節點斷開聯系時,本來為一個整體的系統,分裂為兩個獨立節點,這時兩個節點開始爭搶共享資源,結果會導致系統混亂,數據損壞。
對於無狀態服務的HA,無所謂腦裂不腦裂;但對有狀態服務(比如MySQL)的HA,必須要嚴格防止腦裂。(但有些生產環境下的系統按照無狀態服務HA的那一套去配置有狀態服務,結果可想而知...)
[root@linux-01 ~]# chmod 755 /usr/local/sbin/check_ng.sh //給腳本755權限
[root@linux-01 ~]# systemctl start keepalived //啟動keepalived服務
[root@linux-01 ~]# ps aux |grep keep //查看進程有沒有啟動
[root@linux-01 ~]# less /var/log/messages //查看日誌
[root@linux-01 ~]# ip add //查看IP
[root@linux-01 ~]# iptables -nvL //配置從之前檢查防火墻
[root@linux-01 ~]# getenforce //檢查selinux,配置從之前也要關閉selinux和防火墻
[root@linux-02 ~]# iptables -nvL //檢查從的防火墻
[root@linux-02 ~]# systemctl stop firewalld //關閉防火墻
[root@linux-02 ~]# getenforce
[root@linux-02 ~]# setenforce 0 //臨時關閉selinux
[root@linux-02 ~]# > /etc/keepalived/keepalived.conf //清空配置文件內容
[root@linux-02 ~]# vim /etc/keepalived/keepalived.conf //添加如下內容
global_defs {
notification_email {[email protected]
br/>[email protected]
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}

vrrp_script chk_nginx {
script "/usr/local/sbin/check_ng.sh"
interval 3
}

vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass aminglinux>com
}
virtual_ipaddress {

}

track_script {
chk_nginx
}

}
[root@linux-02 ~]# vim /usr/local/sbin/check_ng.sh //編寫checkng.sh腳本
時間變量,用於記錄日誌
d=`date --date today +%Y%m%d
%H:%M:%S<br/>計算nginx進程數量<br/>n=ps -C nginx --no-heading|wc -l<br/>如果進程為0,則啟動nginx,並且再次檢測nginx進程數量,<br/>如果還為0,說明nginx無法啟動,此時需要關閉keepalived<br/>if [ $n -eq "0" ]; then<br/>systemctl start nginx<br/>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
[root@linux-02 ~]# chmod 755 /usr/local/sbin/check_ng.sh //修改權限
[root@linux-02 ~]# systemctl start keepalived //啟動服務
[root@linux-02 ~]# ps aux |grep keep
在瀏覽器上訪問linux-01機器的IP地址
[root@linux-01 ~]# cat /usr/local/nginx/conf/vhost/aaa.com.conf //查看128機器上nginx配置文件默認訪問到哪裏
[root@linux-01 ~]# cat /data/wwwroot/default/index.html //默認頁在這裏修改
[root@linux-02 ~]# cat /usr/local/nginx/html/index.html //linux-02nginx配置默認頁路徑
小知識:開啟keepalived服務nginx服務會自動加載起來
技術分享圖片
[root@linux-01 ~]# systemctl stop keepalived //停掉master上的keepalived服務
[root@linux-01 ~]# ip add //可以查看到vip地址 192.168.238.100沒有被master綁定了
[root@linux-02 ~]# ip add //看到backup機器上綁定了vip地址192.168.238.100
有的企業配置高可用的時候使用兩臺或者三臺backup機器,這時候配置backup配置文件時需要註意每個backup配置的權重要不一樣,權重越高,master宕機時使用backup的優先級越高,權重配置在配置文件中的priority 這個參數。
除了nginx高可用之外,也可以做mysql的高可用,mysql高可用必須保持兩邊數據一致,如果主機宕機,從機起來了數據不一致肯定會出問題

集群介紹 keepalived介紹 用keepalived配置高可用集群