第十七章 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在主、從之間漂移。