皆さんこんにちは!
医療業界から IT にチャレンジして2年目のharuです。
前回までは PostgreSQL をインストールして起動するところまで進めました。
本日はサーバー側の PosgreSQL に対してクライアントから接続し、
ネットワーク経由でデータベースを操作するための準備を行っていきます。
事前準備
PGAdminを使用してクライアント接続を行う前に、必要な知識をものすごくざっくり学習していきます。
クライアント接続
データベースサーバーに対してネット経由で接続を行う。
クライアントソフト
クライアント接続を行う際に使用する接続元のソフト。
PostgreSQL でクライアント接続を行う際の必須設定
- pg_hba.conf 及び postgres.conf の設定
- OSファイアウォールポート設定
- 設定の反映
1.pg_hba.conf 及び postgres.conf の設定
pg_hba.conf
[postgres@postgreSQL ~]$ find / -name pg_hba.conf 2> /dev/null
/var/lib/pgsql/15/data/pg_hba.conf
[postgres@postgreSQL ~]$ vi /var/lib/pgsql/15/data/pg_hba.conf /* 抜粋 */
# TYPE DATABASE USER ADDRESS METHOD
・・・
host all all 0.0.0.0/0 trust /* 今回はテストで無制限に許可しております */
postgresql.conf
[postgres@postgreSQL ~]$ find / -name postgresql.conf 2> /dev/null
/var/lib/pgsql/15/data/postgresql.conf
listen_addresses = '*' #what IP address(es) to listen on; /* こちらも今回は無制限で許可をしております */
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
# (change requires restart)
port = 5432 # (change requires restart)
試しにここで PGAdmin から接続してみる。
すると以下のエラーメッセージが発生。
「connection to server at "***.**.**.***",port 5432 failed:timedout expired」
繋がらない。
2.OSファイアウォールポート設定
PostgreSQLを許可する
[root@postgreSQL pgsql]# firewall-cmd --add-service=postgresql --permanent
success
設定をリロード
[root@postgreSQL pgsql]# firewall-cmd --reload
success
試しにここで PGAdmin から接続してみると。。。
サーバーに接続できません:connection to server at "***.**.**.***",
port 5432 failed: Connection refused(*********/*****)Is the server running
on that host and accepting TCP/IP connections?
またまたエラーメッセージが発生しました。
原因としては、ここまでの設定変更が反映されていないからです。
3.設定の反映
systemctlを実行
[root@postgreSQL pgsql]# systemctl start postgresql-15.service
Job for postgresql-15.service failed because the control process exited with error code.
See "systemctl status postgresql-15.service" and "journalctl -xe" for details.
/* コマンドが失敗? */
[root@postgreSQL pgsql]# journalctl -xe
-- Subject: Unit failed
-- Defined-By: systemd
-- Support: https://access.redhat.com/support
--
-- The unit postgresql-15.service has entered the 'failed' state with result 'exit-code'.
10月 19 03:58:15 postgreSQL systemd[1]: Failed to start PostgreSQL 15 database server.
-- Subject: Unit postgresql-15.service has failed
-- Defined-By: systemd
-- Support: https://access.redhat.com/support
--
-- Unit postgresql-15.service has failed.
--
-- The result is failed. /* 起動に失敗していますね */
[root@postgreSQL pgsql]# systemctl status /* PostgreSQL サービスの状態を確認 */
● postgreSQL
State: degraded
Jobs: 0 queued
Failed: 1 units
degraded を対処
サービスを起動できないですね。。。
State : degraded については、以下のブログが参考になります。簡単に言うと起動に失敗している状況らしいです。
▼systemctl statusでdegradedと言われた場合の対処方法
https://linux-junkie.at.webry.info/201712/article_1.html
対処方法としては、systemctl disable でサービスを無効化した後、再起動をすることで runnning になるらしい。
[root@postgreSQL pgsql]# systemctl disable postgresql-15.service
Removed /etc/systemd/system/multi-user.target.wants/postgresql-15.service.
[root@postgreSQL pgsql]# systemctl reboot
Too few arguments.
/*OS再起動後*/
[root@postgreSQL ~]# systemctl status postgresql-15.service
● postgresql-15.service - PostgreSQL 15 database server
Loaded: loaded (/usr/lib/systemd/system/postgresql-15.service; enabled; vendor preset: disabled)
Active: active (running) /* PostgreSQL のサービスが起動してますね */
・・・
ようやく起動したので次に進みます。
4.PGAdminでPostgreSQLに接続
現在のPostgreSQLサーバーの起動状態を確認します。
[root@postgreSQL ~]# su - postgres
[postgres@postgreSQL ~]$ pg_ctl status
pg_ctl: サーバーが動作中です(PID: 3493)
/usr/pgsql-15/bin/postgres "-D" "/var/lib/pgsql/15/data/"
PostgreSQL サーバーが起動していることを確認したので、PGAdmin から接続します。
※セキュリティ面の配慮のため、ホスト名/アドレスは消しています。
5.まとめ
PGAdminを使用してPostgreSQLサーバーに接続する際の必須設定としては、以下の3つが必要です。
- pg_hba.conf 及び postgres.conf の設定
- OSファイアウォールポート設定
- 上記2項目の設定を反映する(サービスの再起動)
また、今回の検証では許可を無制限にしていますが、実際の運用では特定のIPアドレスのみ許可をします。
無制限にするとセキュリティがゆるゆるなので、、、
ではまた!