lvs+keepalived+nginx雙機主從熱備

1.相關名詞介紹

1.1 LVS是什麼?

      lvs是一個開源的軟件,可以實現傳輸層四層負載均衡。LVS是Linux Virtual Server的縮寫,意思是Linux虛擬服務器。 目前有三種IP負載均衡技術(VS/NAT、VS/TUN和VS/DR),linux虛擬機已經自己安裝了,無需安裝了。

1.2 keepalived是什麼?

      LVS可以實現負載均衡,但是不能夠進行健康檢查, 比如一個rs出現故障,LVS 仍然會把請求轉發給故障的rs服務器,這樣就會導致請求的無效性。keepalive 軟件可以進行健康檢查,而且能同時實現 LVS 的高可用性,解決 LVS 單點故障的問題,其實 keepalived 就是爲 LVS 而生的。

1.3 nginx常用命令

cd /usr/local/nginx/sbin/
./nginx 開啓
./nginx -s stop 強制快速停止或關閉
./nginx -s quit 任務執行完後停止或關閉
./nginx -s reload 重啓啓動

2.lvs+keepalived+nginx雙機主從熱備原理圖

在這裏插入圖片描述
流程:(1)客戶端發送請求,經過DNS域名解析到虛擬VIP(虛擬ip地址)                    (2)LVS+Keepalived實現負載均衡和故障轉移, 配置了主從關係,主nginx不掛掉的話,永遠訪問主nginx,掛掉的話,就會訪問備 nginx

3.lvs+keepalived+nginx雙機主從環境搭建

3.1 軟件安裝

1.下載keepalived

wget http://www.keepalived.org/software/keepalived-1.2.18.tar.gz

2.解壓安裝:

tar -zxvf keepalived-1.2.18.tar.gz -C /usr/local/

3.下載插件openssl

yum install -y openssl openssl-devel(需要安裝一個軟件包)

4.開始編譯keepalived

cd keepalived-1.2.18/ && ./configure --prefix=/usr/local/keepalived

5.make一下

make && make install

報錯: eepalived執行./configure --prefix=/usr/local/keepalived時報錯:configure: error: Popt libraries is required
出現此錯誤的原因:
未安裝popt的開發包
解決方法:

yum install popt-devel

安裝好popt的開發包。重新./configure 即可。
keepalived安裝成Linux系統服務
將keepalived安裝成Linux系統服務,因爲沒有使用keepalived的默認安裝路徑(默認路徑:/usr/local),安裝完成之後,需要做一些修改工作:
首先創建文件夾,將keepalived配置文件進行復制:

mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

然後複製keepalived腳本文件:

cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/sbin/keepalived /usr/sbin/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/

可以設置開機啓動:chkconfig keepalived on,到此我們安裝完畢!
keepalived 常用命令
service keepalived start
service keepalived stop

啓動報錯:Starting keepalived (via systemctl): Job for keepalived.service failed. See ‘systemctl status keepalived.service’ and ‘journalctl -xn’ for details.
解決辦法

 cd /usr/sbin/  
 rm -f keepalived   
 cp /usr/local/keepalived/sbin/keepalived  /usr/sbin/

3.2 配置相關文件

每個服務虛擬安裝keepalived 虛擬一個VIP ,配置主從關係,當主掛了,直接走備機。
Keepalived虛擬VIP 地址 192.168.223.110
A 服務器 192.168.223.120 主
B 服務器 192.168.223.131 備

修改主keepalived信息
修改主Nginx服務器keepalived文件, /etc/keepalived/keepalived.conf
State 爲MASTER

! Configuration File for keepalived

vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh" #運行腳本,腳本內容下面有,就是起到一個nginx宕機以後,自動開啓服務
    interval 2 #檢測時間間隔
    weight -20 #如果條件成立的話,則權重 -20
}
# 定義虛擬路由,VI_1 爲虛擬路由的標示符,自己定義名稱
vrrp_instance VI_1 {
    state MASTER #來決定主從
    interface ens33 # 綁定虛擬 IP 的網絡接口,根據自己的機器填寫
    virtual_router_id 121 # 虛擬路由的 ID 號, 兩個節點設置必須一樣
    mcast_src_ip 192.168.223.120 #填寫本機ip
    priority 100 # 節點優先級,主要比從節點優先級高
    nopreempt # 優先級高的設置 nopreempt 解決異常恢復後再次搶佔的問題
    advert_int 1 # 組播信息發送間隔,兩個節點設置必須一樣,默認 1s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 將 track_script 塊加入 instance 配置塊
    track_script {
        chk_nginx #執行 Nginx 監控的服務
    }
    virtual_ipaddress {
        192.168.223.110 # 虛擬ip,也就是解決寫死程序的ip怎麼能切換的ip,也可擴展,用途廣泛。可配置多個。
    }
}

修改從keepalived信息
修改主Nginx服務器keepalived文件, /etc/keepalived/keepalived.conf
State 爲BACKUP

! Configuration File for keepalived

vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh" #運行腳本,腳本內容下面有,就是起到一個nginx宕機以後,自動開啓服務
    interval 2 #檢測時間間隔
    weight -20 #如果條件成立的話,則權重 -20
}
# 定義虛擬路由,VI_1 爲虛擬路由的標示符,自己定義名稱
vrrp_instance VI_1 {
    state BACKUP #來決定主從
    interface ens33 # 綁定虛擬 IP 的網絡接口,根據自己的機器填寫
    virtual_router_id 121 # 虛擬路由的 ID 號, 兩個節點設置必須一樣
    mcast_src_ip 192.168.223.131 #填寫本機ip
    priority 100 # 節點優先級,主要比從節點優先級高
    nopreempt # 優先級高的設置 nopreempt 解決異常恢復後再次搶佔的問題
    advert_int 1 # 組播信息發送間隔,兩個節點設置必須一樣,默認 1s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 將 track_script 塊加入 instance 配置塊
    track_script {
        chk_nginx #執行 Nginx 監控的服務
    }
    virtual_ipaddress {
        192.168.223.110 # 虛擬ip,也就是解決寫死程序的ip怎麼能切換的ip,也可擴展,用途廣泛。可配置多個。
    }
}

nginx+keepalived實現高可用
寫入nginx_check.sh腳本 /etc/keepalived/nginx_check.sh

#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        killall keepalived
    fi
fi

注意該腳本一定要授權

chmod 777 nginx_check.sh

4.測試lvs+keepalived負載均衡高可用

4.1停掉主機的keepalived

service keepalived stop

訪問虛擬vip故障轉移,訪問的是備機
在這裏插入圖片描述

4.1重啓主機的keepalived

service keepalived start

在這裏插入圖片描述

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