zabbix 5.0 初回セットアップ時に「Cannot connect to the database. Error connecting to database.」というエラーが出て進めない(postgresql)

以下エラーが出てしまい、セットアップが先に進めなくなってしまった場合の対処となります。

```text:eror内容
Cannot connect to the database.
Error connecting to database.
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/64974b63-49fb-6939-09c2-15bfe15f0db7.png)

</br>
</br>

#TL;DR
`/etc/hosts`のIPv6行をコメントアウトしたら問題なくなりました。


```text:/etc/hosts(修正後)
[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 ~]#
```

</br>
</br>

#状況
発生環境としては以下の状況です。

項目 | 内容
--- | ---
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)方式に変更しております。

```text:pg_hba.conf
# 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)を指定した際には、<b><font color="Red">Ident認証で失敗する。</font></b>
psql接続オプションでIPv4ローカルアドレス(127.0.0.1)で接続した際には接続できる。

```text:psql接続
[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 のパスワード:
### 接続成功 ###
```

</br>

ここで、postgresql認証ファイル(pg_hba.conf)の内容と見比べてみたところ、現在の認証設定でIdent認証となっているのは<b><font color="Red">IPv6</font></b>だけなので、<b><font color="Red">zabbix初回セットアップのlocalhostはIPv6で接続している</font></b>という被疑が浮上しました。

</br>
</br>

#localhost接続時のIPv6制限
ホスト名の`localhost`がIPv6ローカルアドレスの`::1`に変換されるのは、古典的ファイル`/etc/hosts`ファイルの記述に従っていますので、こちらのIPv6レコードをコメントアウトして動作が変わるかを確認します。

```text:/etc/hosts
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指定接続でも問題なく接続できることが確認できました。

```text:psql接続
[root@cent79-01 ~]# psql -U zabbix -h localhost
ユーザ zabbix のパスワード:
### 接続成功 ###
```

また、zabbixセットアップ画面も問題なく次のページへ遷移することが出来ました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/0a279151-5738-a766-29d0-be22e285988e.png)

＃IPv4ローカルアドレスとIPv6ローカルアドレスの名前解決優先度を変更する方法もありますが、今回は確認しておりません。
詳しくは`/etc/gai.conf`あたりで検索してみてください。

</br>
</br>

#後記
今回はzabbixセットアップ画面をなるべく修正しないため、`/etc/hosts`側を修正しましたが、この変更による影響が別に発生する可能性もありますので、そもそも`Database host`に`127.0.0.1`を設定するか、インターフェースアドレスを記載することの方が有効だと思います。

</br>
</br>


#参考
https://www.zabbix.com/jp/download?zabbix=5.0&os_distribution=red_hat_enterprise_linux&os_version=7&db=postgresql&ws=apache

https://www.postgresql.jp/document/9.2/html/auth-pg-hba-conf.html