web-dev-qa-db-ja.com

「IPv6ソケットを作成できませんでした」postgresqlスタンバイエラー

次の手順を使用して、Postgresql9.1ホットスタンバイを作成しようとしています。

  1. 2台の仮想Linuxマシンを構成しました。マスターのIP:10.10.10.1、スタンバイのIP:10.10.0.2。 pingテストに合格しました。
  2. 両方で同じデータベースバックアップを復元しました。
  3. マスターのpg_hbaを編集しました。追加された行:

    Host   replication   postgres   10.10.10.2/32   md5
    
  4. 編集されたマスターのpostgresql.conf:

    listen_address = '*'
    wal_level = hot_standby
    max_wal_senders = 3
    
  5. スタンバイでrecovery.confを作成しました:

    standby_mode = 'on'
    primary_conninfo = 'Host=10.10.10.1'
    

Recovery.confを追加した後、スタンバイサーバーを起動できません。起動ログにエラーが表示されます:

> could not create IPv6 socket

私は何かを逃しましたか?

3
Alex

これは、カーネルでIPv6が有効になっていないが、IPv6アドレスがどこかにアドバタイズされている場合に発生します。

/etc/hostslocalhostは、127.0.0.1(IPv4)と::1(IPv6)の両方を指定する場合があります。その場合、その種のエラーを回避するためにIPv6エイリアスを削除できます。

統計コレクター(PostgreSQLによって起動される別のプロセス)はハードコードされた名前localhostを使用するため、この問題により、前述のエラーメッセージで開始できなくなります。ただし、これによってPostgreSQL自体の起動が妨げられることはありません。

*に問題のあるIPv6アドレスが含まれている場合は、listen_addressesを選択することで問題を解決できます(とにかくこれは良い習慣です)。

listen_addresses = 127.0.0.1,10.10.10.1#必要に応じて他のインターフェースを追加

2
Daniel Vérité

IPv6エラーを無効にするには、次の手順を実行する必要があります。

  1. このファイル(/etc/sysctl.conf)に次のコードを貼り付けます

    net.ipv6.conf.all.disable_ipv6 = 1

  2. Postgresql.confファイルで、リッスンアドレスを0.0.0.0に変更します

    listen_address = '0.0.0.0'

以上で、postgreSQLサービスを再起動します。

1
Abhijeet Kamble