天天看點

叢集介紹,keepalived介紹,使用keepalived配置高可用叢集

18.1 叢集介紹

叢集介紹,keepalived介紹,使用keepalived配置高可用叢集

叢集或者說是群集:其目的是為了實作将多台計算機組合以來完成特定的任務,比如天氣預報,大型網絡遊戲,這些都需要很大的運算量,單台計算機實作成本太高,而且不現實。那麼就需要通過叢集的方式,将閑置的或者正在使用的計算機聯合起來,結合整體的力量來解決這些問題,其實就是多個計算機組合成一個大的計算機罷了。

叢集的類型大緻分為三類:

1.LB Load Balancing(負載均衡叢集)

2.HA High Availability(高可用性叢集)

3.HP High Performance(高性能叢集)

簡單說明下這三種類型的叢集:

1. 負載均衡型的叢集目的是為了提高服務的并發能力,比如三台WEB伺服器組合成一個叢集,我們就需要用這種類型的叢集來實作負載均衡,既讓這三台WEB伺服器的負載平均一些,不至于有很空閑的伺服器。

2. 高可用性的叢集目的是為了提供7*24小時服務的能力,通過提供備援伺服器,來防止宏機造成的服務中斷

3. 高性能叢集目的是為了在短期内解決大量複雜的計算,常見的天氣預報系統,科學勘探,人口普查等等

同時,叢集提供了非常好的擴充/縮減性非常,可以友善的增加或者減少伺服器。

18.2 keepalived介紹

叢集介紹,keepalived介紹,使用keepalived配置高可用叢集

Keepalived是Linux下一個輕量級别的高可用解決方案。高可用(High Avalilability,HA),其實兩種不同的含義:廣義來講,是指整個系統的高可用行,狹義的來講就是之主機的備援和接管,

它與HeartBeat RoseHA 實作相同類似的功能,都可以實作服務或者網絡的高可用,但是又有差别,HeartBeat是一個專業的、功能完善的高可用軟體,它提供了HA 軟體所需的基本功能,比如:心跳檢測、資源接管,檢測叢集中的服務,在叢集節點轉移共享IP位址的所有者等等。HeartBeat功能強大,但是部署和使用相對比較麻煩,

與HeartBeat相比,Keepalived主要是通過虛拟路由備援來實作高可用功能,雖然它沒有HeartBeat功能強大,但是Keepalived部署和使用非常的簡單,所有配置隻需要一個配置檔案即可以完成,

Keepalived起初是為LVS設計的,專門用來監控叢集系統中各個服務節點的狀态,它根據TCP/IP參考模型的第三、第四層、第五層交換機制檢測每個服務節點的狀态,如果某個伺服器節點出現異常,或者工作出現故障,Keepalived将檢測到,并将出現的故障的伺服器節點從叢集系統中剔除,這些工作全部是自動完成的,不需要人工幹涉,需要人工完成的隻是修複出現故障的服務節點。

後來Keepalived又加入了VRRP的功能,VRRP(Vritrual Router Redundancy Protocol,虛拟路由備援協定)出現的目的是解決靜态路由出現的單點故障問題,通過VRRP可以實作網絡不間斷穩定運作,是以Keepalvied 一方面具有伺服器狀态檢測和故障隔離功能,另外一方面也有HA cluster功能。

Keepalived體系結構圖:

叢集介紹,keepalived介紹,使用keepalived配置高可用叢集

18.3 用keepalived配置高可用叢集(上)

想要使用Keepalived做這個叢集的實驗,需要準備兩台機器,一台作為master,另一台作為backup。

我這裡示例使用的master機器的IP是192.168.77.130

backup機器的IP是192.168.77.128

1. 并且兩台機器都需要安裝Keepalived,安裝指令如下:

yum install -y keepalived

2. 然後就是安裝Nginx(兩台機器都需要安裝),在這裡我使用Nginx作為一個負載均衡器,因為在許多的企業中用Nginx作為負載均衡的也不少,是以使用Nginx來作為示範會更接近在企業中的應用。安裝指令如下:

yum install -y nginx

提示:我這裡為了減少步驟和降低搭建過程的複雜度,是以使用yum來安裝,一般在企業中是使用二進制或者源碼包來安裝Nginx的。

如果你的機器沒有安裝epel擴充源,需要先安裝擴充源,指令如下:

yum install -y epel-release

  1. 編輯master機器上的keepalived配置檔案,配置檔案模闆可以從以下網址獲得:

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

或者直接從這裡複制(但是要記得把注釋去掉):

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

}

vrrp_script chk_nginx {  //檢測服務是否正常

   script "/usr/local/sbin/check_ng.sh"

   interval 3  //檢測的間斷為3秒鐘

}

vrrp_instance VI_1 {  //定義master相關的資訊

   state MASTER  //定義角色為master

interface ens33  //定義網卡名稱(你機器上能夠正常通信的網卡名稱)

virtual_router_id 51  //定義路由器的id

priority 100  //定義權重,主角色和從角色的權重是不一樣的

advert_int 1  //

authentication {  //定義認證相關的資訊

       auth_type PASS  //定義認證的形式為使用密碼認證

       auth_pass 123456  //定義密碼

   }

   virtual_ipaddress {  //定義vip,這是一公有ip,也就是從和主都共同使用這個ip

192.168.77.100

   }

   track_script {  //加載檢測腳本

       chk_nginx

   }

}

使用以下指令清空keepalived的配置檔案裡的内容:

> /etc/keepalived/keepalived.conf

然後編輯keepalived配置檔案:

vim /etc/keepalived/keepalived.conf

把模闆内容複制粘貼進去,注意:最好是檢查一下粘貼後的内容和模闆的内容是否一緻,確定沒有複制少了,如果這個配置檔案有問題的話,keepalived就啟動不起來了。粘貼完了之後,要修改一下,将幾個配置修改為你機器上的資訊:

  • 網卡名稱,要定義你自己的網卡名稱。
  • global_defs那一段可以自定義,可以自己根據實際情況修改
  • 可以定義一個自己的密碼
  • vip位址,最好是你虛拟機的ip段的位址
  1. 在master機器上定義監控腳本,腳本的内容可以從以下網址獲得:

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

這是檢查Nginx是否正常的一個shell腳本。

編輯腳本檔案(這個腳本檔案的路徑是可以在keepalived.conf檔案中自定義的):

vim /usr/local/sbin/check_ng.sh

将複制的内容粘貼進去:

叢集介紹,keepalived介紹,使用keepalived配置高可用叢集

注意: 如果你的nginx是yum安裝的,那麼就要把/etc/init.d/nginx start那行,改為systemctl start nginx。

  1. 編輯完腳本後,給這個腳本檔案設定755權限(不設定這個權限的話,就無法自動加載這個腳本):
chmod 755 /usr/local/sbin/check_ng.sh

18.4 用keepalived配置高可用叢集(中)

上一部分我們就已經在master機器上配置好了keepalived,配置好之後就是啟動keepalived服務,并且需要檢視一下程序是否存在:

systemctl start  keepalived

ps aux |grep keepalived

叢集介紹,keepalived介紹,使用keepalived配置高可用叢集

如圖,則是沒有問題,服務啟動成功了。

如果你的機器上啟動了nginx服務的話,先關閉nginx:

service nginx stop

然後再檢視nginx的程序:

ps aux |grep nginx

叢集介紹,keepalived介紹,使用keepalived配置高可用叢集

會發現nginx自動啟動了,這就證明檢測腳本沒問題。

關于keepalived的日志記錄,我們可以在/var/log/messages日志檔案中檢視:

叢集介紹,keepalived介紹,使用keepalived配置高可用叢集

使用ip add 指令檢視vip是否存在:

使用ifconfig指令是檢視不到vip的,需要使用ip add 指令。

叢集介紹,keepalived介紹,使用keepalived配置高可用叢集

在搭建叢集的時候,需要先把selinux給關閉,防火牆的規則也要清空,兩台機器都需要關閉和清空規則:

清空防火牆規則:

iptables -F
叢集介紹,keepalived介紹,使用keepalived配置高可用叢集

關閉selinux:

setenforce 0

配置backup機器:

master機器配置完後,就需要到backup機器上進行配置了。同樣的在backup機器上第一件要做的事情就是配置keepalived配置檔案:

1. 清空keepalived.conf檔案:

> /etc/keepalived/keepalived.conf

2. 然後編輯keepalived配置檔案:

vim /etc/keepalived/keepalived.conf

  1. 複制模闆内容(模闆内容同樣的在上面那個網址獲得),粘貼進去。然後修改以下幾個地方:
  • 網卡名稱,要定義你自己的網卡名稱。
  • state參數要改為backup
  • priority(權重)參數改為90
  • global_defs那一段可以自定義,可以自己根據實際情況修改
  • 可以定義一個自己的密碼
  • virtual_ipaddress(vip位址)參數,定義和master機器同樣的位址

4. 同樣的要編輯檢測腳本,腳本的内容可以從以下網址獲得,我這裡的腳本和master機器的配置有些差别,因為我backup機器的nginx是yum安裝的,而master機器的nginx則是源碼包安裝的,是以在啟動指令上不一樣,可以根據實際情況更改啟動方式:

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

編輯腳本檔案:

vim /usr/local/sbin/check_ng.sh

将複制的内容粘貼進去:

叢集介紹,keepalived介紹,使用keepalived配置高可用叢集

5. 編輯完腳本後,給這個腳本檔案設定755權限(不設定這個權限的話,就無法自動加載這個腳本):

chmod 755 /usr/local/sbin/check_ng.sh
  1. 啟動keepalived服務,并檢視程序:

systemctl start  keepalived

ps aux |grep keepalived

叢集介紹,keepalived介紹,使用keepalived配置高可用叢集
  1. 修改一下master機器的nginx的預設通路頁的内容(預設頁的路徑在nginx的預設虛拟主機配置檔案中檢視):

vim /data/wwwroot/default/index.html

修改内容如下:

叢集介紹,keepalived介紹,使用keepalived配置高可用叢集
  1. 使用浏覽器通路master機器的ip位址,看看是否會顯示修改後的内容:
叢集介紹,keepalived介紹,使用keepalived配置高可用叢集

如圖,則是沒問題。

  1. 這次修改backup機器的nginx預設通路頁内容,因為是yum安裝的,是以路徑不一樣:

vim /usr/share/nginx/html/index.html

因為是yum安裝的,是以會自帶有内容,需要先清空一下:

> /usr/share/nginx/html/index.html

接着修改内容如下:

叢集介紹,keepalived介紹,使用keepalived配置高可用叢集

10.使用浏覽器通路backup機器的ip位址,看看是否會顯示修改後的内容:

叢集介紹,keepalived介紹,使用keepalived配置高可用叢集

如圖,則是沒問題。

以上這幾個步驟是為了确認nginx能夠被正常通路。

接下來我們需要通路vip,确認vip也能夠被通路:

叢集介紹,keepalived介紹,使用keepalived配置高可用叢集

如圖,可以看到能夠被正常通路,而且預設就是通路master機器的。

18.5 用keepalived配置高可用叢集(下)

叢集介紹,keepalived介紹,使用keepalived配置高可用叢集

完成上述步驟之後,我們的高可用叢集就搭建好來了,接下來我們需要測試一下這個高可用叢集:

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

叢集介紹,keepalived介紹,使用keepalived配置高可用叢集

關閉之後任然會被keepalived服務啟動,代表沒問題。

測試2:在master機器上增加iptabls規則:

iptables -I OUTPUT -p vrrp -j DROP

叢集介紹,keepalived介紹,使用keepalived配置高可用叢集

依舊能夠被通路,這種情況就不屬于master當機:

叢集介紹,keepalived介紹,使用keepalived配置高可用叢集

測試完之後清空規則:

iptables -F

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

systemctl stop keepalived

然後可以看到master機器上的vip被釋放了,不存在了:

叢集介紹,keepalived介紹,使用keepalived配置高可用叢集

這時vip被backup機器所監聽了,這就類似于生産環境中,master機器當機了,然後backup機器就會頂替master機器:

叢集介紹,keepalived介紹,使用keepalived配置高可用叢集

現在再去通路vip位址,會發現變成了backup機器上預設頁裡的内容:

叢集介紹,keepalived介紹,使用keepalived配置高可用叢集

這種情況就是master當機了,這一步測試就是為了模拟master當機的情況。

測試4:啟動master上的keepalived服務

systemctl start keepalived

同樣的去浏覽器通路vip,通路頁面的内容恢複成master上的預設頁内容就沒問題了:

叢集介紹,keepalived介紹,使用keepalived配置高可用叢集