inotify+rsync+mysql主主復制+keepalived實現zabbix高可用
配置:
主機 | ip | 操作系統 | zabbix版本 | mysql版本 | inotify版本 | rsync版本 | 備註 |
zabbix-server01 | 172.27.9.80 | Centos7.3.1611 | zabbix_server (Zabbix) 3.4.10 | 5.7.22 | 3.14 | 3.1.2 | 關閉防火墻和selinux |
zabbix-server02 | 172.27.9.81 | Centos7.3.1611 | zabbix_server (Zabbix) 3.4.10 | 5.7.22 | 3.14 | 3.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高可用