1. 程式人生 > >第十七章 Linux叢集架構(一)

第十七章 Linux叢集架構(一)

一、 叢集介紹
二、 keepalived介紹
三、 用keepalived配置高可用叢集
四、 負載均衡叢集介紹
五、 LVS介紹
六、 LVS排程演算法
七、 LVS NAT模式搭建

 

一、 叢集介紹

叢集功能劃分:
1:高可用:
    高可用叢集通常為兩臺伺服器,一臺工作,另外一臺作為冗餘,當提供服務的機器宕機,冗餘將接替繼續提供服務。
    實現高可用的開源軟體有:heartbeat、keepalived

2:負載均衡
    負載均衡叢集,需要有一臺伺服器作為分發器,它負責把使用者的請求分發給後端的伺服器處理,在這個叢集裡,除了分發器外,就是給使用者提供服務的伺服器了,這些伺服器數量至少為2。
    實現負載均衡的開源軟體有LVS、keepalived、haproxy、nginx

    商業的有F5、Netscaler 
 

二、 keepalived介紹

keepalived是實現高可用的一種輕量級的技術手段,主要用來防止單點故障(單點故障是指一旦某一點出現故障就會導致整個系統架構的不可用)的發生。

1.keepalived通過VRRP(Virtual Router Redundancy Protocl)來實現高可用。

2.在VRRP協議裡會將多臺功能相同的路由器組成一個小組,這個小組裡會有1個master角色和N(N>=1)個backup角色。

3.master會通過組播的形式向各個backup傳送VRRP協議的資料包,當backup收不到master發來的VRRP資料包時,就會認為master宕機了。此時就需要根據各個backup的優先順序來決定誰成為新的mater。

4.Keepalived要有三個模組,分別是core、check和vrrp。其中core模組為keepalived的核心,負責主程序的啟動、維護以及全域性配置檔案的載入和解析,check模組負責健康檢查,vrrp模組是來實現VRRP協議的。

 

三、 用keepalived配置高可用叢集

實驗環境準備:

需要準備兩臺虛擬機器,分別都裝上nginx。 注意:克隆的虛擬機器需要將網絡卡配置檔案中的UUID刪除掉,否則會有衝突。

此次實驗的環境是兩臺CentOS7.3系統的虛擬機器

主(Master):

是之前做LNMP實驗時的系統,裡面已經裝好了nginx

主機名:Linux01

IP:192.168.239.128

關閉防火牆和selinux

從(Backup) :

克隆的主系統,CentOS7.3系統

主機名:mysql-slave

IP:192.168.239.138

關閉防火牆和selinux


nginx+keepalived高可用安裝過程:

主(Master)配置:

1. 在主(Master)和從(Backup)上都安裝nginx和keepalived

[[email protected] ~]# yum install -y keepalived
[[email protected] ~]# yum install -y keepalived
2. 編輯主(Master)上keepalived的配置檔案

內容參考:https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_keepalived.conf

[[email protected] ~]# vim /etc/keepalived/keepalived.conf   //刪除之前的內容,或者備份,把參考裡的複製進來,修改虛擬IP為100

3. 新建監控指令碼

內容參考:https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_check_ng.sh
[[email protected] ~]# vim /usr/local/sbin/check_ng.sh

授予指令碼755許可權

[[email protected] ~]# chmod 755 /usr/local/sbin/check_ng.sh
[[email protected] ~]# ls -l /usr/local/sbin/check_ng.sh 


4. 啟動主(Master)上的keepalived

[[email protected] ~]# systemctl start keepalived.service 
[[email protected] ~]# ps aux | grep keepalived

keepalived配置檔案說明:
# 1:全域性定義 global definitions 部分
global_defs {
   notification_email {
    [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   #前面是定義郵件相關的配置,當出現故障時可以給指定的郵箱傳送郵件
   #下面這一行是定義伺服器的路由標識的,在同一區域網內這個表示是唯一的
   router_id LVS_DEVEL  
} #大括號用來分隔去看,需要成對出現,如果漏掉了也不會出錯,但是得不到想要的結果

# 2:檢測模組,可以通過制定的指令碼來檢測對應的服務是否正常
vrrp_script chk_nginx {
    script "/usr/local/sbin/check_ng.sh"  # 指定自定義檢測nginx服務的指令碼
    interval 3 # 檢測的間隔時間
}

# 3:VRRP例項定義區塊
# 這部分主要用來定義具體服務去例項配置,包括Keepalived主備狀態、介面、優先順序、認證方式和IP等資訊。
vrrp_instance VI_1 {
# 上面這行定義了一個vrrp_instance例項,名字是VI_1,MASTER和BACKUP的例項名必須相同,可以定義多個例項
    state BACKUP  
    # state表示當前例項的狀態,MASTER為正式工作狀態,BACKUP為備用狀態。
    interface ens33
    # interface :指定網絡卡名稱,CentOS一般都是ens開頭
    virtual_router_id 51
    # virtual_router_id 表示虛擬路由ID表示,這個表示最好是一個數字,
    # 如果一個配置檔案中有多個vrrp_instance例項,則不能出現相同的vrtual_router_id,
    # 但是MASTER和BACKUP配置中相同例項的virtual_router_id必須一致,否則會出現腦裂問題。
    priority 90
    # priority 為優先順序,指定的數字越大,表示例項的優先順序越高,
    # 在同一個vrrp_instance例項中 MASTER的優先順序配置要高於BACKUP
    advert_int 1
    # advert_int 為同步通知間隔。MASTER與BACKUP之間通訊檢查的時間間隔,單位為妙,預設為1

    authentication { 
    # authentication 為許可權認證配置塊,包含認證型別,和認證密碼
        auth_type PASS
        # auth_type 為認證型別,有PASS和AH兩種認證型別,一般使用PASS,驗證密碼為明文的方式
        auth_pass wenyang>com
        # auth_pass  指定認證的密碼, BACKUP必須和MASTER一致才能通訊
    }
    virtual_ipaddress {
    # virtual_ipaddress 虛擬IP地址配置,通常稱之為VIP。可以配置多個IP
    # 每個IP佔一行,這裡的虛擬IP就是在工作中需要和域名繫結的IP。
    # 即和配置對應的高可用服務監聽的ip要保持一致(這裡的高可用服務是Nginx 也可以是其他服務)
        192.168.239.100
        # 指定的虛擬ip
    }

    track_script {  #載入指定的服務檢測區塊。
        chk_nginx
    }
}
 

從(Backup)配置:

1. 編輯從(Backup)上的配置檔案

內容參考https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_keepalived.conf

[[email protected] ~]# vim /etc/keepalived/keepalived.conf

 //刪除之前的內容,或者備份,把參考裡的複製進來,修改虛擬IP為100

2. 新建監控指令碼

內容參考https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_check_ng.sh

[[email protected] ~]# vim /usr/local/sbin/check_ng.sh

授予指令碼755許可權

[[email protected] ~]# chmod 755 /usr/local/sbin/check_ng.sh

[[email protected] ~]# ls -l /usr/local/sbin/check_ng.sh

4. 啟動從(Backup)上的keepalived

[[email protected] ~]# systemctl start keepalived

[[email protected] ~]# ps aux | grep keepalived

 

測試:

將nginx預設主頁的內容修改為各自的ip,便於在做實驗時區分是哪臺機器在工作

主:

[[email protected] ~]# cat /usr/local/nginx/conf/vhost/aaa.com.conf  //在nginx虛擬主機裡檢視預設主機及預設頁面

[[email protected] ~]# echo '192.168.239.138'>/data/wwwroot/www.default.com/index.html

從:

[[email protected] ~]# cat /data/wwwroot/www.default.com/index.html
[[email protected] ~]# echo '192.168.239.138'>/data/wwwroot/www.default.com/index.html

測試1.關閉主(master)上的nginx服務

[[email protected] ~]# /etc/init.d/nginx stop

因為監控指令碼有寫自動重啟的指令,所以手工重啟後監控指令碼又自動把nginx服務開啟了。

測試2. 在主(master)上增加iptabls規則(開啟防火牆,新增規則,主備上都做)

[[email protected] ~]# systemctl start firewalld
[[email protected] ~]# iptables -I OUTPUT -p vrrp -j DROP

此時keepalived是正常的,虛擬ip(公有IP)在主、從上都有繫結,但是訪問到的還是主的預設頁面,不能達到切換資源的目的。

測試3. 關閉主(master)上的keepalived服務

[[email protected] ~]# systemctl stop keepalived.service

達到資源切換的目的。

測試4. 重新啟用主(master)上的keepalived服務

[[email protected] ~]# systemctl start keepalived.service

檢視主從的日誌:

[[email protected] ~]# tail /var/log/messages

[[email protected] ~]# tail /var/log/messages

在切換過程存在延時,並且VIP在主、從之間漂移。