PostgreSQLは、不可分性、一貫性、分離、耐久性(ACID)特性を持つトランザクション、自動更新可能なビュー、マテリアライズド・ビュー、トリガー、外部キー、ストアドプロシージャを特徴としています。単一のマシンから、多数の同時ユーザを持つデータウェアハウスやウェブサービスまで、さまざまなワークロードを処理できるように設計されています。macOS Server のデフォルトデータベースであり、Linux、FreeBSD、OpenBSD、Windowsでも利用可能です。
サーバー用 PC に PostgreSQL をインストールして、ネットワーク上の他の PC からアクセスできるようにします。
本記事の内容は、参考サイト [1] および [2] を参考にさせていただきました。また、用語は参考サイト [1] になるべく揃えるようにしました。
--- OUTLINE ---
- PostgreSQL の設定
- モジュールストリームから postgresql-server をインストール
- データベースクラスターの初期化
- サービスの開始
- ユーザーの作成
- postgresql.conf ファイルの編集
- pg_hba.conf ファイルの編集
- ローカルでデータベースへのアクセスを確認
- 外部からの接続
- おまけ
- 参考サイト
PostgreSQL (postgresql) サーバーをインストールおよび設定をする OS は下記のとおりです。
OS | AlmaLinux 9.3 (Shamrock Pampas Cat) | x86_64 |
PostgreSQL の設定
モジュールストリームから postgresql-server をインストール
AlmaLinux 9 で利用できる PostgreSQL の初期バージョンは 13 と古いので、ここでは 9.2 から利用できるようになった PostgreSQL 15 をモジュールストリームからインストールすることにします。
[bitwalk@cnction ~]$ dnf module list postgresql メタデータの期限切れの最終確認: 0:01:41 前の 2023年12月12日 17時07分20秒 に実施しました。 AlmaLinux 9 - AppStream Name Stream Profiles Summary postgresql 15 client, server [d] PostgreSQL server and client module ヒント: [d]efault, [e]nabled, [x]disabled, [i]nstalled [bitwalk@cnction ~]$ sudo dnf module install postgresql:15/server [sudo] bitwalk のパスワード: メタデータの期限切れの最終確認: 2:44:36 前の 2023年12月12日 14時29分20秒 に実施しました。 依存関係が解決しました。 ====================================================================================== パッケージ Arch バージョン Repo サイズ ====================================================================================== group/moduleパッケージをインストール: postgresql-server x86_64 15.3-1.module_el9.2.0+32+f3c125b5 appstream 6.1 M 依存関係のインストール: postgresql x86_64 15.3-1.module_el9.2.0+32+f3c125b5 appstream 1.6 M postgresql-private-libs x86_64 15.3-1.module_el9.2.0+32+f3c125b5 appstream 138 k モジュールプロファイルのインストール中: postgresql/server モジュールストリームの有効化中: postgresql 15 トランザクションの概要 ====================================================================================== インストール 3 パッケージ ダウンロードサイズの合計: 7.8 M インストール後のサイズ: 32 M これでよろしいですか? [y/N]: y パッケージのダウンロード: : : : インストール済み: postgresql-15.3-1.module_el9.2.0+32+f3c125b5.x86_64 postgresql-private-libs-15.3-1.module_el9.2.0+32+f3c125b5.x86_64 postgresql-server-15.3-1.module_el9.2.0+32+f3c125b5.x86_64 完了しました! [bitwalk@cnction ~]$
データベースクラスターの初期化
データベースクラスターを初期化します。
[bitwalk@cnction ~]$ sudo postgresql-setup --initdb
* Initializing database in '/var/lib/pgsql/data'
* Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log
[bitwalk@cnction ~]$
サービスの開始
postgresql のサービスを開始します。また、システム起動時に起動するようにもしておきます。
[bitwalk@cnction ~]$ sudo systemctl start postgresql [bitwalk@cnction ~]$ sudo systemctl enable postgresql Created symlink /etc/systemd/system/multi-user.target.wants/postgresql.service → /usr/lib/systemd/system/postgresql.service. [bitwalk@cnction ~]$
ユーザーの作成
sudo su - postgres で、管理者ユーザー postgres になり、まず、この postgres ユーザーのパスワードを更新しておきます。
[bitwalk@cnction ~]$ sudo su - postgres [postgres@almalinux ~]$ psql -c "ALTER USER postgres WITH PASSWORD 'パスワード'" ALTER ROLE
つづけて、接続用のユーザーを作っておきます。ここでは pgadmin としました。
[postgres@almalinux ~]$ createuser --pwprompt --interactive pgadmin 新しいロールのためのパスワード: もう一度入力してください: 新しいロールをスーパーユーザーにしますか? (y/n)y [postgres@almalinux ~]$ exit ログアウト [bitwalk@cnction ~]$
exit あるいは logout コマンドで postgres ユーザーから抜けます。
postgresql.conf ファイルの編集
postgresql.conf ファイルはデータベースのクラスターのパラメーター設定に使用されます。
ルート権限で適当なテキストエディタで postgresql.conf を読み込み、下記の赤字の部分を編集あるいはコメント # を外します。
[bitwalk@cnction ~]$ sudo vi /var/lib/pgsql/data/postgresql.conf : : #------------------------------------------------------------------------------ # CONNECTIONS AND AUTHENTICATION #------------------------------------------------------------------------------ # - Connection Settings - 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) max_connections = 100 # (change requires restart) #superuser_reserved_connections = 3 # (change requires restart) : : # - Authentication - #authentication_timeout = 1min # 1s-600s password_encryption = scram-sha-256 # scram-sha-256 or md5 #db_user_namespace = off ... ...
pg_hba.conf ファイルの編集
pg_hba.conf ファイルは、PostgreSQL データベースのクライアント認証の設定に使用されます。
ルート権限で適当なテキストエディタで pg_hba.conf を読み込み、下記の赤字の部分を編集あるいはコメント # を外します。なお、外部のネットワークアドレス 192.168.0.0/24 の部分は、お使いの環境に書き換えてください。
[bitwalk@cnction ~]$ sudo vi /var/lib/pgsql/data/pg_hba.conf : : # TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local all all peer # IPv4 local connections: host all all 127.0.0.1/32 scram-sha-256 host all all 192.168.0.0/24 scram-sha-256 # IPv6 local connections: host all all ::1/128 ident # Allow replication connections from localhost, by a user with the # replication privilege. local replication all peer host replication all 127.0.0.1/32 ident host replication all ::1/128 ident
ローカルでデータベースへのアクセスを確認
まず、postgresql サービスを再起動します。
[bitwalk@cnction ~]$ sudo systemctl restart postgresql
接続ユーザーとして作成した pgadmin で、ローカルでデータベースに接続できることを確認しておきます。管理用データベース postgres にアクセスしてみます。
[bitwalk@cnction ~]$ psql -U pgadmin -h 127.0.0.1 -d postgres ユーザー pgadmin のパスワード: psql (15.3) "help"でヘルプを表示します。 postgres=# \conninfo データベース"postgres"にユーザー"pgadmin"として、ホスト"127.0.0.1"上のポート"5432"で接続しています。 postgres=# \q [bitwalk@cnction ~]$
外部からの接続
ファイアウォールの設定
外部のクライアントからポート 5432 を通してデータベースに接続できるように、サーバー (AlmaLinux) のファイアウォールの設定をします。
[bitwalk@cnction ~]$ sudo firewall-cmd --add-port=5432/tcp --zone=public --permanent success [bitwalk@cnction ~]$ sudo firewall-cmd --reload success [bitwalk@cnction ~]$
Windows の pgAdmin からアクセス
同じ LAN 内にある PC (Windows 11) に pgAdmin をインストールして、AlmaLinux (192.168.0.34) の PostgreSQL サーバーにアクセスしてみました。
おまけ
ちなみに、自分の環境ではデータベースの領域を外付けのハードディスクに割り当てたかったので、あとになって /var/lib/pgsql を下記のようにシンボリック・リンクにしました。
/database が、後になってマウントするようにした USB のハードディスクです。
[bitwalk@cnction ~]$ ll /var/lib/pgsql lrwxrwxrwx. 1 root root 24 12月 13 16:50 /var/lib/pgsql -> /database/postgres/pgsql [bitwalk@cnction ~]$
すると、postgresql サービスを起動できなくなり、sudo systemctl status postgresql で確認すると下記のメッセージが出ていました。
× postgresql.service - PostgreSQL database server
Loaded: loaded (/usr/lib/systemd/system/postgresql.service; disabled; preset: disabled)
Active: failed (Result: exit-code) since Thu 2023-12-13 14:07:20 JST; 8s ago
Process: 5328 ExecStartPre=/usr/libexec/postgresql-check-db-dir postgresql (code=exited, status=0/SUCCESS)
Process: 5330 ExecStart=/usr/bin/postmaster -D ${PGDATA} (code=exited, status=2)
Main PID: 5330 (code=exited, status=2)
CPU: 22ms
12月 13 14:07:20 almalinux systemd[1]: Starting PostgreSQL database server...
12月 13 14:07:20 almalinux postmaster[5330]: postmaster: ディレクトリ"/var/lib/pgsql/data"にアクセスできませんでした: 許可がありません
12月 13 14:07:20 almalinux systemd[1]: postgresql.service: Main process exited, code=exited, status=2/INVALIDARGUMENT
12月 13 14:07:20 almalinux systemd[1]: postgresql.service: Failed with result 'exit-code'.
12月 13 14:07:20 almalinux systemd[1]: Failed to start PostgreSQL database server.
結局 SELinux のアクセス制御に引っかかっているということが解りました。気が付いてしまえば、そりゃそうだと思うのですが、最初はなぜなのか全然解りませんでした。😅
あらかじめ SELinux の設定をしておくというスマートな方法が解らなかったので、対処療法ですが、下記の処理をしています。
[bitwalk@cnction ~]$ sudo ausearch -c 'postmaster' --raw | audit2allow -M my-postmaster ******************** 重要 *********************** このポリシーパッケージを有効にするには、以下を実行してください。 semodule -i my-postmaster.pp [bitwalk@cnction ~]$ sudo semodule -X 300 -i my-postmaster.pp [bitwalk@cnction ~]$ sudo /sbin/restorecon -v /database Relabeled /database from system_u:object_r:unlabeled_t:s0 to system_u:object_r:default_t:s0 [bitwalk@cnction ~]$ sudo /sbin/restorecon -v /database/postgres Relabeled /database/postgres from unconfined_u:object_r:unlabeled_t:s0 to unconfined_u:object_r:default_t:s0 [bitwalk@cnction ~]$
今のところ正常に動いているように見えますが、不足が判れば補足するようにします。
PostgreSQL 用にチューニングされたプロファイルの適用
参考サイト [4] によると、RHEL 8/9 では PostgreSQL サーバー用にチューニングされたプロファイルが tuned-profiles-postgresql というパッケージで提供されています。AlmaLinux でも同様に利用できましたので、インストールしました。[2024-02-13 追記]
[bitwalk@cnction ~]$ sudo dnf -y install tuned-profiles-postgresql ... ================================================================================ パッケージ Arch バージョン リポジトリー サイズ ================================================================================ インストール: tuned-profiles-postgresql noarch 2.21.0-1.el9_3 appstream 12 k トランザクションの概要 ================================================================================ インストール 1 パッケージ ダウンロードサイズの合計: 12 k インストール後のサイズ: 2.9 k ... ... インストール済み: tuned-profiles-postgresql-2.21.0-1.el9_3.noarch 完了しました! [bitwalk@cnction ~]$ rpm -ql tuned-profiles-postgresql /usr/lib/tuned/postgresql /usr/lib/tuned/postgresql/tuned.conf /usr/share/man/man7/tuned-profiles-postgresql.7.gz [bitwalk@cnction ~]$
インストールしたプロファイル postgresql に切り替えます。
[bitwalk@cnction ~]$ sudo tuned-adm profile postgresql
Cannot talk to TuneD daemon via DBus. Is TuneD daemon running?
Trying to (re)start tuned...
TuneD (re)started, changes applied.
[bitwalk@cnction ~]$
アクティブになっているプロファイルを確認し、さらにプロファイルを検証しておきます。
[bitwalk@cnction ~]$ sudo tuned-adm active Current active profile: postgresql [bitwalk@cnction ~]$ sudo tuned-adm verify Verification succeeded, current system settings match the preset profile. See TuneD log file ('/var/log/tuned/tuned.log') for details. [bitwalk@cnction ~]$ cat /var/log/tuned/tuned.log 2023-12-10 20:10:39,169 INFO tuned.daemon.application: TuneD: 2.21.0, kernel: 5.14.0-362.8.1.el9_3.x86_64 2023-12-10 20:10:39,170 INFO tuned.daemon.application: dynamic tuning is globally disabled 2023-12-10 20:10:39,186 INFO tuned.daemon.daemon: using sleep interval of 1 second(s) ... ... ... [bitwalk@cnction ~]$
参考サイト
- 第4章 PostgreSQL の使用 Red Hat Enterprise Linux 9 | Red Hat Customer Portal
- Rocky Linux PostgreSQL 14をインストールして使用する | mebee [2021-10-06]
- pgAdmin - PostgreSQL Tools
- Is there a tuned profile available for Posrgresql Server? - Red Hat Customer Portal
にほんブログ村
#オープンソース
0 件のコメント:
コメントを投稿