2018-4-9 15周4次課 用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

1.png

內容爲: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

2.png

配置文件內容: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

3.png


更改檢查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

4.png

內容: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

5.png

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


更改腳本權限:

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


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

6.png

7.png


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


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

8.png


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

9.png


主上的ip:

11.png


從上ip:

12.png


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

13.png


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

14.png


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

15.png


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

[root@localhost ~]# systemctl stop keepalived

16.png


重啓主上的keepalived,那麼vip會重新從從上轉移到主上

[root@localhost ~]# systemctl start keepalived

17.png

18.png

19.png



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章