以下エラーが出てしまい、セットアップが先に進めなくなってしまった場合の対処となります。
Cannot connect to the database.
Error connecting to database.
TL;DR
/etc/hosts
のIPv6行をコメントアウトしたら問題なくなりました。
[root@cent79-01 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
# ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@cent79-01 ~]#
状況
発生環境としては以下の状況です。
項目 | 内容 |
---|---|
OS | CentOS 7.9 |
Zabbix version | 5.0 LTS |
Database | postgresql 9.2 |
zabbix user | zabbix |
database user | zabbix |
また、postgresql側の認証設定(pg_hba.conf)は以下のように、IPv4系のものをmd5認証に変更しています。
#認証形式をtruthにしてもよかったのですが、さすがにセキュリティガバガバなのでMETHODをパスワード認証(md5)方式に変更しております。
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
# local all all peer
local all all md5
# IPv4 local connections:
# host all all 127.0.0.1/32 ident
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 ident
確認
zabbix側から調査するのは複合的となり難しいため、postgresql標準のpsql
コマンドで接続可能かを確認しました。
その結果、以下のことがわかりました。
psql接続オプションなし(postgresqlローカル接続)をした際には接続できる。
psql接続オプションでローカルホスト(localhost)を指定した際には、Ident認証で失敗する。
psql接続オプションでIPv4ローカルアドレス(127.0.0.1)で接続した際には接続できる。
[root@cent79-01 ~]# psql -U zabbix
ユーザ zabbix のパスワード:
### 接続成功 ###
[root@cent79-01 ~]# psql -U zabbix -h localhost
psql: FATAL: ユーザ"zabbix"のIdent認証に失敗しました
### Ident認証で接続NG ###
[root@cent79-01 ~]# psql -U zabbix -h 127.0.0.1
ユーザ zabbix のパスワード:
### 接続成功 ###
ここで、postgresql認証ファイル(pg_hba.conf)の内容と見比べてみたところ、現在の認証設定でIdent認証となっているのはIPv6だけなので、zabbix初回セットアップのlocalhostはIPv6で接続しているという被疑が浮上しました。
localhost接続時のIPv6制限
ホスト名のlocalhost
がIPv6ローカルアドレスの::1
に変換されるのは、古典的ファイル/etc/hosts
ファイルの記述に従っていますので、こちらのIPv6レコードをコメントアウトして動作が変わるかを確認します。
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
↓
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
# ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
再度、psql
コマンドで接続したところ、localhost指定接続でも問題なく接続できることが確認できました。
[root@cent79-01 ~]# psql -U zabbix -h localhost
ユーザ zabbix のパスワード:
### 接続成功 ###
また、zabbixセットアップ画面も問題なく次のページへ遷移することが出来ました。
#IPv4ローカルアドレスとIPv6ローカルアドレスの名前解決優先度を変更する方法もありますが、今回は確認しておりません。
詳しくは/etc/gai.conf
あたりで検索してみてください。
後記
今回はzabbixセットアップ画面をなるべく修正しないため、/etc/hosts
側を修正しましたが、この変更による影響が別に発生する可能性もありますので、そもそもDatabase host
に127.0.0.1
を設定するか、インターフェースアドレスを記載することの方が有効だと思います。
参考