Linux集羣架構(1)集羣介紹、keepalived介紹、用keepalived配置高可用集羣

               集羣介紹html


blob.png

這些實現高可用和負載均衡的都是軟件,是爲咱們在服務器上的服務所做用的。
linux


                keepalived介紹nginx

blob.png


            用keepalived配置高可用集羣git

在nginx上實現高可用:
web

blob.png


 準備工做: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/

blob.png

(編輯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

    }

}



blob.png

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獲取)


腳本的路徑,在配置文件中指定了:

blob.png

#!/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


blob.png

當主master的nginx服務不能啓動則要關閉keepalived,否則則會主從出現腦裂


修改腳本的權限:

chmod 755 /usr/local/sbin/check_ng.sh


3.啓動keepalived:

systemctl start keepalived 

blob.png


4.測試一下該腳本:

先關閉 nginx ,判斷是否會自動啓動。

 /etc/init.d/nginx stop

blob.png

能夠看出,關閉了nginx 。腳本會執行,自動執行開啓nginx服務



5.檢查VIP是否加載了在網卡ip:

    ip addr  (只能用這個命令查看,ifconfig不能看到。) 

blob.png



        2、配置從backup

配置前先檢查兩臺機器的防火牆和selinux。要關閉

blob.png


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

    }

}



blob.png


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

blob.png


如今主和從都有nginx


瀏覽器查看:

主:192.168.136.133

blob.png

從:192.168.136.134

(由於nginx是使用yum安裝的,因此默認頁的路徑/usr/share/nginx/html/index.html)

blob.png


        測試:

判斷標準:查看VIP 訪問的是那個機器的默認頁

192.168.136.100

blob.png

說明這時VIP在master上



            測試高可用

blob.png

測試1:關閉master上的nginx服務

關閉後nginx服務能自動啓動,只要keepalived服務啓動則加載監控腳本。


 測試2:在master上增長iptabls規則 :


 iptables -I OUTPUT -p vrrp -j DROP

blob.png

blob.png

此時數據已經發生腦裂

(測試後清空 iptables -F)


 測試3:關閉master上的keepalived服務:

VIP 釋放,從backup獲得VIP.瀏覽器上訪問VIP則訪問到

backup的機器的默認頁。


通常搭建高可用都是使用兩臺機器,若是是多臺機器則在配置文件中,只要修改權重不一樣就好了。

MySQL作高可用,要保持數據一致才行。


master和backup的keepalived的配置文件中的網卡名字是同一個,這個沒有影響嗎?backup主機上要是沒有那個網卡,keepalived是怎麼處理的。


可自配,例如master上叫eth0,backup上叫eth1,在配置文件中指定便可。

相關文章
相關標籤/搜索