Zabbix 6.0 升級完全指南!

2022首場線下Meetup 深圳站-點擊報名

王  軍 |  宏時數據技術經理            

Zabbix5.0指導手冊中文譯者。感謝譯者王軍,歡迎更多資深用戶翻譯官方博文並分享!

Zabbix6.0已於上週發佈,新功能一覽見《Zabbix6.0爲BSM、DevOps、ITOps助力》。你是否考慮升級至最新版本或者已經升級了?軟件升級往往是一個令人生畏的的過程,尤其是當你第一次升級 Zabbix 實例時。本文將介紹升級的過程、必要的先決條件,以及遷移到 Zabbix 6.0 LTS 後,有哪些新功能是你期待的。

目錄

  • 升級前檢查

    • 數據庫版本

    • 支持的操作系統

    • 其他安裝方式

    • 環境檢查

  • 影響升級過程的重要變化

    • API 變化

    • 其他重要變化

  • 升級步驟

  • 備份

    • 備份配置文件

  • 通過 Docker 升級

  • 通過 Zabbix 軟件包升級

    • 升級 Zabbix 的主要組件

    • 升級 Zabbix proxies

  • 升級後的工作

    • 歷史表主鍵

    • 檢查新進程

    • 更新現有模板

    • 更新 Zabbix agents

    • 新增的 Zabbix 安裝包

  • Q&A


升級前檢查

數據庫版本

在升級 Zabbix 到新版本之前,首先確保底層組件都已經準備好了。在升級之前,你應該注意 Zabbix 發生了一些變化。其中一個變化是 Zabbix 6.0 LTS 支持的數據庫引擎及版本:

  • MySQL/Percona 8.0.x
  • MariaDB 10.5.0 -10.6.x
  • PostgreSQL 13.x
  • Oracle 19c – 21c

如果你正在使用 PostgreSQL + TimescaleDB 或 Zabbix Proxies:

  • TimescaleDB 2.0.1-2.3
  • SQLite 3.3.5 – 3.34.x

你可能已經發現了,我們增加了 Zabbix 後端數據庫的版本要求。這樣做的原因是 Zabbix 利用了這些新版本數據庫提供的特性,從而確保 Zabbix 的最佳性能。如果使用不受支持的數據庫版本,Zabbix 將不會啓動。有一個配置參數可以解決這種問題,但是不建議這樣做,因爲無法確保 Zabbix 會不會遇到性能問題或者崩潰。在遷移到 Zabbix 6.0 LTS 之前,應該首先將數據庫升級到支持的版本。

支持的操作系統

Zabbix 支持所有 Linux 發行版和許多其他類 unix 操作系統。但不是對每一個發行版操作系統都提供了 Zabbix 安裝包。Zabbix 5.2 的一個重要變化就是沒有爲 RHEL/CentOS 7 提供對應的軟件包。因爲包含在這些發行版操作系統中,有一些庫文件已經過時了,在這些操作系統上構建 Zabbix 變得越來越複雜。但是如果有對應版本的庫文件,仍然可以從源代碼中構建 Zabbix。

Zabbix 6.0 LTS 官方支持的操作系統有:

  • RHEL/CentOS/Oracle Linux 8
  • Ubuntu 18.04+
  • Debian 10+
  • SLES 12+

其他安裝方式

Zabbix 還支持以下部署方式:

  • Docker – 官方 docker 鏡像中提供了所有的依賴關係
  • Cloud image – 該鏡像包含了所有的依賴
  • Zabbix appliance – 所有可用的 Zabbix 應用鏡像都包含所需的依賴

環境檢查

在對 Zabbix 進行大版本更新之前,強烈建議對系統環境進行一次檢查,看看環境中有沒有未完成的維護任務和健康狀態檢查。在升級 Zabbix 6.0 LTS 之前,我們需要考慮以下幾點:

  • 在升級 Zabbix 之前,升級所需的操作系統或數據庫,並檢查沒有任何問題

  • 檢查自定義安裝——是否修改了數據庫表結構?有沒有自定義的模塊或補丁?

    • 最好的方式就是複製當前 Zabbix 實例,然後在測試環境中測試升級。
  • 是否爲所有 Zabbix 組件都提供了所需的軟件包?

  • 是否所有 Proxies 的操作系統都是支持的版本?

  • 查看官方文檔,瞭解將要升級的這個版本中存在的問題。

影響升級過程的重要變化

Zabbix 6.0 LTS 中的一些變化可能會對升級或現有的 Zabbix 工作流程造成影響。

API 變化

以下是關於 5.0 和 6.0 版本之間 API 變化的文檔列表:

  • https://www.zabbix.com/documentation/6.0/manual/api/changes_5.4_-_6.0
  • https://www.zabbix.com/documentation/current/manual/api/changes_5.2_-_5.4、
  • https://www.zabbix.com/documentation/5.2/manual/api/changes_5.0_-_5.2

API 的一些重要變化:

  • Zabbix 5.4 中引入了新的觸發器和 計算/聚合監控項語法,對應創建觸發器 API 的調用方式也發生了變化 (ZBXNEXT-6451)
    • 你需要修改 API 調用的觸發器語法,避免出現問題。
  • 對於 user.createuser.update 方法, user_medias 參數被重命名爲 medias (ZBX-17955)
    • user_medias 參數被棄用
  • user.create, user.update, 和 user.get 方法刪除了 type 屬性 (ZBXNEXT-6148)
    • 用戶對象不在支持 type屬性,而是在用戶角色中定義。
  • 監控項 無法添加到應用集,應用集用標籤代替了 (ZBXNEXT-2976)
  • 由於值映射不支持全局定義了, valuemap.createvaluemap.get方法需要一個 hostid屬性 (ZBXNEXT-5868)

其他重要變化

在遷移到 Zabbix 6.0 LTS 時,有幾個重要的變化需要注意:

  • 以前,無論是在設置密碼或修改密碼,密碼結尾的空格都會被刪除。現在 密碼結尾的空格不會被刪除
  • 未使用的值映射將被刪除。
  • 由於審計日誌設計發生變化,已存在的審計日誌記錄將被刪除。

升級步驟

接下來,我們來討論一下如何正確安全地執行升級過程:

  • 備份數據庫,以及任何自定義文件(外部腳本、告警腳本)和配置文件。

  • 升級 Zabbix Server 和 Zabbix 前端

    • 一旦啓動新的 Zabbix 服務器進程,它將 自動檢查數據庫結構並自動升級
    • 遷移時長取決於數據庫大小和版本。
    • 一旦數據庫結構自動升級完成,Zabbix Server 將自動啓動。
  • 升級 proxies。Proxies 必須與 Zabbix Server 版本相同。

  • 檢查是否存在問題並且 Zabbix 實例是否已經啓動並正常運行。

    • 檢查 Zabbix Server 和 Zabbix Proxies 是否能採集到數據。
    • 檢查是否有觸發器告警以及是否收到對應的告警通知。

備份

我們來深入研究一下備份過程,並通過一些示例討論所需的步驟:

  • 根據數據庫類型選擇數據庫備份方式

    • 通常,你可以忽略歷史和趨勢數據表, 只備份配置數據表
    • 歷史和趨勢數據表通常很大,只備份配置數據就很快。
    • 如果有時候需要從備份中執行恢復,則 需要手動重新創建歷史和趨勢表
  • 備份 Zabbix 配置文件。

  • 自定義的告警腳本、外部腳本和其他自定義文件可以根據需要進行備份。

例子:MySQL 數據庫備份(忽略歷史和趨勢表):

mysqldump -uroot -p --single-transaction --ignore-table=zabbix.history --ignore-table=zabbix.history_uint --ignoretable=zabbix.history_text --ignore-table=zabbix.history_log --ignore-table=zabbix.history_str --ignore-table=zabbix.trends --ignore-table=zabbix.trends_uint zabbix | gzip > zabbix_backup.sql.gz

備份配置文件

至少,你應該備份以下配置文件:

  • /etc/zabbix/*
  • /usr/lib/zabbix/externalscripts/ 中的外部腳本
  • /usr/lib/zabbix/alertscripts 中的告警通知腳本
  • /etc/httpd/conf.d/zabbix.conf
  • /etc/php-fpm.d/zabbix.conf

通過 Docker 升級

在 docker 中運行 Zabbix 有多種方法。在本示例中,假設你是通過 Zabbix 官方提供的 Docker 鏡像(Mysql+Apache)中運行的 Zabbix Server 和 Zabbix 前端。

停止 Zabbix Server、Zabbix 前端和 proxy 容器:

docker stop my-zabbix-server
docker stop my-zabbix-frontend

啓動 Zabbix 6.0 LTS 容器,並指向相同的後端數據庫:

docker run --name my-zabbix-server-6.0 -e DB_SERVER_HOST="some-mysql-server" -e
MYSQL_USER="some-user" -e MYSQL_PASSWORD="some-password" -d zabbix/zabbixserver-mysql:6.0-latest

然後,數據庫結構將自動升級並啓動。

最後,啓動 Zabbix 前端容器:

docker run --name my-zabbix-web-apache-6.0 -e DB_SERVER_HOST="some-mysqlserver" -e MYSQL_USER="some-user" -e MYSQL_PASSWORD="some-password" -e ZBX_SERVER_HOST= "my-zabbix-server-6.0" -d zabbix/zabbix-web-apache-mysql:6.0-latest

通過 Zabbix 軟件包升級

升級 Zabbix 的主要組件

如果你使用的是官方提供的 Zabbix 軟件包,那麼升級過程還需要幾個步驟,看起來有點複雜。下面讓我們詳細瞭解一下升級所需的步驟。這個示例對應的操作系統是 CentOS 8。

安裝 Zabbix 6.0 LTS 發行包 ,需要添加必要的 Zabbix 6.0 LTS 存儲庫信息:

rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-1.el8.noarch.rpm

清除 DNF 包管理器緩存:

dnf clean all

安裝所有的依賴軟件包

dnf install zabbix-server-mysql zabbix-web zabbix-web-mysql zabbix-web-deps
zabbix-apache-conf zabbix-selinux-policy

啓動 Zabbix 組件並觀察日誌,你應該可以看到正在進行數據庫結構升級。一旦數據庫升級完成,Zabbix 內部的所有進程都應該正常啓動:

17602:20210921:131335.333 completed 96% of database upgrade
17602:20210921:131335.355 completed 97% of database upgrade
17602:20210921:131335.379 completed 98% of database upgrade
17602:20210921:131335.606 completed 99% of database upgrade
17602:20210921:131335.711 completed 100% of database upgrade
17602:20210921:131335.711 database upgrade fully completed
17602:20210921:131335.804 server #0 started [main process]
17602:20210921:131335.808 server #2 started [configuration syncer #1]
17602:20210921:131335.810 server #1 started [service manager #1]

升級 Zabbix proxies

此外,我們還需要升級我們的 Zabbix Proxies。這個過程和我們之前的步驟非常相似:

安裝 Zabbix 6.0 LTS 發行包:

rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-1.el8.noarch.rpm

清除 DNF 包管理器緩存:

dnf clean all

升級 Zabbix proxy

dnf update zabbix-proxy-mysql(pgsql, sqlite3)

對於後端數據庫是 MySQL, PostgreSQL, and Oracle 的 proxies,數據庫表結構會自動更新。

對於後端數據庫是 SQLite3 的 Proxies,數據庫表結構不會自動更新。 我們只需要刪除舊的 sqlite3 數據庫文件——一旦啓動 Zabbix Proxy,數據庫文件將自動重新創建。

rm –rf /tmp/proxy.sqlite

升級後的工作

升級到 Zabbix 6.0 LTS 之後,還需要執行一些額外的工作。我們來看一下需要做些什麼。

歷史表主鍵

Zabbix 6.0 LTS 後端數據庫歷史表結構發生了變化,這些表現在有主鍵。由於會造成額外的故障,這些表的升級不會自動完成。 執行修改的時間可能很長,這取決於數據庫的大小,因爲歷史表中的每個記錄都需要修改。此外,歷史記錄表中的重複記錄可能會導致手動升級數據庫表結構失敗。更改歷史表結構有很多好處:

  • 所有歷史表現在都有主鍵。
  • 減少了歷史表存儲空間
  • 提高了歷史表查詢性能
  • 不推薦升級現有實例

對全新安裝的 Zabbix 6.0 LTS,默認就包含這些更改,對已有的環境進行 Zabbix 6.0 升級,建議充分測試歷史表結構修改過程並評估潛在的故障時間。準確的歷史表升級步驟,會隨着 Zabbix 6.0 LTS 一起發佈。

檢查新進程

需要注意的是,在 Zabbix 6.0 LTS 中增加了一些新的 Zabbix 進程:

  • StartHistoryPollers:

    • 負責處理計算、聚合和內部檢查(需要連接數據庫)的進程。
    • 默認值是 5。如果有很多這樣的監控項可以考慮增加此值。
  • StartLLDProcessors(從 4.0 遷移):

    • 用於 LLD 任務進程
    • 默認值是 5。如果有很多 lld 規則可以考慮增加此值。

更新現有模板

如果你以前做過 Zabbix 升級,你就會知道 Zabbix 不會自動更新現有的模板,因爲我們認爲用戶可能會對上述模板做了一些定製更改。因此,若要在 Zabbix 服務器內部監視圖中查看上述新進程,應該下載並導入最新的 Zabbix 服務器模板。

你可以從 Zabbix git 官方頁面下載模板。你可以閱讀發佈說明,來查看模板更新的完整列表以及在對應模板所做的更改。

更新 Zabbix agents

你也可以考慮升級你的 Zabbix agents。這個不是強制要求的,因爲 Zabbix agents 是向後兼容的,所以你可以在 Zabbix 6.0 LTS 中使用舊版本的 Zabbix agents。之前的所有功能可以繼續運行,但你也可以考慮更新 agents,因爲更新裏可能修復了一些問題或者支持一組新的監控項。

升級 Zabbix agent:

dnf install zabbix-agent

升級 Zabbix agent2:

dnf install zabbix-agent2

新增的 Zabbix 安裝包

你可能已經注意到,在 Zabbix 6.0 LTS 中有多個新增的軟件包。這些軟件包大多數是爲了更好地管理軟件包而對一些舊的組件進行重新打包,但也有例外:

  • zabbix-selinux-policy — Zabbix 的 SELinux 基本策略
  • zabbix-sql-scripts — 所有後端數據庫腳本.sql 文件
    • 它們曾經是 zabbix-server 包的一部分
    • 在 Zabbix 安裝過程中,初始化 Zabbix 數據庫結構或數據時需要用此安裝包
  • zabbix-web-service — 負責生成定時報表的服務

Q&A

問: 升級過程是否會影響我自定義的模板?

答: 會的,所有的模板會繼續工作。但是對觸發語法所做的更改都會自動應用到你現有的模板中。

問: 遷移過程需要多長時間? 如何評估停機時間?

答: 如果不通過完全相同的硬件,來創建現有 Zabbix 實例的測試副本,並檢查測試升級的停機時間,就沒辦法評估出準確的停機時間。

問: 從一個非常舊的版本遷移會怎麼樣 — 比如 Zabbix 3.0 或更老的版本?

答: 應該沒有問題,但是舊版本升級可能有一些注意事項和額外的先決條件。建議大家回顧一下往期峯會升級指南:

乾貨視頻|Zabbix5.0升級最佳實踐以及常見問題排查因爲我們在前幾年已經介紹過老版本的升級過程。這些內容應該可以爲你升級 Zabbix 6.0 LTS 提供一個先決條件的檢查清單。





 往期推薦

已發佈!Zabbix 6.0 爲BSM、DevOps、ITOps助力!

五分鐘帶你玩轉Zabbix6.0容器化HA集羣

Zabbix全年在課錄屏

Zabbix學習資料、客戶案例申請

掃一掃|加入技術交流羣

小Z|17502189550

備註“使用Zabbix年限+企業+姓名”,5000+用戶已加入

一個人走得快,一羣人走得遠!


本文分享自微信公衆號 - Zabbix開源社區(china_zabbix)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章