1. 程式人生 > >Linux集群架構(1)集群介紹、keepalived介紹、用keepalived配置高可用集群

Linux集群架構(1)集群介紹、keepalived介紹、用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配置高可用集群