KeepAlived+Nginx實現高可用負載

来源:http://www.cnblogs.com/shao-lixin/archive/2017/08/24/7422049.html
-Advertisement-
Play Games

一、環境及安裝版本: centos6.5、Nginx1.4.7、keepalived1.3.2 虛擬IP 真是IP Nginx埠 主從分配 10.0.90.215 10.0.90.217 80 MASTER 10.0.90.215 10.0.90.218 80 BACKUP 二、Nginx安裝 分 ...


一、環境及安裝版本:

centos6.5、Nginx1.4.7、keepalived1.3.2

虛擬IP

真是IP

Nginx埠

主從分配

10.0.90.215

10.0.90.217

80

MASTER

10.0.90.215

10.0.90.218

80

BACKUP

二、Nginx安裝

分別在10.0.90.217、10.0.90.218兩台機器安裝Nginx

1、  安裝Nginx所需要的安裝包  

# yum install gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel

2、  上傳Nginx(nginx-1.4.7.tar.gz)到/usr/local/src目錄

3、  編譯安裝Nginx

進入Nginx上傳目錄

# cd /usr/local/nginx

解壓安裝包

# tar –zxvf nginx-1.4.7.tar.gz

進入解壓後的文件夾

# cd nginx-1.4.7

指定編譯位置

# ./configure --prefix=/usr/local/nginx

編譯安裝

# make && make install

4、  配置Nginx

通過修改/conf/nginx.conf文件來修改Nginx的配置信息

# vim /usr/local/nginx/conf/nginx.conf

5、  系統防火牆中打開對應的埠80(預設80)或者關閉防火牆

# vim /etc/sysconfig/iptables

添加:

## nginx

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

添加後重啟防火牆:

# service iptables restart

或者不做第5步上述配置直接關閉防火牆(不推薦)

# service iptables stop

 

6、  啟動nginx

# /usr/local/nginx/sbin/nginx

檢查是否啟動成功

瀏覽器訪問Nginx所在機器真實IP,如下顯示即為成功

查看Nginx進程

# ps -ef|grep nginx

停止Nginx

# /usr/local/nginx/sbin/nginx -s stop

重啟Nginx

# /usr/local/nginx/sbin/nginx -s reload

三、Keepalived安裝(分別在10.0.90.217和10.0.90.218兩台機器安裝)

1、 上傳或下載 keepalived(keepalived-1.3.2.tar.gz)到 /usr/local/src 目錄

2、  解壓安裝

# cd /usr/local/src/

# tar -zxvf keepalived-1.3.2.tar.gz

# ./configure --prefix=/usr/local/keepalived

# make && make install

 

3、 將keepalived安裝成Linux系統服務

因為沒有使用keepalived的預設路徑安裝(預設是/usr/local),安裝完成後,需要手動複製預設的配置文件到預設路徑

# mkdir /etc/keepalived

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

## 下麵這個拷貝有時會找不到文件或文件夾導致無法複製

# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/ (可能不會成功)

## 可用如下拷貝替代:

# cp /usr/local/src/keepalived-1.3.2/keepalived/etc/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/

設置keepalived服務開機啟動

# chkconfig keepalived on

4、修改keepalived配置文件

# vim /etc/keepalived/keepalived.conf

配置如下

! Configuration File for keepalived

global_defs {
    # keepalived 自帶的郵件提醒需要開啟 sendmail 服務。建議用獨立的監控或第三方 SMTP
   router_id server1 ## 標識本節點的字條串,通常為 hostname 
}
vrrp_script chk_nginx {
    script "/etc/keepalived/check_nginx.sh" ## 檢測 nginx 狀態的腳本路徑
    interval 2    ## 檢測時間間隔
    weight -20    ## 如果條件成立,權重-20
}
vrrp_instance VI_1 {
    state MASTER    ## 主節點為 MASTER,對應的備份節點為 BACKUP
    interface eth0    ## 綁定虛擬 IP 的網路介面,與本機 IP 地址所在的網路介面相同,我的是 eth0
    virtual_router_id 146 ## 虛擬路由的 ID 號,兩個節點設置必須一樣
    mcast_src_ip 10.0.90.218    ## 本機 IP 地址
    priority 100    ## 節點優先順序,值範圍 0-254,MASTER 要比 BACKUP 高
    advert_int 1    ## 組播信息發送間隔,兩個節點設置必須一樣,預設 1s
    authentication {    ## 設置驗證信息,兩個節點必須一致
        auth_type PASS
        auth_pass 1111
    }
    track_script {
        chk_nginx    ## 執行 Nginx 監控的服務
    }
    virtual_ipaddress {
        10.0.90.215    ## 虛擬 ip,可以定義多個
    }
}
View Code

check_nginx.sh腳本代碼如下:

 1 #!/bin/bash
 2 # curl -IL http://localhost/index.htm
 3 count=0
 4 for (( k=0; k<2; k++ ))
 5 do
 6     check_code=$( curl --connect-timeout 3 -sL -w "%{http_code}\\n" http://localhost/index.html -o /dev/null )
 7     if [ "$check_code" != "200" ]; then
 8         count=$(expr $count + 1)
 9         sleep 3
10         continue
11     else
12         count=0
13         break
14     fi
15 done
16 if [ "$count" != "0" ]; then
17    /etc/init.d/keepalived stop
18 #    exit 1
19 else
20     exit 0
21 fi
View Code

5、最主要的一點,為check_nginx.sh增加可執行許可權,否則準備不切換並且又不報錯

# chmod +x /etc/check_nginx.sh

6、 修改Nginx主頁增加本機IP,以便後面主備切換查看效果

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

7、 啟動keepalived(兩台機器的keepalived均需要啟動)

# service keepalived start
如下顯示即為成功
在啟動 keepalived:                                      [確定]

8、 啟動完成後在MASTER機器運行命令

# ip add

可以看到配置的虛擬ip 10.0.90.215飄到Master上

網頁訪問效果

 

 

9、  停止Master服務

# service keepalived stop

10、在BACKUP機器運行

# ip add

發現虛擬IP已經飄到BUCKUP機器

網頁訪問效果:

 

 

 

KeepAlived+nginx配置完成。

 KeepAlived參數詳情請參考:

http://blog.csdn.net/fruler/article/details/53334082
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、前沿||潛心修心,學無止盡。生活如此,coding亦然。本人鳥窩,一隻正在求職的鳥。聯繫我可以直接微信:jkxx123321 二、項目總結 **||**文章參考資料:1. http://blog.csdn.net/u011272795/article/details/73824558 2.htt ...
  • 假如B類繼承A類,數據中有B類,把B類轉Data後存入,再取出。由於Model聲明的類型是A,那轉出來的也是A類型,這樣數據就丟失了一部分。 或者存入的是範型集合數據,存入再取出也會發生類型擦除。 原因在於對類對象進行序列化和反序列化時,很多第三方庫只是單純以Model聲明的類型為準,沒有處理類型擦 ...
  • 1、UIView Animation 1-1)、原始的,非Block。 1-2)、Block 2、Transition(轉場動畫) 2-1)、原始的 2-2)、封裝過的,簡潔,用UIView Animation,View的方法,非Layer 2-3)、VC自帶的模態視圖轉場動畫 ...
  • 今天封裝了一個動畫,想著以後可能會用,就封裝了一下。歡迎下載 https://github.com/zhichao8888/ZCCircleView 參數說明 @param centerPoint 中心點 @param radiusMax 半徑 @param radiusMin 周圍按鈕半徑 @pa ...
  • iOS精選源碼 iOS優質博客 前言騷年,你聽說過組件化嗎?沒有?但你一定玩過樂高玩具,樂高玩具本身一個龐大的模型卻是依靠無數個各自分工的基礎模塊構建而成!同理,隨著項業務的增長,項目也必然越來越龐大。此時,為了更好地管理我們的項目,我們可以適當地拆分部分模塊與其相關業務邏輯。這樣不僅能提高相關模塊 ...
  • Android精選源碼 Android優質博客 而對於Android開發者來說,這次大會上Kotlin被Google欽點成為成為Android官方開發語言無不是一個重磅炸彈,當看到這個消息的時候我也是激動的不行!!我相信用過kotlin寫過一段時間Android的人一定會和我有相同的感受!!!但是除 ...
  • 在Android程式內部, startActivity藉助Intent來啟動一個子Activity ...
  • 1. 同時滿足多個關鍵字 grep "word1" file_name | grep "word2" | grep "word3" 2. 滿足任意關鍵字 grep -e "word1" -e "word2" -e "word3" file_name 3. 排除關鍵字 grep -v "word" f ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...