keepalived實現nginx高可用

来源:http://www.cnblogs.com/learningchencheng/archive/2017/10/23/7716945.html
-Advertisement-
Play Games

keepalived是什麼 keepalived直譯就是保持存活,在網路裡面就是保持線上了,也就是所謂的高可用或熱備,用來防止單點故障(單點故障是指一旦某一點出現故障就會導致整個系統架構的不可用)的發生,keepalived實現的基礎是vrrp,至於vrrp是什麼請直接看這裡 "vrrp" ,下麵我 ...


keepalived是什麼

keepalived直譯就是保持存活,在網路裡面就是保持線上了,也就是所謂的高可用或熱備,用來防止單點故障(單點故障是指一旦某一點出現故障就會導致整個系統架構的不可用)的發生,keepalived實現的基礎是vrrp,至於vrrp是什麼請直接看這裡vrrp,下麵我們直接看應用吧。

keepalived使用

為了方便使用,寫了一個基於ubuntu 16.04 server 的一鍵配置腳本,配置使用相關就在腳本里見吧

#!/bin/bash
# nginx+keepalived 高可用一鍵腳本for ubuntu 16.04

if [ $# -ne 4 ]; then
    echo "USAGE: $0 [MASTER|BACKUP] priority interface virtual_ipaddress"
    exit 0
fi

echo -e 'Installing nginx'
apt-get install nginx -y > /dev/null 2<&1

echo -e 'Installing keepalived'
apt-get install keepalived -y > /dev/null 2<&1

echo -e 'Configuring keepalived'
if [ ! -e /etc/keepalived ];then
    mkdir /etc/keepalived
fi
cat > /etc/keepalived/keepalived.conf <<EOF
! Configuration File for keepalived
global_defs {
    notification_email {
        chencheng199211@gmail.com
    }
    notification_email_from email  #表示發送通知郵件時郵件源地址是誰
    smtp_server 127.0.0.1  #表示發送email時使用的smtp伺服器地址,這裡可以用本地的sendmail來實現
    smtp_connect_timeout 30
    router_id master  #機器標識
}
vrrp_script chk_nginx {
    script "/etc/keepalived/check_nginx.sh"
    interval 2  #腳本執行間隔,單位秒
    weight -5  #腳本結果導致的優先順序變更:10表示優先順序+10;-10則表示優先順序-10
    fall 3
    rise 2
}

vrrp_instance VI_1 {
    state $1  #state指定instance(Initial)的初始狀態,就是說在配置好後,這台伺服器的初始狀態就是這裡指定的,但這裡指定的不算,還是得要通過競選通過優先順序來確定,里如果這裡設置為master,但如若他的優先順序不及另外一臺,那麼這台在發送通告時,會發送自己的優先順序,另外一臺發現優先順序不如自己的高,那麼他會就回搶占為master
    interface $3  #實例綁定的網卡,因為在配置虛擬IP的時候必須是在已有的網卡上添加的
    virtual_router_id 51  #這裡設置VRID,這裡非常重要,相同的VRID為一個組,他將決定多播的MAC地址
    priority $2  #設置本節點的優先順序,優先順序高的為master
    advert_int 2  #檢查間隔,預設為1秒
    authentication {  #這裡設置認證
        auth_type PASS  #認證方式,可以是PASS或AH兩種認證方式
        auth_pass 1111  #認證密碼
    }
    virtual_ipaddress {  #這裡設置的就是VIP,也就是虛擬IP地址,他隨著state的變化而增加刪除,當state為master的時候就添加,當state為backup的時候刪除,這裡主要是有優先順序來決定的,和state設置的值沒有多大關係,這裡可以設置多個IP地址
        $4
    }
    track_script {
       chk_nginx
    }

    #dont_track_primary:忽略VRRP的interface錯誤
    #track_interface:跟蹤介面,設置額外的監控,裡面任意一塊網卡出現問題,都會進入故障(FAULT)狀態,例如,用nginx做均衡器的時候,內網必須正常工作,如果內網出問題了,這個均衡器也就無法運作了,所以必須對內外網同時做健康檢查
    #mcast_src_ip:發送多播數據包時的源IP地址,這裡註意了,這裡實際上就是在那個地址上發送VRRP通告,這個非常重要,一定要選擇穩定的網卡埠來發送,這裡相當於heartbeat的心跳埠,如果沒有設置那麼就用預設的綁定的網卡的IP,也就是interface指定的IP地址
    #garp_master_delay:在切換到master狀態後,延遲進行免費的ARP(gratuitous ARP)請求
    #virtual_routes:原理和virtual ipaddress一樣,只不過這裡是增加和刪除路由
    #lvs_sync_daemon_interface:lvs syncd綁定的網卡
    #nopreempt:設置不搶占,這裡只能設置在state為backup的節點上,而且這個節點的優先順序必須別另外的高。當主mysql恢復後不搶占資源
    #preempt_delay:搶占延遲
    #debug:debug級別
    #notify_master:表示當切換到master狀態時,要執行的腳本
    #notify_backup:表示當切換到backup狀態時,要執行的腳本
    #notify_fault:
}
EOF

cat > /etc/keepalived/check_nginx.sh <<EOF
#!/bin/bash
# description:
# 定時查看nginx是否存在,如果不存在則啟動nginx
# 如果啟動失敗,則停止keepalived
status=$(ps -C nginx --no-heading | wc -l)
if [ "${status}" = "0" ]; then
        service nginx start
        sleep 2
        status2=$(ps -C nginx --no-heading | wc -l)
        if [ "${status2}" = "0"  ]; then
                /etc/init.d/keepalived stop
        fi
fi
EOF

echo -e "enable boot and starting"
service keepalived start
service nginx start

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本來是計劃對postfix做一個全系列的安裝文檔的,不過在查某個知識點的時候,偶然找到一個已經寫好的postfix全系列文章,在全部看完之後驚為天人,我認為:總體上會比我要寫的要好,所以我準備借用一下拿來主義的案例,直接總結一個鏈接的目錄連接給大家參考。 我之前幾篇寫好的已經構建了一個基本的郵件系統 ...
  • 一、lvs介紹 LVS的英文全名為“Linux Virtual Server”,即Linux虛擬伺服器,是一個虛擬的四層交換器集群系統,根據目標地址和目標埠實現用戶請求轉發,本身不產生流量,只做用戶請求轉發,目前是負載均衡性能最好的集群系統。 二、lvs集群的類型: lvs nat:修改請求報文的 ...
  • 一、簡介 1、認識 Rsync(remote synchronize)是一個遠程數據同步工具,可通過LAN/WAN快速同步多台主機間的文件。Rsync使用所謂的“Rsync演算法”來使本地和遠 程兩個主機之間的文件達到同步,這個演算法只傳送兩個文件的不同部分,而不是每次都整份傳送,因此速度相當快 Rsy ...
  • 摘要:一個服務的配置文件非常重要,弄懂配置文件是熟練掌握服務的必要前提。 一、httpd-2.2常見文件介紹 (1)配置文件: 主配置文件儘量別改,改自己的子配置文件 /etc/httpd/conf/httpd.conf 主配置文件 /etc/httpd/conf.d/*.conf 自配置文件 檢查 ...
  • nohup命令 起因 ssh到機器上,然後執行某個程式,再登錄發現程式早就不運行了。 原因 ssh過去之後,執行的大部分命令(守護進程不會斷開),都是ssh進程的子進程,ssh斷開,命令自然會中斷 解決辦法 命令前面加nohup就可以了,比方說: 局限性 當再次ssh過去的時候程式可能在運行,但是無 ...
  • 兩個命令df 、du結合比較直觀 df -h 查看整台伺服器的硬碟使用情況 cd / 進入根目錄 du -sh * 查看每個文件夾的大小 du -lh --max-depth=1 : 查看當前目錄下一級子文件和子目錄占用的磁碟容量。 這樣的組合可以快速定位大文件和分區滿了 ...
  • 本文目錄:1. 背景知識 1.1 java和jdk概念 1.2 jsp、servlet是什麼 1.3 web伺服器、web容器、應用程式伺服器 1.4 tomcat體繫結構2. 安裝tomcat 2.1 安裝jdk 2.2 安裝tomcat 1. 基礎背景知識 1.1 java和jdk概念 無論是何 ...
  • Vsftp服務 服務功能:文件傳輸 1.環境部署 ip=192.168.1.50 [root@localhost /]# rpm -ivh /mnt/Packages/vsftpd-2.2.2-11.el6_4.1.x86_64.rpm 2.匿名訪問 1)設置配置文件 [root@localhost ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...