目前生產環境的設定越來越多的使用雲服務了,同時負載均衡也基本轉向了雲廠商提供的服務,但對於絕大多數應用來說,自建叢集可能在費用上要更便宜一些,這篇文章也是之前整理的,再次新瓶裝舊酒分享給各位。此範例演示在不使用docker的情況下設定負載均衡,內容keepalived+nginx+tomcat的基礎設定範例,某些特定設定此例中不會出現,在範例中會用到三個虛擬機器器:兩個純命令列用於模擬伺服器端設定,一個帶桌面環境的用於模擬使用者端存取,這樣三臺虛擬機器器使用NAT模式連線的時候是在同一個虛擬網路中,更符合伺服器的實際使用場景,虛擬機器器軟體為VMPlayer,這個對於個人可以免費使用,用起來來不錯,推薦一下。
本範例中是模擬使用場景,機器效能有限,所有nginx和Tomcat就放到一個機器上了,實際場景中如果可以儘量分開,防止nginx所在伺服器出問題時跟著宕掉一個或多個Tomcat。
此部分是為了照顧對於虛擬機器器安裝不熟悉的同學,如果已經熟悉了虛擬機器器的安裝或有實體機環境等,可以跳過此步驟。
第一項是設定系統的硬碟,這裡我們不需要進行任何設定,點選進入之後直接點選左上角的Done按鈕即可。
第二項是設定系統的網路,預設不連線,所以我們需要點選進入設定頁面,然後將右上角的OFF置成ON,然後點選DONE,之後會跳轉回一開始的設定頁,我們就可以開始系統的安裝了,點選Begin Installation,接下來需要設定使用者。
在這個範例中使用者端有兩個用處,一是通過瀏覽器測試伺服器端的服務是否好用;二是通過FTP向伺服器端上傳幾個原始碼包。其實上傳原始碼包這個功能大部分情況下實體機也是可以操作的,但在NAT網路下實體機的瀏覽器在預設是無法存取伺服器端的服務的。
使用者端虛擬機器器對作業系統無限制,只要可以執行瀏覽器即可,其實命令列模式下的linux也是可以存取的,不過不太直觀,如果想用實體機進行存取的話也可以,不過需要將虛擬機器器的網路連線模式改為橋接模式,而且對網路有要求,需要支援DHCP才可以。
安裝過程和伺服器端的很類似,只有第二部有所區別,伺服器需要選擇稍後安裝作業系統,但使用者端的虛擬機器器使用第二項選擇映象即可,之後會提示設定系統的使用者名稱和密碼,之後的步驟就一樣了,而且自定義硬體的時候不再需要設定光碟機。
這裡以Server01為範例,其實我們需要設定兩臺的,我使用的使用者是root使用者,實際應用中可能需要在其他使用者下進行,視情況賦予許可權即可。
因為我們需要向虛擬機器器上傳一些用到的軟體(當然可以使用wget來下載,只不過有點麻煩),所以這裡我們實體機或者使用者端使用FTP使用者端進行連線(工具有很多,挑選自己順手的使用,這裡推薦Xftp和FileZilla,對於個人使用都是免費的),虛擬機器器的IP地址可以通過ip addr進行檢視,紅框中就是當前虛擬機器器的IP地址
cd /usr/local/download
rpm -i jdk-8u111-linux-x64.rpm
tar -xvf apache-tomcat-7.0.72.tar.gz
mv apache-tomcat-7.0.72 /usr/local/Tomcat01
tar -xvf apache-tomcat-7.0.72.tar.gz
mv apache-tomcat-7.0.72 /usr/local/Tomcat02
Tomcat01 8015 8081 8019
Tomcat02 8025 8082 8029
firewall-cmd --zone=public --add-port=8081/tcp
nginx可以通過修改源的方式進行yum安裝,有需要的同學可以自行搜尋下,本例中使用原始碼安裝
tar -xvf nginx-1.10.2.tar.gz
yum install gcc
cd /usr/local/download/nginx-1.10.2
./configure --prefix=/usr/local/nginx
tar -xvf pcre-8.39.tar.gz
cd /usr/local/download/nginx-1.10.2
./configure --prefix=/usr/local/nginx --with-pcre=/usr/local/download/pcre-8.39
cd /usr/local/download/nginx-1.10.2
./configure --prefix=/usr/local/nginx --with-pcre=/usr/local/download/pcre-8.39 --with-zlib=/usr/local/download/zlib-1.2.8
make && make install && make clean
yum install gcc-c++
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
/usr/local/nginx/sbin/nginx -s stop
/usr/local/nginx/sbin/nginx
/usr/local/Tomcat01/bin/start.sh
/usr/local/Tomcat02/bin/start.sh
keepalived推薦使用yum安裝,原始碼安裝之後的設定挺複雜的
yum install keepalived
vrrp_instance VI_1 {
# 主伺服器為MASTER,其他伺服器均為BACKUP
state MASTER
# 通訊用的網路卡,在之前檢視IP時可以看到
interface eno16777736
# 主從伺服器此ID必須一致
virtual_router_id 51
# 優先順序,主伺服器必須大於其他伺服器,數值越大優先順序越高
priority 100
# 主從伺服器必須一致
authentication {
auth_type PASS
auth_pass 1111
}
# 虛擬IP地址,主從伺服器必須一致,此IP為使用者端存取時使用的IP
virtual_ipaddress {
192.168.59.100
}
}
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface eno16777736 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 --out-interface eno16777736 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --reload
至此Keepalived的設定也完成了,通過ip addr檢視可發現主服務上帶有192.168.59.100的虛擬IP而從伺服器上沒有,關閉主伺服器的keepalived,虛擬IP則會轉移到從伺服器上來,測試伺服器通過瀏覽器存取 http://192.168.59.100 可看到虛擬IP轉移的效果,頁面會從主伺服器的頁面轉換為從伺服器的頁面,這裡就不上圖片了
完成上述步驟之後keepalived已經可以實現虛擬IP轉移了,但是實際應用當中我們需要的是自動進行虛擬IP的轉移,所以我們還需要設定keepalived的指令碼,使其能夠在某一個nginx無法提供服務的時候自動將虛擬IP轉移到備用伺服器,以下指令碼來自於上邊提供的連結,原理是通過curl存取某一個連結,如果連續兩次三秒沒有響應則降低伺服器的優先順序,我們在/etc/keepalived目錄下建立一個名為check_status.sh的檔案,然後鍵入以下內容
#!/bin/bash
count=0
for (( k=0; k<2; k++ ))
do
check_code=$( curl --connect-timeout 3 -sL -w "%{http_code}\\n" http://localhost/login.html -o /dev/null )
if [ "$check_code" != "200" ]; then
count=$(expr $count + 1)
sleep 3
continue
else
count=0
break
fi
done
if [ "$count" != "0" ]; then
exit 1
else
exit 0
fi
chmod +x check_status.sh
vrrp_script check_status {
script "/etc/keepalived/check_status.sh"
interval 5
weight -5
}
vrrp_instance VI_1 {
state MASTER
interface eno16777736
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.59.100
}
track_script {
check_status
}
}
設定完成後重啟keepavlied即可,此時如果關閉本機的nginx的話可以看到在5秒後虛擬IP會漂移到備用伺服器上去,這裡因為演示的話圖片太多了,就不上圖片了,nginx退出可以執行nginx -s stop命令,如果是使用yum安裝的nginx可以通過systemctl來停止nginx服務
實際使用當中經常使用到的還有在切換伺服器時傳送郵件用以提醒運維人員主伺服器異常,方法有很多種,此例中就不再贅述,有興趣的可以自行查詢相關資料
本範例到此結束,如果各位有什麼意見或建議,歡迎留言指教,轉載請註明源地址
另說明,markdown檔案中的程式碼由於未知原因傳上來以後格式有點混亂,大家使用的時候注意下格式,不要少個括號之類的。