天天看點

分享!你不知道的Zabbix 6.0:原生高可用(HA)方案部署

本部署文檔适用于CentOS 8.X/RHEL 8.X/Anolis OS 8.X/AlmaLinux 8.X/Rockey Linux 8.X。

原生的HA方案終于來了,相比之前的Keepalived方案,原生方案配置簡單了不少。

Zabbix HA最少需要2個Zabbix Server節點即可實作HA叢集高可用及故障轉移。在同一個Zabbix HA叢集中,隻有一個執行個體或節點處于active(活動)狀态,standby(備用)節點不進行資料收集、處理或其他任務,并且不監聽端口,并保持一個最少的資料庫連接配接。

HA節點分為以下幾種狀态:

  • Active(活動)
  • Standby(備用)
  • Unavailable(不可用)
  • Stopped(停止)
中文版界面将Active翻譯成主動式,并不是很準确。

關于TimescaleDB

當資料儲存在Zabbix 伺服器記憶體中時還好,但是當資料需要寫入資料庫 (或從資料庫中讀取) 時,無論多麼好的緩存和算法,如果資料庫性能嚴重低于收集名額的速度,這些算法都是沒有任何幫助的。

監控系統中的資料經常插入,然後在大多數情況下是以聚合的方式通路(例如,顯示圖表或計算彙總項目),定期删除,幾乎從不更新。此外,通常監控的名額的值按時間排序。此類資料通常稱為時間序列資料。

從資料庫角度來看,時序資料具有以下特點:

  • 時間序列資料可以按時間排序的塊序列排列在磁盤上。
  • 時間序列資料至少有一列索引是由時間組成的
  • 大多數SQL選擇查詢将使用帶有時間列的WHERE、GROUP BY或 ORDER BY子句。
  • 時間序列資料的保留政策通常都是批量删除, 而不是删除單個記錄。

那麼,是否有辦法在不喪失SQL靈活性的情況下利用時間序列資料庫呢?不出意外,沒有一刀切的答案,但有個時間序列解決方案達到了非常接近的效果——TimescaleDB。

TimescaleDB基于PostgreSQL資料庫打造的一款時序資料庫,插件化的形式部署,随着PostgreSQL的版本更新而更新,具備以下特點:

  1. 基于時序優化;
  2. 自動分片(按時間、空間自動分片(chunk));
  3. 全SQL接口;
  4. 支援垂直與橫向擴充;
  5. 支援時間次元、空間次元自動分區。空間次元指屬性字段(例如傳感器ID,使用者ID等);
  6. 支援多個SERVER,多個CHUNK的并行查詢。分區在TimescaleDB中被稱為chunk;
  7. 自動調整CHUNK的大小;
  8. 内部寫優化(批量送出、記憶體索引、事務支援、資料倒灌);
  9. 複雜查詢優化(根據查詢條件自動選擇chunk,最近值擷取優化(最小化的掃描,類似遞歸收斂),limit子句pushdown到不同的;server,chunks,并行的聚合操作);
  10. 利用已有的PostgreSQL特性(支援GIS,JOIN等),友善的管理(流複制、PITR);
  11. 支援自動的按時間保留政策(自動删除過舊資料);

Zabbix 從5.0版本開始全面支援TimescaleDB,并針對其特性做了優化。可自動壓縮曆史資料存儲,節省50-70%的存儲空間,同時具備自動分區功能。通過Zabbix Housekeeper清理曆史資料時直接清理對應的分區,大大提高了曆史資料的清理效率。建議建立系統采用TimescaleDB方案。

Tips:Zabbix 6.0版本安裝完後,預設已開啟7天曆史資料壓縮。

環境

  • 系統:Rockey Linux 8.5
  • 資料庫:PostgreSQL13.6、TimescaleDB 2
主機名 IP 說明
test-zbx-1 192.168.70.52 server
test-zbx-2 192.168.70.53
test-zbx-3 192.168.70.54
test-zbx-db 192.168.70.55 PostgreSQL、TimescaleDB

資料庫部署

安裝PostgreSQL

dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
dnf clean all && dnf make cache
dnf -qy module disable postgresql
dnf install -y postgresql13-server           

安裝TimescaleDB

tee /etc/yum.repos.d/timescale_timescaledb.repo <<EOL
[timescale_timescaledb]
name=timescale_timescaledb
baseurl=https://packagecloud.io/timescale/timescaledb/el/$(rpm -E %{rhel})/\$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/timescale/timescaledb/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
EOL           
dnf install timescaledb-2-postgresql-13 -y           

初始化PostgreSQL

/usr/pgsql-13/bin/postgresql-13-setup initdb           

啟動PostgreSQL server

systemctl enable --now postgresql-13           

添加TimescaleDB并配置參數

timescaledb-tune --pg-config=/usr/pgsql-13/bin/pg_config           

會出現互動畫面,一路y 即可,此步驟會根據目前機器配置,調整PostgreSQL配置參數,并加載Timescaledb插件庫.

重新開機PostgreSQL生效。

systemctl restart postgresql-13           

建立Zabbix使用者:

sudo -u postgres createuser --pwprompt zabbix           

建立zabbix資料庫:

sudo -u postgres createdb -O zabbix zabbix           

為Zabbix資料庫啟用TimescleDB插件:

echo "CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;" | sudo -u postgres psql zabbix
systemctl restart postgresql-13           

下載下傳源碼并導入資料庫:

cd /opt
wget https://cdn.zabbix.com/zabbix/sources/stable/6.0/zabbix-6.0.0.tar.gz
tar zxf zabbix-6.0.0.tar.gz
cd zabbix-6.0.0/database/postgresql/
useradd zabbix

# 導入資料
cat schema.sql |sudo -u zabbix psql zabbix
cat images.sql |sudo -u zabbix psql zabbix
cat data.sql |sudo -u zabbix psql zabbix

# 導入TimescleDB表配置sql
cat timescaledb.sql |sudo -u zabbix psql zabbix           

修改配置允許遠端連接配接:

sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/g" /var/lib/pgsql/13/data/postgresql.conf
sed -i 's/#port = 5432/port = 5432/g' /var/lib/pgsql/13/data/postgresql.conf
sed -i 's/max_connections = 100/max_connections = 500/g' /var/lib/pgsql/13/data/postgresql.conf           

配置使用md5方式認證,修改/var/lib/pgsql/13/data/pg_hba.conf,添加如下資訊到# IPv4 local connections之後

host    all             all             0.0.0.0/0               md5           

重新開機pgsql:

systemctl restart postgresql-13           

Server部署

三個節點都執行

rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-1.el8.noarch.rpm
dnf clean all
dnf install zabbix-server-pgsql zabbix-web-pgsql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent2           

修改配置檔案 /etc/zabbix/zabbix_server.conf:

DBPassword=password
DBHost=192.168.70.55
# 配置目前節點主機名
HANodeName=test-zbx-1
# 配置目前節點ip:端口
NodeAddress=192.168.70.52:10051            

編輯配置檔案 /etc/nginx/conf.d/zabbix.conf:

listen 80;           
Tips:同時需要删除/etc/nginx/nginx.conf中的80端口相關配置,否則會打不開Zabbix前端。

啟動Zabbix server和agent程序

啟動Zabbix server和agent程序,并為它們設定開機自啟:

systemctl restart zabbix-server zabbix-agent2 nginx php-fpm
systemctl enable zabbix-server zabbix-agent2 nginx php-fpm           

配置前端

解決亂碼問題。手動上傳本地Windows的字型(如微軟雅黑)到Zabbix伺服器的/usr/share/zabbix/assets/fonts/,通常Win10字型檔案在C:\Windows\Fonts路徑下。

cd /usr/share/zabbix/assets/fonts
mv graphfont.ttf graphfont.ttf.backup
ln -s msyh.ttc graphfont.ttf           

啟動服務:

systemctl restart zabbix-server zabbix-agent2 nginx php-fpm
systemctl enable zabbix-server zabbix-agent2 nginx php-fpm           

從/var/log/zabbix/zabbix_server.log日志檔案可見test-zbx-1狀态為active:

HA manager started in active mode           

test-zbx-2、test-zbx-3狀态為standby:

"test-zbx-2" node started in "standby" mode
"test-zbx-3" node started in "standby" mode           

前端配置

連接配接到新安裝的Zabbix前端: http://server_ip_or_name

選擇中文:

分享!你不知道的Zabbix 6.0:原生高可用(HA)方案部署

必要條件檢測(世界上最好的語言):

分享!你不知道的Zabbix 6.0:原生高可用(HA)方案部署

配置DB連接配接:

分享!你不知道的Zabbix 6.0:原生高可用(HA)方案部署

時區選擇上海:

分享!你不知道的Zabbix 6.0:原生高可用(HA)方案部署
分享!你不知道的Zabbix 6.0:原生高可用(HA)方案部署

安裝完成,少年

分享!你不知道的Zabbix 6.0:原生高可用(HA)方案部署

預設使用者名密碼:Admin/zabbix:

分享!你不知道的Zabbix 6.0:原生高可用(HA)方案部署

可以在報表-系統資訊中檢視:

分享!你不知道的Zabbix 6.0:原生高可用(HA)方案部署

配置Agent

HA方案需要在Agent配置檔案/etc/zabbix/zabbix_agent2.conf中将所有的Server節點位址配置到Server和ServerActive中:

Server=192.168.70.52,192.168.70.53,192.168.70.54
ServerActive=192.168.70.52,192.168.70.53,192.168.70.54
           

重新開機agent

systemctl restart zabbix-agent2
           

驗證HA

目前test-zbx-1為Active,現把它停用。

執行:

systemctl stop zabbix-server
           

可見test-zbx-1和test-zbx-3狀态發生了變化,test-zbx-1狀态變為了Stopped,test-zbx-3狀态變為了Active。

分享!你不知道的Zabbix 6.0:原生高可用(HA)方案部署
分享!你不知道的Zabbix 6.0:原生高可用(HA)方案部署

同時,test-zbx-3開始作為server工作,資料采集正常。

轉載于部落格園 https://www.cnblogs.com/Rohn/p/15927189.html