近期将zabbix平台从V6.2.6升级到7.2.4,遇到问题“PostgresoL server is not available. Waiting 5seconds”,容器无法访问Postgres V17数据库,本文记录问题解决过程。
一、系统环境
1、数据库版本
数据库版本:postgres-17.4-timescale-2.17.2,如下:
# psql -U zabbix zabbix -h 192.168.128.111
Password for user zabbix:
psql (13.3, server 17.4)
WARNING: psql major version 13, server major version 17.Some psql features might not work.
Type "help" for help.zabbix=> \dxList of installed extensionsName | Version | Schema | Description -------------+---------+------------+-------------------------------------------------------------------------------
--------plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural languagetimescaledb | 2.17.2 | public | Enables scalable inserts and complex queries for time-series data (Community E
dition)
(2 rows)zabbix=> \q
2、zabbix服务器容器版本
zabbix/zabbix-web-apache-pgsql:centos-7.2.4
zabbix/zabbix-server-pgsql:centos-7.2.4
二、报错信息
zabbix服务器连接数据库报错:“PostgresoL server is not available. Waiting 5seconds”
三、问题分析
1、数据库版本是否兼容
从zabbix官网,可以看到相关数据库版本在兼容清单的
support for PostgreSQL versions:- 17.X
support for TimescaleDB versions: 2.17.X
2、测试数据库外部连接情况
# psql -U zabbix zabbix -h 192.168.128.111
Password for user zabbix:
psql (13.3, server 17.4)
WARNING: psql major version 13, server major version 17.Some psql features might not work.
Type "help" for help.zabbix=> \dxList of installed extensionsName | Version | Schema | Description -------------+---------+------------+-------------------------------------------------------------------------------
--------plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural languagetimescaledb | 2.17.2 | public | Enables scalable inserts and complex queries for time-series data (Community E
dition)
(2 rows)zabbix=> \q
可以看到,数据库外部访问正常,可以查询到库的信息,可以排除数据库自身的问题。
3、问题定位
经过本人全面检查,最终查到本问题是因为zabbix服务器官方容器包的问题。
原因为zabbix使用--list来检查数据库服务是否存活,在容器外本地使用该命令,反馈信息如下:
# psql -U zabbix zabbix -h 192.168.128.111 --list
Password for user zabbix: List of databasesName | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+-----------+---------+-------+-----------------------postgres | postgres | SQL_ASCII | C | C | template0 | postgres | SQL_ASCII | C | C | =c/postgres +| | | | | postgres=CTc/postgrestemplate1 | postgres | SQL_ASCII | C | C | =c/postgres +| | | | | postgres=CTc/postgreszabbix | zabbix | UTF8 | C | C |
(4 rows)
登入zabbix服务器容器,可以看到容器内封装的PostgreSQL客户端版本为16.6,该命令执行反馈信息报错“column d.daticulocale does not exist”:
# docker exec -it zbxsrv /bin/bash
bash-5.1$ psql -V
psql (PostgreSQL) 16.6
bash-5.1$ psql -h 192.168.128.111 -U zabbix -d zabbix --list
Password for user zabbix:
psql: ERROR: column d.daticulocale does not exist
LINE 8: d.daticulocale as "ICU Locale",^
HINT: Perhaps you meant to reference the column "d.datlocale".
bash-5.1$ cat /etc/centos-release
CentOS Stream release 9
且zabbix官方Centos、ubuntu系统容器包都存在此问题。
四、解决办法
使用zabbix官方alpine系统平台的服务器容器镜像。
zabbix/zabbix-server-pgsql:alpine-7.2-latestalpine-7.2-latest(目前实际是7.2.4)
zabbix/zabbix-web-apache-pgsql:alpine-7.2.4
如下:
[root@localhost ~]# docker pull zabbix/zabbix-server-pgsql:alpine-7.2-latest
alpine-7.2-latest: Pulling from zabbix/zabbix-server-pgsql
f18232174bc9: Already exists
145118636fb4: Pull complete
2e36442cfc45: Pull complete
90bbfafe739a: Pull complete
ff10713dcc30: Pull complete
39a26e625a05: Pull complete
4f4fb700ef54: Pull complete
db0d9b0bdf27: Pull complete
Digest: sha256:c8db24a3fc509ea4b1a3d9f4ef197e1ee46f2656f586c3c5f9014ca6de61804b
Status: Downloaded newer image for zabbix/zabbix-server-pgsql:alpine-7.2-latest
docker.io/zabbix/zabbix-server-pgsql:alpine-7.2-latest
[root@localhost ~]# docker pull zabbix/zabbix-web-apache-pgsql:alpine-7.2.4
alpine-7.2.4: Pulling from zabbix/zabbix-web-apache-pgsql
f18232174bc9: Already exists
0068142ce15f: Pull complete
a2c25e127afd: Pull complete
0f6189e461cd: Pull complete
4f4fb700ef54: Pull complete
5d085b3ca5ae: Pull complete
Digest: sha256:3e91ca4aad3bd051ed33cdfa343fb9711b9dd5a33518798926af862a9bae4c41
Status: Downloaded newer image for zabbix/zabbix-web-apache-pgsql:alpine-7.2.4
docker.io/zabbix/zabbix-web-apache-pgsql:alpine-7.2.4
运行容器,可以看到,服务器已正常连接:
问题得到解决。