1. 程式人生 > >inotify+rsync+mysql主主復制+keepalived實現zabbix高可用

inotify+rsync+mysql主主復制+keepalived實現zabbix高可用

lease 包含 ati weight ebp nag fig 數據信息 replicat

思路:主備機通過inotify+rsync實現文件同步,通過mysql主主復制實現數據同步,同一時刻只有一臺服務器能對外提供zabbix服務,web端登陸虛ip訪問,被監控主機通過配置虛ip來完成監控。


配置:

主機
ip
操作系統
zabbix版本
mysql版本
inotify版本
rsync版本
備註
zabbix-server01172.27.9.80
Centos7.3.1611

zabbix_server (Zabbix) 3.4.10

5.7.223.143.1.2關閉防火墻和selinux
zabbix-server02172.27.9.81
Centos7.3.1611

zabbix_server (Zabbix) 3.4.10

5.7.223.143.1.2關閉防火墻和selinux



Part 1 基礎環境安裝

zabbix安裝

1.安裝源碼庫配置部署包

這個部署包包含了yum配置文件:

[root@zabbix-server01 ~]# rpm -ivh http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm


2.安裝Zabbix-server部署包

[root@zabbix-server01 ~]# yum -y install zabbix-server-mysql zabbix-web-mysql

技術分享圖片


3.安裝初始化數據庫

3.1下載並安裝MySQL官方的 Yum Repository

[root@zabbix-server01 ~]# rpm -ivh https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

3.2查看當前可用的Mysql安裝源

[root@zabbix-server01 ~]# yum repolist enabled | grep "mysql.*-community.*"
mysql-connectors-community/x86_64 MySQL Connectors Community                  51
mysql-tools-community/x86_64      MySQL Tools Community                       63
mysql57-community/x86_64          MySQL 5.7 Community Server                 267

3.3安裝MySQL數據庫

[root@zabbix-server01 ~]# yum -y install mysql-community-server

總下載量:205M,請耐心等待。

技術分享圖片

安裝完成,系統自帶的mariadb被覆蓋。

3.4啟動mysql服務並設置開機啟動

[root@zabbix-server01 ~]# systemctl start mysqld.service
[root@zabbix-server01 ~]# systemctl enable mysqld.service

3.5登陸mysql

安裝好後,會在my.cnf文件中自動生成一個密碼

[root@zabbix-server01 ~]# cat /var/log/mysqld.log | grep password
2018-06-20T09:40:53.666115Z 1 [Note] A temporary password is generated for root@localhost: )>b5dXb+sLei
[root@zabbix-server01 ~]# mysql -uroot -p

輸入密碼“)>b5dXb+sLei”

3.6修改密碼規則(默認密碼規則太復雜不容易記憶)

mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.01 sec)
mysql> set global validate_password_length=1;
Query OK, 0 rows affected (0.00 sec)

3.7重置密碼(登錄數據庫後需首先重置密碼才能進行後續操作)

mysql> set password = password('mysql123');
Query OK, 0 rows affected, 1 warning (0.00 sec)

3.8創建數據庫和zabbix用戶並授權

mysql> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix123';
Query OK, 0 rows affected, 1 warning (0.00 sec)

3.9導入初始架構(Schema)和數據

[root@zabbix-server01 ~]# cd /usr/share/doc/zabbix-server-mysql-3.4.10/
[root@zabbix-server01 zabbix-server-mysql-3.4.10]#  zcat create.sql.gz | mysql -uzabbix -pzabbix123 -D zabbix
mysql: [Warning] Using a password on the command line interface can be insecure.

執行過程中會有一個關於密碼的告警,忽略。

查看執行結果:

mysql> show tables from zabbix;
mysql> select count(*) tables,table_schema from information_schema.tables  where table_schema = 'zabbix';

技術分享圖片

技術分享圖片

一共有140張表


4.啟動Zabbix Server進程

4.1在zabbix_server.conf中編輯數據庫配置

解註釋DBHost:

[root@zabbix-server01 zabbix]# sed -i 's/^ *# *DBHost=.*/DBHost=localhost/g' /etc/zabbix/zabbix_server.conf

修改zabbix密碼:

[root@zabbix-server01 zabbix]# sed -i 's/^ *# *DBPassword=.*/DBPassword=zabbix123/g' /etc/zabbix/zabbix_server.conf

4.2修改zabbix安裝目錄屬主和權限

[root@zabbix-server01 zabbix]# chown -R zabbix:zabbix /etc/zabbix/
[root@zabbix-server01 zabbix]# chmod -R 755 /etc/zabbix/

4.3啟動zabbix-server服務,並設置開機自啟

[root@zabbix-server01 ~]# systemctl restart zabbix-server
[root@zabbix-server01 ~]# systemctl enable zabbix-server


5.編輯Zabbix前端的PHP配置

5.1設置時區為Asia/Shanghai:

[root@zabbix-server01 ~]# sed -i.bak 's/^ *# *php_value date.timezone Europe\/Riga/php_value date.timezone Asia\/Shanghai/g' /etc/httpd/conf.d/zabbix.conf

5.2啟動apache服務,並設置開機自啟

[root@zabbix-server01 conf.d]# systemctl restart httpd
[root@zabbix-server01 conf.d]# systemctl enable httpd


6.登陸zabbix

訪問地址:http://localhost/zabbix

技術分享圖片

下一步:

技術分享圖片

下一步:

技術分享圖片

輸入密碼“zabbix123”,下一步:

技術分享圖片

name填寫為‘myzabbix81’和zabbix-server02的‘myzabbix82’區分,host和port默認,下一步:

技術分享圖片

信息匯總確認,下一步:

技術分享圖片

下載配置文件並另存為‘/etc/zabbix/web/zabbix.conf.php’,註意屬主為zabbix:zabbix,權限為755:

[root@zabbix-server02 ~]# cd /etc/zabbix/web/
[root@zabbix-server02 web]# ll
總用量 8
-rwxr-xr-x. 1 zabbix zabbix 1036 6月   4 19:40 maintenance.inc.php
-rwxr-xr-x  1 zabbix zabbix  427 6月  20 22:38 zabbix.conf.php
[root@zabbix-server02 web]# more zabbix.conf.php 
<?php
// Zabbix GUI configuration file.
global $DB;
$DB['TYPE']     = 'MYSQL';
$DB['SERVER']   = 'localhost';
$DB['PORT']     = '0';
$DB['DATABASE'] = 'zabbix';
$DB['USER']     = 'zabbix';
$DB['PASSWORD'] = 'zabbix123';
// Schema name. Used for IBM DB2 and PostgreSQL.
$DB['SCHEMA'] = '';
$ZBX_SERVER      = 'localhost';
$ZBX_SERVER_PORT = '10051';
$ZBX_SERVER_NAME = 'myzabbix81';
$IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG;

單擊‘Finish’跳轉:


技術分享圖片

配置完成,登陸web主頁:

技術分享圖片

初始用戶名密碼為'Admin/zabbix'

zabbix-server01完成zabbix安裝,zabbix-server02按同樣步驟安裝即可。


Keepalived安裝

1.keepalived安裝

分別在主備機執行如下操作:

[root@zabbix-lvs01 ~]# yum -y install keepalived


2.keepalived配置

主機配置如下:

[root@zabbix-server01 ~]# more /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   router_id lvs-nginx01      #router_id 機器標識,通常為hostname,但不一定非得是hostname。故障發生時,郵件通知會用到。
}



vrrp_script chk_zabbix {
  script "/etc/keepalived/check.sh zabbix_server"
  interval 2
  weight 30 
  fall 2        #嘗試兩次都成功才成功
  rise 2        #嘗試兩次都失敗才失敗
}

vrrp_script chk_mysql {
  script "/etc/keepalived/check.sh mysqld"
  interval 2
  weight 20 
  fall 2        #嘗試兩次都成功才成功
  rise 2        #嘗試兩次都失敗才失敗
}

vrrp_instance VI_1 {            #vrrp實例定義部分
    state MASTER               #設置lvs的狀態,MASTER和BACKUP兩種,必須大寫 
    interface ens33               #設置對外服務的接口
    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地址,可以設置多個,每行一個
        172.27.9.80 
    }
    track_script {
        chk_zabbix
    }
    track_script {
        chk_mysql
    }
notify_master "/etc/keepalived/zabbix.sh start" #指定當切換到master時,執行的腳本
notify_backup "/etc/keepalived/zabbix.sh stop" #指定當切換到backup時,執行的腳本
}

備機配置如下:

[root@zabbix-server02 ~]# more /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   router_id lvs-nginx01      #router_id 機器標識,通常為hostname,但不一定非得是hostname。故障發生時,郵件通知會用到。
}



vrrp_script chk_zabbix {
  script "/etc/keepalived/check.sh zabbix_server"
  interval 2
  weight 5 
  fall 2        #嘗試兩次都成功才成功
  rise 2        #嘗試兩次都失敗才失敗
}

vrrp_script chk_mysql {
  script "/etc/keepalived/check.sh mysqld"
  interval 2
  weight 45 
  fall 2        #嘗試兩次都成功才成功
  rise 2        #嘗試兩次都失敗才失敗
}

vrrp_instance VI_1 {            #vrrp實例定義部分
    state BACKUP               #設置lvs的狀態,MASTER和BACKUP兩種,必須大寫 
    interface ens33               #設置對外服務的接口
    virtual_router_id 100        #設置虛擬路由標示,這個標示是一個數字,同一個vrrp實例使用唯一標示 
    priority 90               #定義優先級,數字越大優先級越高,在一個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地址,可以設置多個,每行一個
        172.27.9.80 
    }
    track_script {
        chk_zabbix
    }
    track_script {
        chk_mysql
    }
notify_master "/etc/keepalived/zabbix.sh start" #指定當切換到master時,執行的腳本
notify_backup "/etc/keepalived/zabbix.sh stop" #指定當切換到backup時,執行的腳本
}

註意主備中chk_zabbix和chk_mysql的weight值。該設置目的是保證主機的zabbix或者mysql服務異常時keepalived能正常發生切換,並且當主機的zabbix和mysql服務重新正常啟動時keepalived能夠回切。具體的切換機制可以查看Keepalived中Master和Backup主備切換機制淺析。


vrrp_script中的腳本(主備機相同):

[root@zabbix-server01 keepalived]# more check.sh 
#!/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

該腳本為判斷zabbix和mysql服務的狀態。


notify_master和notify_backup執行的腳本(主備機相同):

[root@zabbix-server01 keepalived]# more zabbix.sh 
#!/bin/bash
case $1 in
    start)
        systemctl start zabbix-server
    ;;
    stop)
        systemctl stop zabbix-server
    ;;
esac

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


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

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


至此完成zabbix-server、keepalived安裝,通過虛擬IP訪問:

http://172.27.9.80/zabbix/

技術分享圖片



Part 2 文件及數據同步

mysql數據庫同步

1.編輯配置文件/etc/my.cnf

zabbix-server01:

[root@zabbix-server01 ~]# more /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

server-id=1                       #保證每個服務器不一樣
log-bin=mysql-bin                 #開啟bin日誌
auto-increment-increment = 2      #步進值auto_imcrement。一般有n臺主MySQL就填n
auto-increment-offset = 1         #起始值。一般填第n臺主MySQL。此時為第一臺主MySQL
binlog_format = mixed             #設置binlog格式為mixed
sync_binlog=1                     #事務特性每1次事務提交 
binlog-do-db=zabbix               #同步的據庫名
binlog-ignore-db=mysql            #不同步數據庫名
binlog-ignore-db=sys
binlog-ignore-db=performance_schema
binlog-ignore-db=information_schema
replicate-do-db=zabbix            #需要復制的數據庫   
replicate-ignore-db=mysql         #不需要復制的數據庫
replicate-ignore-db=sys
replicate-ignore-db=performance_schema
replicate-ignore-db=information_schema

zabbix-server02:

[root@zabbix-server02 ~]# more /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
server-id=2                       #保證每個服務器不一樣
log-bin=mysql-bin                 #開啟bin日誌
auto-increment-increment = 2      #步進值auto_imcrement。一般有n臺主MySQL就填n
auto-increment-offset = 2         #起始值。一般填第n臺主MySQL。此時為第一臺主MySQL
binlog_format = mixed             #設置binlog格式為mixed
sync_binlog=1                     #事務特性每1次事務提交 
binlog-do-db=zabbix               #同步的據庫名
binlog-ignore-db=mysql            #不同步數據庫名
binlog-ignore-db=sys
binlog-ignore-db=performance_schema
binlog-ignore-db=information_schema
replicate-do-db=zabbix            #需要復制的數據庫   
replicate-ignore-db=mysql         #不需要復制的數據庫
replicate-ignore-db=sys
replicate-ignore-db=performance_schema
replicate-ignore-db=information_schema

分別重啟mysql服務:

[root@zabbix-server01 ~]# systemctl restart mysqld


2.新建備份用戶

zabbix-server01上新建備機可以登錄的MySQL用戶‘zabbix82’:

mysql> GRANT REPLICATION SLAVE ON *.* TO 'zabbix82'@'172.27.9.82' IDENTIFIED BY 'zabbix82';
mysql> FLUSH PRIVILEGES;

zabbix-server02上新建主機可以登錄的MySQL用戶‘zabbix81’:

mysql> GRANT REPLICATION SLAVE ON *.* TO 'zabbix81'@'172.27.9.81' IDENTIFIED BY 'zabbix81';
mysql> FLUSH PRIVILEGES;


3.查看二進制日誌名和位置

mysql> show master status;

zabbix-server01:

技術分享圖片

zabbix-server02:

技術分享圖片


4.啟動同步

4.1主從同步

構建zabbix-server01到zabbix-server02的主從同步

以下操作都在zabbix-server02上執行:

mysql> CHANGE MASTER TO
    -> MASTER_HOST='172.27.9.81',
    -> MASTER_USER='zabbix82',
    -> MASTER_PASSWORD='zabbix82',
    -> MASTER_LOG_FILE='mysql-bin.000002',
    -> MASTER_LOG_POS=50334;
Query OK, 0 rows affected, 2 warnings (0.38 sec)

開啟復制:

mysql> START SLAVE;

查看主從復制是否配置成功:

mysql> SHOW SLAVE STATUS\G

技術分享圖片

Slave_IO_Running: YES和Slave_SQL_Running狀態都為‘Yes’,復制狀態正常。

4.2主主同步

再做一次zabbix-server02到zabbix-server01的主從同步即完成了主主同步

以下操作都在zabbix-server01上執行:

mysql> CHANGE MASTER TO
    -> MASTER_HOST='172.27.9.82',
    -> MASTER_USER='mysql81',
    -> MASTER_PASSWORD='mysql81',
    -> MASTER_LOG_FILE='mysql-bin.000001',
    -> MASTER_LOG_POS=4362658;
Query OK, 0 rows affected, 2 warnings (0.46 sec)

開啟復制:

mysql> START SLAVE;

查看主從復制是否配置成功:

mysql> SHOW SLAVE STATUS\G

技術分享圖片

Slave_IO_Running: YES和Slave_SQL_Running狀態都為‘Yes’,復制狀態正常。

主主復制配置完成。


文件同步

之前公司異地災備時用rsync做程序的同步,不過由於生產環境不會隨意動且變更都是在晚上,程序的同步實時性要求不高,所以采用每天晚上通過定時任務方式進行同步。本文中由於zabbix-server兩臺主機配置文件需實時同步,所以通過定時任務方式不可行,本文采用inotify工具對同步數據目錄信息的監控,結合rsync完成對數據信息的實時同步。

Rsync

1.rsync安裝

zabbix-server01和zabbix-server02上執行:

[root@zabbix-server01 ~]# yum -y install rsync


2.rsync配置

zabbix-server01配置如下:

[root@zabbix-server01 ~]# cd /etc && ll|grep rsync

技術分享圖片

註意pwd文件的權限為600

[root@zabbix-server01 ~]# more /etc/rsyncd.conf
uid=root
gid=root
max connections=100
use chroot=true
log file=/var/log/rsyncd.log
motd file = /etc/rsyncd.motd
transfer logging = true
hosts allow=172.27.9.82
[zabbix]
path=/etc/zabbix/
exclude = web
comment = etc zabbix 
read only = no 
list = yes 
auth users = root 
secrets file=/etc/rsyncd.pwd
[web1]
path=/etc/httpd/conf/
comment = httpd conf
read only = no
list = yes
auth users = root
secrets file=/etc/rsyncd.pwd
[web2]
path=/etc/httpd/conf.d/
comment = httpd conf.d
read only = no
list = yes
auth users = root
secrets file=/etc/rsyncd.pwd

技術分享圖片

zabbix-server02配置如下:

技術分享圖片

rsyncd.conf文件與主機相同,只是‘hosts allow=172.27.9.81’

同步的文件為/etc/zabbix/(不包括web)、/etc/httpd/conf/和/etc/httpd/conf.d/,可根據實際情況增減。


3.啟動rsync

主備機上同時運行:

[root@zabbix-server01 ~]# rsync --daemon --config=/etc/rsyncd.conf


4.參數說明

uid=root        #服務器端傳輸文件時,要發哪個用戶和用戶組來執行
gid=root        #服務器端傳輸文件時,要發哪個用戶和用戶組來執行
max connections=100      #客戶端最多連接數
use chroot=true          #用chroot,在傳輸文件之前,服務器守護程序在將chroot到文件系統中的目錄中,這樣做的好處是可能保護系統被安裝漏洞侵襲的可能。缺點是需要超級用戶權限。另外對符號鏈接文件,將會排除在外。也就是說,你在rsync服務器上,如果有符號鏈接,你在備份服務器上運行客戶端的同步數據時,只會把符號鏈接名同步下來,並不會同步符號鏈接的內容
log file=/var/log/rsyncd.log        #rsync服務器的日誌
motd file=/etc/rsyncd.motd          #定義motd file路徑,rsyncd.motd內容是定義服務器信息的,用戶登錄時會看到這個信息
transfer logging = true             #傳輸文件日誌
hosts allow=172.27.9.82             #允許的ip地址
[zabbix]                  #模塊名
path=/etc/zabbix/     #同步的目錄
exclude = web                 #同步目錄中去除的目錄,即web不同步
comment = etc zabbix    #註釋,註釋內容可自己定義,起提示作用
read only = no          #只讀選擇,如為yes則不讓客戶端上傳文件到服務器上
list = yes              #服務器上提供同步數據的目錄是否顯示
auth users = root       #認證用戶是root
secrets file=/etc/rsyncd.pwd        #密碼文件保存路徑

註意:配置文件裏不能有註釋信息


5.開機自啟動

主備機分別執行:

[root@zabbix-server01 ~]# sed -i '$a rsync --daemon --config=/etc/rsyncd.conf' /etc/rc.d/rc.local


inotify

1.inotify安裝

主備機同時執行:

添加eprl源:

[root@zabbix-server01 /]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

安裝inotify:

[root@zabbix-server01 /]# yum -y install inotify-tools


2.編寫監控同步腳本

[root@zabbix-server01 ~]# more /root/scripts/inotify.sh
#!/bin/bash
ZabbixPath=/etc/zabbix/
WebPath=/etc/httpd/conf/
WebPath2=/etc/httpd/conf.d/
Server=172.27.9.82

/usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib,move  $WebPath $WebPath2 $ZabbixPath |
while read line
do
    if [[ $line =~ $ZabbixPath ]];then
    rsync -vzrtopg --progress --delete  $ZabbixPath  root@$Server::zabbix  --password-file=/etc/rsyncd.pwd2
    elif [[ $line =~ $WebPath2 ]];then
    rsync -vzrtopg --progress --delete  $WebPath2  root@$Server::web2 --password-file=/etc/rsyncd.pwd2
    elif [[ $line =~ $WebPath ]];then
    rsync -vzrtopg --progress --delete  $WebPath  root@$Server::web1  --password-file=/etc/rsyncd.pwd2
    else
    echo $line >> /var/log/inotify.log
    fi
done

該腳本首先是用inotify分別監控‘$WebPath $WebPath2 $ZabbixPath’三個文件的狀態,若有變化則分別觸發對應的rsync同步。備機配置同主機,只是‘Server’項為82。

註意Path後的路徑有‘/’。


3.參數說明

-m, –monitor        #始終保持事件監聽
-r, –recursive      #遞歸監控目錄數據信息變化
-q, –quiet          #輸出信息少(只打印事件信息)
–timefmt            #指定時間輸出格式
–format             #打印使用指定的輸出類似格式字符串,即實際監控輸出內容
-e                  #指定監聽指定的事件,如果省略,表示所有事件都進行監聽
close_write         #文件或目錄關閉,在寫入模式打開之後關閉的
delete              #文件或目錄被刪除在監控目錄中
create              #文件或目錄創建在監控目錄中
attrib              #文件或目錄屬性改變
move                #文件或目錄不管移動到或是移出監控目錄都觸發事件


4.主備機分別啟動監控同步腳本

[root@zabbix-server01 ~]# nohup sh /root/scripts/inotify.sh &



Part 3 高可用測試

文件及數據同步測試

1.文件同步測試

主機上執行新建目錄操作:

[root@zabbix-server01 ~]#  cd /etc/httpd/conf && mkdir dropme1 && cd /etc/httpd/conf.d/ && mkdir dropme2 && cd /etc/zabbix/ && mkdir dropme3

查看備機對應文件:

技術分享圖片

發現自動生成了dropme1、dropme2、dropme3

在備機上刪除新建的drop文件,在主機上查找相應文件,發現文件被刪除:

[root@zabbix-server02 /]# find /* -name dropme* |xargs rm -rf \{}
[root@zabbix-server01 ~]# find /* -name dropme*
[root@zabbix-server01 ~]#

文件同步測試成功


2.數據庫同步測試

登陸主機web控制臺,新增主機,查看備機是否同步。

技術分享圖片

技術分享圖片

查看備機是否同步:

技術分享圖片

同樣的如果在備機上刪除監控主機的話主機也會對應的自動刪除。

數據同步測試完成。


高可用測試

測試前配置

1.服務端配置

修改服務端配置,將‘SourceIP’項修改為虛ip:

[root@zabbix-server01 ~]# sed -i 's/^ *# *SourceIP=.*/SourceIP=172.27.9.80/g' /etc/zabbix/zabbix_server.conf

該操作主備機都執行


2.客戶端配置

修改客戶端配置,將‘Server’項也修改為虛ip:

[root@zabbix-agent ~]# sed -i 's/^ *# *Server=.*/Server=172.27.9.80/g' /etc/zabbix/zabbix_agentd.conf

zabbix-server端啟用SourceIP,被監控的主機Server參數也配置為虛ip而不是實際地址81或82。


高可用測試

正常狀態下主機有zabbix、mysql、inotify、rsync、keepalived五個服務,備機只有mysql、inotify、rsync、keepalived四個服務,這也是高可用的初始狀態。

1.mysql異常測試

停止主機mysql服務,模擬異常

[root@zabbix-server01 ~]# systemctl stop mysqld
[root@zabbix-server01 keepalived]# ps -C mysqld --no-header | wc -l
0

查看主機日誌/var/log/message:

技術分享圖片

發現發生切換,檢查zabbix進程:

[root@zabbix-server01 keepalived]# ps -C zabbix_server --no-header | wc -l
0

發現主機zabbix進程被kill,查看備機狀態:

技術分享圖片

虛ip已經漂移至備機,並且啟動了zabbix服務,web訪問:

技術分享圖片

訪問正常且主機為82.

回切測試:

重拉主機的zabbix和mysql進程,查看是否回切

技術分享圖片

技術分享圖片

發現虛ip回切且zabbix和mysql服務正常,查看備機zabbix狀態:

[root@zabbix-server02 ~]# ps -C zabbix_server --no-header | wc -l
0

此時備機zabbix服務掛起。

mysql高可用測試完成


2.zabbix異常測試

停止主機zabbix服務,模擬異常

[root@zabbix-server01 keepalived]# systemctl stop zabbix-server
[root@zabbix-server01 keepalived]# ps -C zabbix_server --no-header | wc -l
0

查看主機日誌/var/log/message:

技術分享圖片

發現發生切換,查看備機狀態和zabbix進程:

技術分享圖片

主備切換完成,回切:

啟動主機zabbix服務:

[root@zabbix-server01 keepalived]# systemctl start zabbix-server

查看主機日誌:

技術分享圖片

發現完成回切,查看web也訪問的為81,zabbix服務高可用測試完成。



總結:本文為zabbix高可用搭建提供了一種思路,其它高可用項目也可做參看,如果是B/S架構還可加入lvs和nginx,本文的文件和數據庫的同步也可以采用共享存儲和nfs的方式,通過數據庫和配置文件放在共享目錄裏來實現高可用。

inotify+rsync+mysql主主復制+keepalived實現zabbix高可用