2.【詳細到哭系列】keepalived配置,實現zabbix主備的切換

来源:https://www.cnblogs.com/l-hh/archive/2020/03/20/12530882.html
-Advertisement-
Play Games

部署階段及問題筆記:https://www.cnblogs.com/l hh/category/1400262.html 兩台機器都安裝keepalived keepalived配置 Zabbix master配置文件: 如下圖: Zabbix slave配置文件: 如下圖: 註:主備中chk_za ...


部署階段及問題筆記:https://www.cnblogs.com/l-hh/category/1400262.html

兩台機器都安裝keepalived

[root@zabbix-master ~]# yum install keepalived.x86_64 -y

keepalived配置

Zabbix-master配置文件:

! Configuration File for keepalived

global_defs {
   router_id zabbix-master    #router_id 機器標識
}
vrrp_script chk_zabbix {
  script "/etc/keepalived/check.sh zabbix_server"
  interval 1          #每1秒檢測一次服務的運行狀態
  weight 30      #優先順序變化幅度
  fall 2             #嘗試兩次都成功才成功
  rise 2            #嘗試兩次都失敗才失敗
}
vrrp_script chk_mysql {
  script "/etc/keepalived/check.sh mysqld"
  interval 1
  weight 20
  fall 2      
  rise 2       
}
vrrp_instance VI_1 {             #vrrp實例定義部分
    state MASTER            #設置lvs的狀態,MASTER和BACKUP兩種,必須大寫 
    interface eth0          #設置對外服務的介面
    virtual_router_id 100       #設置虛擬路由標示,這個標示是一個數字,同一個vrrp實例使用唯一標示 
    priority 100               #定義優先順序,數字越大優先順序越高,在一個vrrp——instance下,master的優先順序必須大於backup 
    advert_int 1            #設定master與backup負載均衡器之間同步檢查的時間間隔,單位是秒
    authentication {             #設置驗證類型和密碼
        auth_type PASS      #主要有PASS和AH兩種
        auth_pass 1111      #驗證密碼,同一個vrrp_instance下MASTER和BACKUP密碼必須相同
    }
    virtual_ipaddress {         #設置虛擬ip地址,可以設置多個,每行一個
        192.168.115.200  
    }
 track_script {
        chk_zabbix
    }
    track_script {
        chk_mysql
    }
notify_master "/etc/keepalived/zabbix.sh start"             #指定當切換到master時,執行的腳本
notify_backup "/etc/keepalived/zabbix.sh stop"          #指定當切換到backup時,執行的腳本
} 

如下圖:

image

Zabbix-slave配置文件:

! Configuration File for keepalived

global_defs {
   router_id zabbix-slave
}
vrrp_script chk_zabbix {
  script "/etc/keepalived/check.sh zabbix_server"
  interval 1
  weight 5 
  fall 2    
  rise 2     
}
vrrp_script chk_mysql {
  script "/etc/keepalived/check.sh mysqld"
  interval 1
  weight 45 
  fall 2      
  rise 2       
}
vrrp_instance VI_1 {
    state BACKUP
    interface eth0   
    virtual_router_id 100
    priority 90
    advert_int 1 
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {   
        192.168.115.200  
    }
 track_script {
        chk_zabbix
    }
    track_script {
        chk_mysql
    }
notify_master "/etc/keepalived/zabbix.sh start" 
notify_backup "/etc/keepalived/zabbix.sh stop" 
} 

如下圖:

image

註:主備中chk_zabbix和chk_mysql的weight值。該設置目的是保證主機的zabbix或者mysql服務異常時keepalived能正常發生切換,並且當主機的zabbix和mysql服務重新正常啟動時keepalived能夠回切。

check.sh中的腳本(主備機相同):

註:該腳本為判斷zabbix、mysql和http服務的狀態,某個服務出現異常時將停止keepalived,VIP切換到zabbix-slave上。

#!/bin/bash

zabbix_server=`ps -C zabbix_server --no-header | wc -l`
mysqld=`ps -C mysqld --no-header | wc -l`

case $1 in
    zabbix_server)
        if [ $zabbix_server -gt 0 ];then
            exit 0 
        else
            exit 1
        fi
    ;;
    mysqld)
        if [ $mysqld -gt 0 ];then
            exit 0
        else
            exit 1 
        fi
    ;;
Esac

image

在伺服器執行:

[root@zabbix-master keepalived]# chmod +x check.sh

Zabbix.sh腳本(主備機相同):

#!/bin/bash
case $1 in
    start)
        systemctl start zabbix-server
    ;;
    stop)
        systemctl stop zabbix-server
    ;;
Esac

image

註:該腳本作用為當主備發生切換或者回切時始終保持有VIP的機器有zabbix服務而另一臺無zabbix服務,保證對外提供服務的只有一臺機器。(若兩台伺服器都提供zabbix服務則每一次事件都會觸發兩次告警)

主備機分別重啟keepalived服務並加入啟動服務

[root@zabbix-master ~]# systemctl restart keepalived
[root@zabbix-master ~]# systemctl enable keepalived 

檢查所有相關服務,接下來就測試:

image

高可用測試

Zabbix-master查看VIP信息:

image

模擬zabbix-master的zabbix或者mariadb服務出現故障:

image

此時再Zabbix-slave查看網卡信息:

image

Zabbix-web頁面也是可以正常訪問的:

image

接下來我們模擬zabbix-master故障恢復,測試VIP是否回切:

image

image

註:到此zabbix高可用就已經實現了。

註:如果不想VIP不必要的主備切換,導致zabbix-master恢復後再次搶占VIP問題,自行瞭解"解決VIP搶占問題"。


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

-Advertisement-
Play Games
更多相關文章
  • Humanizer 能夠滿足您所有.Net關於操作和展示以下類型的需求,包括字元串、枚舉、日期、時間、時間跨度、數字和數量。它採用 MIT 進行授權分發。 ...
  • using System.Security.Cryptography; static void Main(string[] args) { string rawString = "Make every second count."; string encryptedString = Encrypt3 ...
  • 近期公司重構了些界面,因為換膚和界面定製的緣故,需要把樣式和邏輯分開;所以記錄下關鍵的操作;主要是利用命令代替事件... 1 <Window x:Class="Demo_MVVM.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006 ...
  • 客戶端請求Api資源網關(受保護的資源)時,第一次收到請求會到授權中心(ids4服務網關)獲取驗證公鑰,並保持到記憶體中,後面的請求不會再到授權中心去獲得驗證公鑰,而是Api資源網關(受保護的資源)中直接通過保存下來的驗證公鑰進行驗證,從而通過授權 ...
  • 接下來的問題是記憶體怎麼分割? 這樣就可以將程式的各個段載入到相應的記憶體分區中 1. 固定分區與可變分區 2. 可變分區的管理過程 核心數據結構 請求分配 釋放記憶體 再次申請 例題: 3. 引入分頁 解決記憶體分區導致的記憶體效率問題 1. 可變分區造成的問題 2. 從連續到離散 3. 接下來就是頁表 ...
  • 先編寫應用程式,使之包含三個進程,分別輸出三個字母,不知道從何下手,先研究一下上課老師講的例子,代碼如下 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <pthread.h> 4 5 void loop(){ 6 while(1); 7 ...
  • 一 glusterfs存儲集群部署 註意:以下為簡略步驟,詳情參考《附009.Kubernetes永久存儲之GlusterFS獨立部署》。 1.1 架構示意 略 1.2 相關規劃 主機 IP 磁碟 備註 k8smaster01 172.24.8.71 —— Kubernetes Master節點 H ...
  • 每個被監控節點安裝zabbix客戶端 1)下載並安裝zabbix源: 2)安裝zabbix agent代理軟體: 3)更改配置文件: 4)啟動zabbix客戶端 註:這裡只演示一個節點,其餘的節點同理! 觸發器實現郵件報警和微信報警 觸發器的介紹 報警流程:定義條件 滿足條件 馬上觸發 實現報警 實 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...