linux集羣架構介紹,Keepalived介紹,用keepalived配置高可用集羣

集羣介紹

Linux集羣根據功能劃分爲兩大類:高可用和負載均衡。

高可用集羣

高可用集羣通常爲2臺服務器,一臺工作,另一臺作爲冗餘,當提供服務的機器宕機時,冗餘將接替繼續提供服務。 
實現高可用的開源軟件有:heartbeat、Keepalived,其中heartbeat已無人維護,基本上使用Keepalived來搭建高可用集羣。

負載均衡集羣

負載均衡集羣,需要有1臺服務器作爲分發器,它負責把用戶的請求分發給後端的服務器處理,在這個集羣裏,除了分發器外就是給用戶提供服務的服務器了,這些服務器數量至少爲2臺,所以負載均衡集羣至少要3臺服務器。 
實現負載均衡的開源軟件有:LVS、Keepalived、haproxy、nginx;商業軟件有:F5、Netscaler。

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協議的。

用keepalived配置高可用集羣

兩臺機器,都要安裝keepalived.

master: ip:192.168.176.135 編譯安裝Nginx 
backup: ip : 192.168.176.134 yum安裝Nginx

master:

安裝keepalived

[root@shuai-01 ~]# yum install -y keepalived

查看Nginx的版本:

[root@shuai-01 ~]# /usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.12.2

backup:

安裝keepalived

[root@shuai-02 ~]# yum install -y keepalived

yum 安裝Nginx

[root@shuai-02 ~]# yum install -y nginx

問題: 
[root@shuai-02 ~]# yum install -y nginx 
已加載插件:fastestmirror 
Loading mirror speeds from cached hostfile 
* base: mirrors.163.com 
* extras: mirrors.cqu.edu.cn 
* updates: mirrors.cqu.edu.cn 
沒有可用軟件包 nginx。 
錯誤:無須任何處理

[root@shuai-02 ~]# vi /etc/yum.repos.d/nginx.repo


[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/x86_64/
gpgcheck=0
enabled=1

處理方式在這片博文上

http://blog.csdn.net/lnboxue/article/details/74783885

配置keepalived 
master:

將下面的配置文件寫入/etc/keepalived/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"           #指定服務健康檢測(check)腳本
    interval 3                                     #檢測時間間隔
}
vrrp_instance VI_1 {                               
    state MASTER                                   #定義該服務的角色 
    interface ens33                                #定義在本機中監聽VIP的網卡
    virtual_router_id 51                           #虛擬路由id(同組中的服務器保持該id一致)
    priority 100                                   #指定本機權重(決定優先級)
    advert_int 1                                   
    authentication {                               #定義認證相關信息  
        auth_type PASS                             #認證類型爲密碼形式
        auth_pass 111111                           #定義認證密碼
    }
    virtual_ipaddress {                            #定義VIP
        192.168.176.100
    }
    track_script {                                 #加載監控服務(腳本)
        chk_nginx                                  #注意此處服務名稱要與上面監控腳本名稱一致
    }
}

創建監控腳本(腳本名,自己在配置文件中定義了):

[root@shuai-01 ~]# vim /usr/local/sbin/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      #在此停止Keepalived服務是爲了避免發生腦裂
        fi
fi

保存退出

“腦裂”,即當master宕機後仍然未釋放VIP,同時backup接替master提供服務要使用同一VIP,因而導致兩臺機器爭佔同一VIP導致服務紊亂,所以當master宕機後需要關閉其Keepalived服務來避免腦裂現象發生。Keepalived服務的日誌位置:/var/log/messages。

寫完腳本之後,還要給腳本變更權限

[root@shuai-01 ~]# chmod 755 /usr/local/sbin/check_ng.sh 

啓動keepalived服務:

[root@shuai-01 ~]# systemctl start keepalived
[root@shuai-01 ~]# ps aux |grep keep
root       5114  0.0  0.1 120720  1484 ?        Ss   21:23   0:00 /usr/sbin/keepalived -D
root       5115  0.3  0.3 127460  3292 ?        S    21:23   0:00 /usr/sbin/keepalived -D
root       5126  0.0  0.0 112680   976 pts/0    R+   21:23   0:00 grep --color=auto keep

查看Nginx服務

[root@shuai-01 ~]# ps aux |grep nginx
root       1846  0.0  0.1  45996  1272 ?        Ss   13:07   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody     1854  0.0  0.3  48484  3920 ?        S    13:07   0:00 nginx: worker process
nobody     1855  0.0  0.3  48484  3920 ?        S    13:07   0:00 nginx: worker process
root       5159  0.0  0.0 112684   972 pts/0    R+   21:26   0:00 grep --color=auto nginx

將Nginx停掉

[root@shuai-01 ~]# /etc/init.d/nginx stop
Stopping nginx (via systemctl):                            [  確定  ]
[root@shuai-01 ~]# ps aux |grep nginx
root       5190  0.0  0.0 112680   976 pts/0    R+   21:27   0:00 grep --color=auto nginx
[root@shuai-01 ~]# ps aux |grep nginx
root       5193  0.0  0.0 112680   976 pts/0    R+   21:27   0:00 grep --color=auto nginx
[root@shuai-01 ~]# ps aux |grep nginx
root       5198  0.0  0.0 112680   976 pts/0    R+   21:27   0:00 grep --color=auto nginx
[root@shuai-01 ~]# ps aux |grep nginx
root       5202  0.0  0.0 112680   976 pts/0    R+   21:27   0:00 grep --color=auto nginx

停掉Nginx服務後,keepalived會自動啓動Nginx服務

vip只能用ip add 查看

問題:

開啓keepalived後 ,用ip add 查看發現VIP沒有。查看配置文件,沒錯,查看腳本,沒錯。看日誌,就是沒啓動起來,像這樣

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:a1:0e:2c brd ff:ff:ff:ff:ff:ff
    inet 192.168.176.135/24 brd 192.168.176.255 scope global dynamic ens33
       valid_lft 1131sec preferred_lft 1131sec
    inet 192.168.176.150/24 brd 192.168.176.255 scope global secondary ens33:0
       valid_lft forever preferred_lft forever
    inet6 fe80::4f59:7251:18f1:8716/64 scope link 
       valid_lft forever preferred_lft forever

解決方法:

查看iptables規則,關閉。

[root@shuai-01 ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

查看selinux,

[root@shuai-01 ~]# getenforce
Enforcing

關閉後,VIP出來了。

[root@shuai-01 ~]# setenforce 0

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:a1:0e:2c brd ff:ff:ff:ff:ff:ff
    inet 192.168.176.135/24 brd 192.168.176.255 scope global dynamic ens33
       valid_lft 1048sec preferred_lft 1048sec
    inet 192.168.176.100/32 scope global ens33
       valid_lft forever preferred_lft forever

backup:

關掉防火牆

[root@shuai-02 ~]# systemctl stop firewalld
[root@shuai-02 ~]# setenforce 0

keepalived配置:

[root@shuai-02 ~]# vim /etc/keepalived/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
}
vrrp_instance VI_1 {       #只有該部分與master有區別
    state BACKUP           #角色
    interface ens33        
    virtual_router_id 51   
    priority 90            #權重
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 111111
    }
    virtual_ipaddress {
        192.168.176.100
    }   
    track_script {
        chk_nginx
    }   
}

保存退出

創建監控腳本

[root@shuai-02 ~]# vim /usr/local/sbin/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
        systemctl start nginx
        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

修改權限

[root@shuai-02 ~]# chmod 755 !$
chmod 755 /usr/local/sbin/check_ng.sh

啓動keepalived

[root@shuai-02 ~]# systemctl start keepalived

測試:

master宕機前 
訪問master的ip:

這裏寫圖片描述

訪問backup的ip: 
這裏寫圖片描述

訪問VIP:

這裏寫圖片描述

master宕機後:

[root@shuai-01 ~]# systemctl stop keepalived

master的ip:

這裏寫圖片描述

backup的ip:

這裏寫圖片描述

VIP的ip:

這裏寫圖片描述

這時,查看ip addr ,VIP在backup下。

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