集羣介紹html
這些實現高可用和負載均衡的都是軟件,是爲咱們在服務器上的服務所做用的。
linux
keepalived介紹nginx
用keepalived配置高可用集羣git
在nginx上實現高可用:
web
準備工做:vim
準備兩臺機器133和134,133做爲master(主),134做爲backup(備用)瀏覽器
兩臺機器都執行yum install -y keepalivedbash
兩臺機器都安裝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啓動服務)
1、配置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@740183413@qq.com
}
notification_email_from root@740183413@qq.com
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不能看到。)
2、配置從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@740183413@qq.com
}
notification_email_from root@740183413@qq.com
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,在配置文件中指定便可。