Zabbix 6.0:原生高可用(HA)方案部署

不羈的羅恩發表於2022-02-23

Blog:部落格園 個人
本部署文件適用於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選擇查詢將使用帶有時間列的WHEREGROUP BYORDER 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 server
test-zbx-3 192.168.70.54 server
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

選擇中文:

image-20220221141316981

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

image-20220221141418705

配置DB連線:

image-20220223134813975

時區選擇上海:

image-20220222144834881

image-20220223134925323

安裝完成,少年?

image-20220221141557238

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

image-20220221141645145

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

image-20220223135125406

配置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

image-20220223135629249

image-20220223135720975

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

相關文章