天天看點

Keepalived + Nginx 搭建主備高可用

Keepalived + Nginx 搭建主備模式的高可用

Nginx 介紹

nginx是一款高性能的輕量級的http 伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器。并且cpu、記憶體等資源消耗卻非常低,運作非常穩定,并發高。很多公司均使用nginx。

Keepalived 介紹

keepalived是進群工作管理中保證叢集高可用的一個服務軟體,用來防止單點故障。

keepalived的作用是檢測web伺服器的狀态,如果有一台web伺服器當機,或工作出現故障,keepalived将檢測到,并将有故障的web伺服器從系統中剔除,當web伺服器工作正常後keepalived自動将web伺服器加入到伺服器群中,這些工作全部自動完成,不需要人工幹涉,需要人工做的隻是修複故障的web伺服器。

環境準備

nginx安裝包: http://nginx.org/download ,我這裡使用1.14.2

keepalived安裝包: http://www.keepalived.org/download.html,我這裡使用1.4.5

伺服器 主備 ip
CentOS7 192.168.1.110
CentOS7 192.168.1.111

環境安裝

  1. 使用 VMware15Pro + CentOS7 虛拟機。安裝教程
  2. nginx安裝(兩台伺服器相同步驟安裝)

    (1) 安裝gcc:yum install gcc-c++

    (2) 安裝PCRE庫:yum install -y pcre pcre-devel

    (3) 安裝zlib庫:yum install -y zlib zlib-devel

    (4) 安裝openssl:yum install -y openssl openssl-devel

    (5) 上傳nginx-1.14.2.tar.gz

    (6) 解壓:tar -zxvf nginx-1.14.2.tar.gz

    (7) onfigure配置:cd nginx-1.14.2 && ./configure --prefix=/usr/local/nginx

    (8) 編譯:make && make install

    (9) 啟動指令:/usr/local/nginx/sbin/nginx

    (10) 浏覽器通路:http://ip:80(出現nginx初始頁面即安裝nginx成功)

    注:如主機通路http://ip:80失敗,檢查虛拟機端口是否開放。

    為了更容易區分伺服器,我這邊修改了nginx的index.html頁面。

    vim /usr/local/nginx/html/index.html

    Keepalived + Nginx 搭建主備高可用
Keepalived + Nginx 搭建主備高可用
  1. keepalived安裝(兩台伺服器相同步驟安裝)

    (1) 上傳keepalived-1.4.5.tar.gz

    (2) 解壓tar -zxvf keepalived-1.4.5.tar.gz

    (2) cd keepalived-1.4.5/

    (3) ./configure --prefix=/usr/local/keepalived

    注:如遇警告 WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS。

    則執行:

      yum -y install libnl libnl-devel

      yum install -y libnfnetlink-devel

    (4)make && make install

    (5) 将keepalived安裝為linux服務:

      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/

      cp /usr/local/sbin/keepalived /usr/sbin/

      cp /tools/keepalived-1.4.5/keepalived/etc/init.d/keepalived /etc/init.d/

    (6) 設定開機啟動:chkconfig keepalived on

keepalived配置

 配置詳解[https://blog.csdn.net/u010391029/article/details/48311699]

 vim /etc/keepalived/keepalived.conf

 主(MASTER)配置:

! Configuration File for keepalived

global_defs {
  #主要配置預警資訊,如郵件發送
}
#keepalived 會定時執行腳本并且對腳本的執行結果進行分析,動态調整vrrp_instance的優先級。
#這裡的權重weight 是與下面的優先級priority有關。
#如果執行了一次檢查腳本成功,則權重會-20,也就是由100 - 20 變成了80,Master 的優先級為80 就低于了Backup的優先級90,那麼會進行自動的主備切換。 
#如果腳本執行結果為0并且weight配置的值大于0,則優先級會相應增加。 
#如果腳本執行結果不為0 并且weight配置的值小于0,則優先級會相應減少。 
vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh" #運作腳本,當nginx當機以後,自動開啟服務
    interval 2 #檢測時間間隔
    weight -20 #如果條件成立的話,則權重 -20,這裡比備機的
}
# 定義虛拟路由,VI_1 為虛拟路由的标示符,自己定義名稱
vrrp_instance VI_1 {
    state MASTER #來決定主從,主節點為MASTER 備份節點為BACKUP
    interface ens33 # 綁定虛拟 IP 的網絡接口,ipconfig檢視。
    virtual_router_id 99 # 虛拟路由的 ID 号, 兩個節點設定必須一樣
    mcast_src_ip 192.168.1.110 #填寫本機ip
    priority 100 # 節點優先級,主要比從節點優先級高 取值範圍0~254
    nopreempt # 優先級高的設定 nopreempt 解決異常恢複後再次搶占的問題
    advert_int 1 # 多點傳播資訊發送間隔,兩個節點設定必須一樣,預設 1s
	# 驗證資訊 兩個節點設定必須一樣
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    # 将 track_script 塊加入 instance 配置塊
    track_script {
        chk_nginx #執行 Nginx 監控的服務
    }
	# 虛拟ip,也就是解決寫死程式的ip怎麼能切換的ip.可設定多個
    virtual_ipaddress {
        192.168.1.99
    }
}
           

 備份(BACKUP)配置:

! Configuration File for keepalived

global_defs {
  #主要配置預警資訊,如郵件發送
}

vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh" #運作腳本,當nginx當機以後,自動開啟服務
    interval 2 #檢測時間間隔
    weight -20 #如果條件成立的話,則權重 -20,這裡比備機的
}
# 定義虛拟路由,VI_1 為虛拟路由的标示符,自己定義名稱
vrrp_instance VI_1 {
    state BACKUP#來決定主從,主節點為MASTER 備份節點為BACKUP
    interface ens33 # 綁定虛拟 IP 的網絡接口,ipconfig檢視。
    virtual_router_id 99 # 虛拟路由的 ID 号, 兩個節點設定必須一樣
    mcast_src_ip 192.168.1.111 #填寫本機ip
    priority 80 # 節點優先級,主要比從節點優先級高 取值範圍0~254
    nopreempt # 優先級高的設定 nopreempt 解決異常恢複後再次搶占的問題
    advert_int 1 # 多點傳播資訊發送間隔,兩個節點設定必須一樣,預設 1s
	# 驗證資訊 兩個節點設定必須一樣
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    # 将 track_script 塊加入 instance 配置塊
    track_script {
        chk_nginx #執行 Nginx 監控的服務
    }
	# 虛拟ip,也就是解決寫死程式的ip怎麼能切換的ip.可設定多個
    virtual_ipaddress {
        192.168.1.99
    }
}
           

 這裡寫入啟動腳本 vim /etc/keepalived/nginx_check.sh

#!/bin/bash
#判斷 nginx 程序是否存在
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
	#如果為0則嘗試啟動nginx
    /usr/local/nginx/sbin/nginx
	#給予2秒鐘的啟動時間
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
		#如果啟動失敗,将keepalived服務殺死。将轉移至備份節點
        killall keepalived
    fi
fi
           

 腳本賦權: chmod +x /data/program/nginx/sbin/nginx_service.sh

啟動測試

 啟動主備兩台的keepalived:service keepalived start

 查詢keepalived是否啟動:ps -ef|grep keepalived

 停止nginx:/usr/local/nginx/sbin/nginx -s quit

 查詢keepalived是否将nginx重新開機成功:ps -ef | grep nginx

Keepalived + Nginx 搭建主備高可用

 指令:ip a,192.168.1.99在主nginx上

Keepalived + Nginx 搭建主備高可用

 頁面通路192.168.1.99展示内容為主伺服器的ip。

Keepalived + Nginx 搭建主備高可用

 将主伺服器的keepalived關閉:service keepalived stop

 頁面通路192.168.1.99展示内容為備份伺服器的ip。

Keepalived + Nginx 搭建主備高可用