1. 程式人生 > >2018-4-9 15周4次課 用keepalived配置高可用集群

2018-4-9 15周4次課 用keepalived配置高可用集群

keepalived

18.1 集群介紹


·根據功能劃分為兩大類:高可用和負載均衡

·高可用集群通常為兩臺服務器,一臺工作,另外一臺作為冗余,當提供服務的機器宕機,冗余將接替繼續提供服務

·實現高可用的開源軟件有:heartbeat、keepalived

·負載均衡集群,需要有一臺服務器作為分發器,它負責把用戶的請求分發給後端的服務器處理,在這·個集群裏,除了分發器外,就是給用戶提供服務的服務器了,這些服務器數量至少為2

·實現負載均衡的開源軟件有LVS、keepalived、haproxy、nginx,商業的有F5、Netscaler





18.2 keepalived介紹


·在這裏我們使用keepalived來實現高可用集群,因為heartbeat在centos6上有一些問題,影響實驗效果

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

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

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

·Keepalived要有三個模塊,分別是core、check和vrrp。其中core模塊為keepalived的核心,負責主進程的啟動、維護以及全局配置文件的加載和解析,check模塊負責健康檢查,vrrp模塊是來實現VRRP協議的。




18.3/18.4/18.5 用keepalived配置高可用集群


準備兩臺主機,一臺ip為192.168.65.128,一臺ip為192.168.65.129

128為master,129為backup

兩臺機器都執行yum install -y keepalived,兩臺機器都安裝nginx

編輯配置文件/etc/keepalived/keepalived.conf

可以先備份keepalived.conf文件為keepalived.conf.bak

再清空keepalived.conf,之後寫入新配置內容

[root@localhost ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
[root@localhost keepalived]# ls
keepalived.conf  keepalived.conf.bak
[root@localhost keepalived]# > keepalived.conf                    ## > 為清空快捷鍵
[root@localhost keepalived]# vim keepalived.conf

技術分享圖片

內容為:http://note.youdao.com/noteshare?id=cdc47a51a478dd704ce05af309c56da4&sub=9D7895DAD16F4AA6BBC79C20A0855852


notification_email 有問題,發郵件給哪個郵箱,可以不定義

notification_email_from 有問題用哪個郵箱發郵件,可以不定義

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id LVS_DEVEL 都可以不定義

vrrp_script chk_nginx 檢測服務是否正常 interval 3 檢測間斷為3秒

vrrp_instance VI_1 master相關的配置

state 角色是master,如果是從的話就是 backup

interface 發送廣播使用的網卡

virtual_router_id 路由id

priority 100 權重

authentication 認證相關信息

virtual_ipaddress 主從共有ip,也就是vip,主宕機,從解析到該ip上去

track_script 加載腳本,之前定義的chk_nginx檢查nginx


定義檢查nginx是否正常的腳本(keepalived.conf配置文件中定義位置):

[root@localhost keepalived]# vim /usr/local/sbin/check_ng.sh

技術分享圖片

配置文件內容:http://note.youdao.com/noteshare?id=17b7d082afd8d31b4fd5c48b5f93bcc1&sub=E207C9413B70409DA1A4E3F0A3FEE494


執行ps -C nginx --no-heading|wc -l命令計算nginx進程數,如果進程數等於0,則說明nginx服務沒有啟動,那麽需要啟動nginx服務,啟動之後再查看進程數值,如果還是0,說明nginx依然沒有啟動,那麽需要寫一個日期的錯誤提示到日誌裏,方便排查問題。之後停止keepalived,主keepalived一停,從就會自動起來服務,以免主從都有keepalived啟動,產生紊亂,腦裂。


ip addr可以看到vip 192.168.65.100

技術分享圖片技術分享圖片


更改檢查nginx腳本的權限

[root@localhost keepalived]# chmod 755 /usr/local/sbin/check_ng.sh
[root@localhost keepalived]# systemctl start keepalived                ##啟動keepalived
[root@localhost keepalived]# ps aux | grep keepalived
root       1726  0.0  0.1 120740  1404 ?        Ss   22:01   0:00 /usr/sbin/keepalived -D
root       1727  0.0  0.2 120740  2752 ?        S    22:01   0:00 /usr/sbin/keepalived -D
root       1728  0.0  0.2 125104  2832 ?        S    22:01   0:00 /usr/sbin/keepalived -D
root       1745  0.0  0.0 112676   980 pts/0    R+   22:01   0:00 grep --color=auto keepalived
[root@localhost keepalived]# ps aux | grep nginx                        ##nginx也已經啟動
root        850  0.0  0.1  45992  1280 ?        Ss   20:58   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody      854  0.0  0.3  48480  3920 ?        S    20:58   0:00 nginx: worker process
nobody      855  0.0  0.3  48480  3920 ?        S    20:58   0:00 nginx: worker process
root       1760  0.0  0.0 112676   980 pts/0    R+   22:02   0:00 grep --color=auto nginx
[root@localhost keepalived]# /etc/init.d/nginx stop                    ##停止nginx服務
Stopping nginx (via systemctl):                            [  確定  ]
[root@localhost keepalived]# ps aux | grep nginx                        ##ngxin又自己啟動了
root       1821  0.0  0.1  45992  1292 ?        Ss   22:02   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody     1825  0.0  0.3  48480  3932 ?        S    22:02   0:00 nginx: worker process
nobody     1826  0.0  0.3  48480  3932 ?        S    22:02   0:00 nginx: worker process
root       1828  0.0  0.0 112676   980 pts/0    R+   22:02   0:00 grep --color=auto nginx

·日誌都在/var/log/messages下


·檢查防火墻主從iptables和getenforce關閉


·編輯從上的/etc/keepalived/keepalived.conf

[root@localhost ~]# vim /etc/keepalived/keepalived.conf

技術分享圖片

內容:http://note.youdao.com/noteshare?id=b12b72e89f72aca6896e4f250f7b4ce2&sub=94B6C23176174E7AA5E4BADF6F31802F


state 為BACKUP

virtual_router_id,vip 都和主一致

priority 主是100,從是90,要低於主



監控nginx腳本:

[root@localhost ~]# vim /usr/local/sbin/check_ng.sh

技術分享圖片

如果nginx是yum 安裝的,可以用systemctl start nginx為啟動命令


更改腳本權限:

[root@localhost keepalived]# chmod 755 /usr/local/sbin/check_ng.sh


此時訪問192.168.65.128可以訪問nginx的默認虛擬服務器

技術分享圖片

技術分享圖片技術分享圖片


而192.168.65.129也可以訪問自己nginx默認頁


如果是yum安裝的,那麽/usr/share/nginx/html/index.html

技術分享圖片


而此時如果訪問192.168.65.100,那麽訪問的是主

技術分享圖片


主上的ip:

技術分享圖片


從上ip:

技術分享圖片


[root@localhost ~]# iptables -I OUTPUT -p vrrp -j DROP

技術分享圖片


雖然從上有了vip,但是主上vip並沒有釋放掉

技術分享圖片


訪問192.168.65.100,依然是主上的默認虛擬服務器

技術分享圖片


停止主上的keepalived服務,那麽主上釋放vip,訪問192.168.65.100,已經不是主上的默認虛擬服務器了,而是從上的,因此vip已經轉移到從上

[root@localhost ~]# systemctl stop keepalived

技術分享圖片


重啟主上的keepalived,那麽vip會重新從從上轉移到主上

[root@localhost ~]# systemctl start keepalived

技術分享圖片

技術分享圖片

技術分享圖片



2018-4-9 15周4次課 用keepalived配置高可用集群