KeepAlived(三):vrrp實例故障轉移(keepalived+haproxy)

来源:https://www.cnblogs.com/f-ck-need-u/archive/2018/03/14/8566233.html
-Advertisement-
Play Games

keepalived使用腳本進行健康檢查時的相關配置項。例如keepalived+haproxy實現haproxy的高可用。 keepalived分為vrrp實例的心跳檢查和後端服務的健康檢查。如果要配置後端服務,則後端服務只能是LVS。但vrrp能獨立與lvs存在,例如keepalive結合hap ...


keepalived使用腳本進行健康檢查時的相關配置項。例如keepalived+haproxy實現haproxy的高可用。

keepalived分為vrrp實例的心跳檢查和後端服務的健康檢查。如果要配置後端服務,則後端服務只能是LVS。但vrrp能獨立與lvs存在,例如keepalive結合haproxy、mysql等服務實現它們的高可用。

  1. vrrp實例的心跳檢查(lvs,haproxy,mysql...)
    • (1).除了LVS,vrrp只能通過腳本來實現vrrp的健康檢查,並通過腳本結束keepalived進程來中斷該實例的心跳通告。此時virtual server部分的配置需省略。
    • (2).對於LVS,無需使用任何腳本,因為所有keepalived節點會同時對後端服務進行健康檢查,並同時從LVS規則中剔除下線的服務。如果所有後端服務都不健康,那就沒有必要切換keepalived。
  2. 後端RS的健康檢查(只能是LVS)
    • (1).一般採用TCP_CHECK、HTTP_GET、SSL_GET進行健康檢查。
    • (2).但也能自寫腳本進行後端服務的健康檢查,這種模式稱為MISC_CHECK。

以下是從man keepalived中截取的通過腳本進行心跳檢查、健康檢查時的相關配置選項。

VRRP script(s)
    # 定義一個vrrp腳本,後續vrrp組或vrrp實例要執行某腳本時,需要從此處引用
    # 註意,所有vrrp實例都會監控腳本的退出狀態碼
    vrrp_script <SCRIPT_NAME> {
       script <STRING>|<QUOTED-STRING> # 要執行的命令或腳本路徑
       interval <INTEGER>              # 腳本調用時間間隔,預設1秒
       timeout <INTEGER>               # 腳本執行等待超時時長,超過該時長,表示腳本執行失敗
       weight <INTEGER:-254..254>      # 根據該權重值調整vrrp實例優先順序值,預設值為0
       rise <INTEGER>                  # 需要成功多少次,vrrp才進行角色狀態切換
       fall <INTEGER>                  # 需要失敗多少次,vrrp才進行角色狀態切換
       user USERNAME [GROUPNAME]       # 腳本執行身份,group預設同username
       init_fail                       # 假定腳本初始化時就處於失敗狀態
    }

VRRP synchronization group(s)
    # 分別表示切換為主/備/出錯(例如監控的eth0壞了)時所執行的腳本。
    # 要為腳本傳遞參數時,使用引號包圍整個腳本和參數
    notify_master /path/to_master.sh [username [groupname]]
    notify_backup /path/to_backup.sh [username [groupname]]
    notify_fault "/path/fault.sh VG_1" [username [groupname]]

    # notify表示只要狀態切換都會調用的腳本,且該腳本是在以上三個腳本執行之後再調用的,
    # keepalived會自動傳遞四個參數,因此不要手動為腳本傳遞參數。
    # $1 = "GROUP"|"INSTANCE"
    # $2 = vrrp組名稱或vrrp實例名
    # $3 = 切換的目標狀態(MASTER/BACKUP/FAULT)
    # $4 = 優先順序數值(priority value)
    notify /path/notify.sh [username [groupname]]


VRRP instance(s)部分

    # 監控介面,當某介面down掉時,切換為fault狀態
    track_interface {
      eth0
      eth1
      eth2 weight <-254..254>
      ...
    }

    # 監控腳本,即執行vrrp_script定義的腳本
    track_script {
        <SCRIPT_NAME>
        <SCRIPT_NAME> weight <-254..254>
    }

    # notify_master/backup/fault/stop分別表示切換為主、備、出錯(例如監控的eth0壞了)、vrrp停止時所執行的腳本
    # 要為腳本傳遞參數時,使用引號包圍整個腳本和參數
    notify_master <STRING>|<QUOTED-STRING> [username [groupname]]
    notify_backup <STRING>|<QUOTED-STRING> [username [groupname]]
    notify_fault <STRING>|<QUOTED-STRING> [username [groupname]]
    notify_stop <STRING>|<QUOTED-STRING> [username [groupname]]   # executed when stopping vrrp

    # notify表示只要狀態切換都會調用的腳本,並且該腳本是在以上三個腳本執行之後再調用的
    notify <STRING>|<QUOTED-STRING> [username [groupname]]



Virtual server(s)部分

    # 投票被選舉成功或失敗時執行的腳本
    quorum_up <STRING>|<QUOTED-STRING>
    quorum_down <STRING>|<QUOTED-STRING>

    real_server <IPADDR> <PORT>
       {
           # 當健康檢查的後端rs上線、下線時執行的腳本
           notify_up <STRING>|<QUOTED-STRING>
           notify_down <STRING>|<QUOTED-STRING>

           # MISC健康檢查類型,該類型通過自定義腳本來檢查後端健康狀況
           MISC_CHECK
           {
               # 執行哪個腳本來判斷後端是否健康
               misc_path <STRING>|<QUOTED-STRING>
               # Script execution timeout
               misc_timeout <INT>

               # 指定一個隨機延遲時間,防止同時檢查所有後端,指定為0時表示禁止該功能。
               # 預設啟動該功能,預設最大間隔為delay_loop的值。
               warmup <INT>

               # 如果指定該選項,則根據健康檢查腳本的退出狀態碼動態調整權重值
               # 退出狀態碼為:
               # 0:表示檢查成功,不做任何權重修改
               # 1:表示檢查失敗
               # 2-255:表示檢查成功,但權重值減2,例如(狀態碼為255,則設置權重為253)
               misc_dynamic

               # 指定運行後端健康檢查腳本的身份,不指定group時將預設使用username
               user USERNAME [GROUPNAME]
           }
       }
    }

例如,在keepalived+haproxy時。

vrrp_script check_haproxy {
        script"/etc/keepalived/chk_haproxy.sh"
        interval 2
        weight 2
    }

global_defs {
        router_id haproxy1
    }

vrrp_instanceVI_1 {
        state MASTER
        interface eth0
        virtual_router_id 150
        priority 50
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }

virtual_ipaddress{
        192.168.1.201
    }
track_script {
        check_haproxy
    }
}

其中check_haproxy的腳本/etc/keepalived/chk_haproxy.sh內容如下:

#!/bin/bash

if killall -0 haproxy &>/dev/null;then
    serivce haproxy restart
    sleep 1
    if killall -0 haproxy &>/dev/null;then
        service keepalived stop
    fi
fi

 

回到Linux系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7048359.html
回到網站架構系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7576137.html
回到資料庫系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7586194.html
轉載請註明出處:http://www.cnblogs.com/f-ck-need-u/p/8566233.html

註:若您覺得這篇文章還不錯請點擊右下角推薦,您的支持能激發作者更大的寫作熱情,非常感謝!


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

-Advertisement-
Play Games
更多相關文章
  • 1.新建虛擬機==》典型==》稍後安裝操作系統==》選擇linux==>centos 64位 2.填寫虛擬機名字以及安裝位置。 3.磁碟容量採用預設即可。 4. 自定義硬體: 1) 記憶體:如果電腦記憶體小於等於4G,設為1G;否則設為2G 2)CD/DVD 先預設。 3)網路適配器:NAT 4)其他選 ...
  • 由於實驗室擬態存儲的項目需要通過NAT模式來映射NFS伺服器已實現負載均衡的目的,通過調研了多種負載均衡機制,筆者最終選擇了 LVS的NAT模式 來實現需求,接下來通過博客來記錄一下LVS NAT模式的配置流程。 1.LVS服務的簡介: LVS 是 Linux Virtual Server 的簡寫, ...
  • 驅動的完成步驟: ~~~~ 1. 分配一個 gendisk 結構體 2. 註冊塊設備 3. 分配一個 request_queue 隊列 4. 配置 gendisk 5. 完成上一篇框架中提到的 "處理函數" 6. 添加磁碟 add_disk ~~~~ 初始化程式如下 ~~~~ static int ...
  • 系統的輸入與輸出: 方式 | 描述符 | 含義 | | stdin | 0 | 標準輸入 stdout | 1 | 標準輸出 stderr | 2 | 標準錯誤輸出 把 make 輸出的全部信息重定向到某個文件中: ~~~~ make build_output ~~~~ 把錯誤信息都輸出到一個文件中 ...
  • 監控原理: ActiveMQ作為依賴java環境的中間件,同樣可以像tomcat一樣用JMX(java擴展程式)監控。並且與tomcat不同的是,ActiveMQ自帶了JMX,只需在配置文件中開啟即可,在配置好JMX之後,可以通過Jconsole(監控java環境的工具)監控ActiveMQ 環境: ...
  • Redis是我們當下比較流行使用的非關係資料庫,可支持多樣化的數據類型,多線程高併發支持,redis運行在記憶體擁有更快的讀寫。因為redis的表現如此出色,如何能保障redis在運行中能夠應對宕機故障, 所以今天總結了下redis主從高可用的搭建,參考了網上一些大神的博客文章,發現很多都是有坑的,所 ...
  • 伺服器需要換python環境,手賤重裝了,今天湊巧需要測試資料庫,花了一個小時搞了一下MySQL安裝。 1.刪除原有Mariadb 說明:目前centos預設的MySQL是Mariadb,由於習慣了MySQL(Oracle)加上一堆亂七八糟的原因,還是需要MySQL作資料庫。 Linux終端輸入命令 ...
  • 安裝前要關閉防火牆,防止外網不能訪問,這一點很重要,要不然外網訪問不了; ①關閉防火牆:service iptables stop ②永久關閉防火牆:chkconfig iptables off ③查看防火牆狀態:service iptables status 1.安裝Apache [root@lo ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...