1. 程式人生 > >集群介紹,keepalived介紹,使用keepalived配置高可用集群

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

集群 linux keepalived 服務器

筆記內容:

  • 18.1 集群介紹

  • 18.2 keepalived介紹

  • 18.3 用keepalived配置高可用集群(上)

  • 18.4 用keepalived配置高可用集群(中)

  • 18.5 用keepalived配置高可用集群(下)

筆記日期:2017-11-10


18.1 集群介紹

技術分享

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

集群的類型大致分為三類:

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

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

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


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

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

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

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

同時,集群提供了非常好的擴展/縮減性非常,可以方便的增加或者減少服務器。




18.2 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體系結構圖:

技術分享



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 { //定義出現問題的時候,給這個郵箱發送郵件

aming@aminglinux.com

}

notification_email_from root@aminglinux.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 //檢測的間斷為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


將復制的內容粘貼進去:

技術分享

註意: 如果你的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

技術分享

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


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

service nginx stop


然後再查看nginx的進程:

ps aux |grep nginx

技術分享

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


關於keepalived的日誌記錄,我們可以在/var/log/messages日誌文件中查看:

技術分享


使用ip add 命令查看vip是否存在:

技術分享

使用ifconfig命令是查看不到vip的,需要使用ip add 命令。



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

清空防火墻規則:

iptables -F

技術分享


關閉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


將復制的內容粘貼進去:

技術分享



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

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


  1. 啟動keepalived服務,並查看進程:

systemctl start keepalived

ps aux |grep keepalived

技術分享


  1. 修改一下master機器的nginx的默認訪問頁的內容(默認頁的路徑在nginx的默認虛擬主機配置文件中查看):

vim /data/wwwroot/default/index.html


修改內容如下:

技術分享


  1. 使用瀏覽器訪問master機器的ip地址,看看是否會顯示修改後的內容:

技術分享

如圖,則是沒問題。


  1. 這次修改backup機器的nginx默認訪問頁內容,因為是yum安裝的,所以路徑不一樣:

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


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

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


接著修改內容如下:

技術分享



  1. 使用瀏覽器訪問backup機器的ip地址,看看是否會顯示修改後的內容:

技術分享

如圖,則是沒問題。

以上這幾個步驟是為了確認nginx能夠被正常訪問。



接下來我們需要訪問vip,確認vip也能夠被訪問:

技術分享

如圖,可以看到能夠被正常訪問,而且默認就是訪問master機器的。


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

技術分享

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

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

技術分享

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



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

iptables -I OUTPUT -p vrrp -j DROP

技術分享


依舊能夠被訪問,這種情況就不屬於master宕機:

技術分享


測試完之後清空規則:

iptables -F



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

systemctl stop keepalived

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

技術分享


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

技術分享


現在再去訪問vip地址,會發現變成了backup機器上默認頁裏的內容:

技術分享

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



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

systemctl start keepalived


同樣的去瀏覽器訪問vip,訪問頁面的內容恢復成master上的默認頁內容就沒問題了:

技術分享




擴展

heartbeat和keepalived比較

http://blog.csdn.net/yunhua_lee/article/details/9788433

DRBD工作原理和配置

http://502245466.blog.51cto.com/7559397/1298945


mysql+keepalived

http://lizhenliang.blog.51cto.com/7876557/1362313





本文出自 “zero” 博客,請務必保留此出處http://zero01.blog.51cto.com/12831981/1981374

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