Linux集群架構(1)集群介紹、keepalived介紹、用keepalived配置高可用集群
這些實現高可用和負載均衡的都是軟件,是為我們在服務器上的服務所作用的。
keepalived介紹
用keepalived配置高可用集群
在nginx上實現高可用:
準備工作:
準備兩臺機器133和134,133作為master(主),134作為backup(備用)
兩臺機器都執行yum install -y keepalived
兩臺機器都安裝nginx,其中133上已經編譯安裝過nginx,134上需要yum安裝nginx: yum install -y nginx
!!(133機器的nginx是使用二進制的源碼包安裝的,而134機器的nginx是用yum 安裝的
,因此總會有區別的,例如在啟動服務的時候和使用二進制源碼包安裝的nginx服務在啟動時,可以
使用 /etc/init.d nginx start啟動服務(前提是該服務的服務啟動文件放在這裏),也可以用
systemctl start nginx啟動服務。而使用yum安裝的nginx只能用:systemctl start nginx啟動服務)
一、配置master
1.修改主上master的keepalived配置文件:
下載後的keepalived配置文件在/etc/keepalived/
(編輯133上keepalived配置文件,內容從https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_keepalived.conf獲取)
(1)先清除keepalived配置文件內容:
> /etc/keepalived/keepalived.conf
(2)vim /etc/keepalived/keepalived.conf,添加內容:
global_defs {
notification_email {
cansheng@[email protected]
}
notification_email_from root@[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 cansheng123456
}
virtual_ipaddress {
192.168.136.100
}
track_script {
chk_nginx
}
}
VIP:虛擬ip,這個IP是由keepalived給服務器配置上的,服務器靠這個VIP
對外提供服務,當master機器宕機,VIP被分配上backup上,這樣就能保證服務運作。
2.編寫監控腳本(檢測服務nginx)
(內容從https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_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
當主master的nginx服務不能啟動則要關閉keepalived,不然則會主從出現腦裂
修改腳本的權限:
chmod 755 /usr/local/sbin/check_ng.sh
3.啟動keepalived:
systemctl start keepalived
4.測試一下該腳本:
先關閉 nginx ,判斷是否會自動啟動。
/etc/init.d/nginx stop
可以看出,關閉了nginx 。腳本會執行,自動執行開啟nginx服務
5.檢查VIP是否加載了在網卡ip:
ip addr (只能用這個命令查看,ifconfig不能看到。)
二、配置從backup
配置前先檢查兩臺機器的防火墻和selinux。要關閉
1.編輯keepalived配置文件
先清空自帶內容:> /etc/keepalived/keepalived.conf
vim /etc/keepalived/keepalived.conf
(編輯配置文件,內容從https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_keepalived.conf獲取)
內容:
global_defs {
notification_email {
cansheng@[email protected]
}
notification_email_from root@[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 cansheng123
}
virtual_ipaddress {
192.168.136.100
}
track_script {
chk_nginx
}
}
2.編寫監控監本:
vim /usr/local/sbin/check_ng.sh
內容從https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_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
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
編寫完腳本修改其權限:
chmod 755 /usr/local/sbin/check_ng.sh
3.開啟 keepalived服務:
systemctl start keepalived
現在主和從都有nginx
瀏覽器查看:
主:192.168.136.133
從:192.168.136.134
(因為nginx是使用yum安裝的,所以默認頁的路徑/usr/share/nginx/html/index.html)
測試:
判斷標準:查看VIP 訪問的是那個機器的默認頁
192.168.136.100
說明這時VIP在master上
測試高可用
測試1:關閉master上的nginx服務
關閉後nginx服務能自動啟動,只要keepalived服務啟動則加載監控腳本。
測試2:在master上增加iptabls規則 :
iptables -I OUTPUT -p vrrp -j DROP
此時數據已經發生腦裂
(測試後清空 iptables -F)
測試3:關閉master上的keepalived服務:
VIP 釋放,從backup得到VIP.瀏覽器上訪問VIP則訪問到
backup的機器的默認頁。
一般搭建高可用都是使用兩臺機器,如果是多臺機器則在配置文件中,只要修改權重不同就行了。
MySQL做高可用,要保持數據一致才行。
master和backup的keepalived的配置文件中的網卡名字是同一個,這個沒有影響嗎?backup主機上要是沒有那個網卡,keepalived是怎麽處理的。
可自配,例如master上叫eth0,backup上叫eth1,在配置文件中指定即可。
Linux集群架構(1)集群介紹、keepalived介紹、用keepalived配置高可用集群