[AlmaLinux 9] PostgreSQL の設定

2023-12-13 公開

PostgreSQLは、不可分性、一貫性、分離、耐久性(ACID)特性を持つトランザクション、自動更新可能なビュー、マテリアライズド・ビュー、トリガー、外部キー、ストアドプロシージャを特徴としています。単一のマシンから、多数の同時ユーザを持つデータウェアハウスやウェブサービスまで、さまざまなワークロードを処理できるように設計されています。macOS Server のデフォルトデータベースであり、Linux、FreeBSD、OpenBSD、Windowsでも利用可能です。

Wikipedia より抜粋、翻訳・修正
今回のテーマ

サーバー用 PC に PostgreSQL をインストールして、ネットワーク上の他の PC からアクセスできるようにします。

本記事の内容は、参考サイト [1] および [2] を参考にさせていただきました。また、用語は参考サイト [1] になるべく揃えるようにしました。

--- OUTLINE ---

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 サーバーにアクセスしてみました。

pgAdmin で PostgreSQL サーバーへアクセス (1)
pgAdmin で PostgreSQL サーバーへアクセス (2)

 

おまけ

ちなみに、自分の環境ではデータベースの領域を外付けのハードディスクに割り当てたかったので、あとになって /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 ~]$

 

参考サイト

  1. 第4章 PostgreSQL の使用 Red Hat Enterprise Linux 9 | Red Hat Customer Portal
  2. Rocky Linux PostgreSQL 14をインストールして使用する | mebee [2021-10-06]
  3. pgAdmin - PostgreSQL Tools
  4. Is there a tuned profile available for Posrgresql Server? - Red Hat Customer Portal

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

オープンソース - ブログ村ハッシュタグ
#オープンソース



このエントリーをはてなブックマークに追加

0 件のコメント: