18.1 集羣介紹
根據功能劃分爲兩大類:高可用和負載均衡
高可用集羣一般爲兩臺服務器,一臺工做,另一臺做爲冗餘,當提供服務的機器宕機,冗餘將接替繼續提供服務
實現高可用的開源軟件有:heartbeat、keepalived
負載均衡集羣,須要有一臺服務器做爲分發器,它負責把用戶的請求分發給後端的服務器處理,在這個集羣裏,除了分發器外,就是給用戶提供服務的服務器了,這些服務器數量至少爲2
實現負載均衡的開源軟件有LVS、keepalived、haproxy、nginx,商業的有F五、Netscaler, Array
18.2 keepalived介紹
在這裏咱們使用keepalived來實現高可用集羣,由於heartbeat在centos6上有一些問題,影響實驗效果
keepalived經過VRRP(Virtual Router Redundancy Protocl 虛擬路由冗餘協議)來實現高可用。
在這個協議裏會將多臺功能相同的路由器組成一個小組,這個小組裏會有1個master角色和N(N>=1)個backup角色。
master會經過組播的形式向各個backup發送VRRP協議的數據包,當backup收不到master發來的VRRP數據包時,就會認爲master宕機了。此時就須要根據各個backup的優先級來決定誰成爲新的mater。
Keepalived要有三個模塊,分別是core、check和vrrp。其中core模塊爲keepalived的核心,負責主進程的啓動、維護以及全局配置文件的加載和解析,check模塊負責健康檢查,vrrp模塊是來實現VRRP協議的。
18.3/18.4/18.5 用keepalived配置高可用集羣
用keepalived配置高可用
準備兩臺機器135和136,135做爲master,136做爲backup
兩臺機器都執行yum install -y keepalived
讓 ngnix 來做爲高可用的對象, 由於nginx通常用做負載均衡
兩臺機器都安裝nginx,其中135上已經編譯安裝過nginx,136上須要yum安裝nginx: yum install -y nginx
編輯135上keepalived配置文件,內容從https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_keepalived.conf獲取
> /etc/keepalived/keepalived.conf
vim /etc/keepalived/keepalived.conf
須要特別注意和修改的地方
檢測服務是否正常的腳本, 間斷是3秒鐘
加載 檢查腳本
virtual_ipaddress {
192.168.192.100 //設定virtual_ipaddress爲100, 公有ip, 主上有,從上也有, 要想在公網環境中用,那就配置公網。
}
virtual_router_id 51 //這裏主從要保持一致
135編輯監控腳本,內容從https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_check_ng.sh獲取
給腳本755權限
vim /usr/local/sbin/check_ng.sh
chmod 755 /usr/local/sbin/check_ng.sh
#!/bin/bash
#時間變量,用於記錄日誌
d=`date --date today +%Y%m%d_%H:%M:%S`
#計算nginx進程數量
n=`ps -C nginx --no-heading|wc -l`
#若是進程爲0,則啓動nginx,而且再次檢測nginx進程數量,
#若是還爲0,說明nginx沒法啓動,此時須要關閉keepalived, 爲了防止出現 腦裂
if [ $n -eq "0" ]; then
/etc/init.d/nginx start
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
systemctl start keepalived //135啓動服務
查看keepalived 和 nginx服務有沒有啓動, 並停掉nginx服務, 看他會不會自動啓動起來
ps aux | grep keep
ps aux | grep nginx
/etc/init.d/nginx stop
ps aux | grep nginx
看 virtual_ipaddress 用 ip addr
keepalived日誌: less /var/log/messages
檢查 防火牆 , selinux, 都關掉, 從也同樣
--------------------------
136上編輯配置文件,內容從https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_keepalived.conf獲取
> /etc/keepalived/keepalived.conf
vim /etc/keepalived/keepalived.conf
state BACKUP //這裏是BACKUP 和主不同
virtual_router_id 51 //這裏需和主保持一致
priority 90 //權重, 比主少一些, 主是100
virtual_ipaddress {
192.168.192.100 //虛擬ip改爲和主同樣 , 要想在公網環境中用,那就配置公網。
}
136上編輯監控腳本,內容從https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_check_ng.sh獲取
給腳本755權限
vim /usr/local/sbin/check_ng.sh
chmod 755 /usr/local/sbin/check_ng.sh
#時間變量,用於記錄日誌
d=`date --date today +%Y%m%d_%H:%M:%S`
#計算nginx進程數量
n=`ps -C nginx --no-heading|wc -l`
#若是進程爲0,則啓動nginx,而且再次檢測nginx進程數量,
#若是還爲0,說明nginx沒法啓動,此時須要關閉keepalived
if [ $n -eq "0" ]; then
systemctl start nginx //由於是yum安裝的, 因此這裏用這個命令啓動
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
136上也啓動服務 systemctl start keepalived
查看keepalived 和 nginx服務有沒有啓動, 並停掉nginx服務, 看他會不會自動啓動起來
ps aux | grep keep
ps aux | grep nginx
systemctl stop nginx
ps aux | grep nginx
檢查 防火牆 , selinux, 都關掉, 主也同樣
如下2個html和根據狀況作更改用來區分主從的nginx
主的nginx默認頁在 /usr/local/nginx/html/index.html //編譯安裝的
從的nginx默認頁在 /usr/share/nginx/html/index.html //yum安裝的
如今 訪問 192.168.192.100 默認訪問的是主上的html
說明如今咱們訪問到的機器是master
測試高可用
先肯定好兩臺機器上nginx差別,好比能夠經過curl -I 來查看nginx版本
測試1:關閉master上的nginx服, 可否自動加載起來 (由於有check_ng.sh 腳本) , 從上也同樣測試
測試2:關閉master上的keepalived服務, 模擬生產環境中主機down機的情景
systemctl stop keepalived
看到虛擬ip到了從上