NTNX>日記

個人的な趣味による Nutanix Community Edition 日記。Japanese のみですみません。

NDB で PostgreSQL 15 をプロビジョニングしてみる。

Nutanix Database Service(NDB)で PostgreSQL 15 のデータベースをプロビジョニングしてみます。

NDB 2.5 にデフォルトで含まれている  PostgreSQL ソフトウェア プロファイルは、 PostgreSQL 10.4 です。そこで、PostgreSQL 15 をインストールした DB サーバー VM を用意して、そこからソフトウェア プロファイルを作成します。

今回の内容です。

0. 今回の環境

0-1. 利用するソフトウェアのバージョン

下記のソフトウェアを利用しています。

PostgreSQL 15 は、NDB Server 2.5.4 からサポートされます。NDB Server のバージョンが低い場合は、下記のようにアップデートできます。

ちなみに、NDB でサポート外の PostgreSQL を利用しようとしても、ソフトウェアプロファイルを作成する際に下記のようなエラーになってしまいます。

Postgres Version 16.2 is not currently supported by era

0-2. DB サーバー VM の構成(仮想マシン)

RHEL 8.9 の仮想マシンを、NDB Server と連携させている Nutanix クラスタに作成してあります。

仮想マシンの構成は下記です。

  • CPU:1
  • メモリ: 2 GiB
  • Boot Configuration: Legacy BIOS Mode
  • ネットワーク: IPAM 有効ネットワーク(ゲスト OS は DHCP 設定)
  • ディスク 1(scsi.0): 16GB(OS インストール用)
  • ディスク 2(scsi.1): 10GB(PostgreSQL インストール用)

0-3. DB サーバー VM の構成(ゲスト OS)

DB サーバー VM のゲスト OS は、RHEL 8.9 です。

[root@pgsql-vm-01 ~]# cat /etc/redhat-release
Red Hat Enterprise Linux release 8.9 (Ootpa)

RHEL 8.9 は、「最小限のインストール(Minimal Install)」でインストールしてあります。

[root@pgsql-vm-01 ~]# LANG=C dnf group list --installed
Updating Subscription Management repositories.
Last metadata expiration check: 0:40:19 ago on Fri May  3 01:26:07 2024.
Installed Environment Groups:
   Minimal Install

RHEL 8.9 のゲスト OS は、Red Hat Developer Subscription に登録して dnf で RPM をインストールできるようにしてあります。そして、RPM は最新化してあります。

[root@pgsql-vm-01 ~]# dnf update -y

ちなみに、RHEL 8.9 の代わりに、Oracle Linux 8.9 でも同手順で DB サーバー VM の作成と登録を試してみたのですが、残念ながら失敗してしまいました。(UKE / RHCK どちらも)

1. 登録用 DB サーバー VM の構築

リリースノート にもあるように、NDB で管理する PostgreSQL では Linux パッケージ マネージャでのインストールが非推奨なので、今回は tar.gz ファイルからソース インストールします。

Nutanix recommends the source code (unzip) method for installing PostgreSQL and MongoDB. Installation using Linux package managers such as YUM or DNF is not recommended. Patching through NDB is not supported if you use a Linux package manager to install the database engine. This includes both patching (minor upgrade) through Linux package manager and a new software profile, and patching from outside of NDB.

1-1. OS ユーザの作成

postgres ユーザを作成して、sudo パスワードなしで実行可能にしておきます。

postgres ユーザを作成して、パスワードを設定します。

[root@pgsql-vm-01 ~]# useradd postgres
[root@pgsql-vm-01 ~]# passwd postgres
ユーザー postgres のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。

sudoers ファイルを作成します。

[root@pgsql-vm-01 ~]# echo 'postgres ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/postgres
[root@pgsql-vm-01 ~]# cat /etc/sudoers.d/postgres
postgres ALL=(ALL) NOPASSWD: ALL

1-2. PG_HOME 用ファイルシステムの作成

PostgreSQL をインストールする 10 GiB のディスクは、/dev/sdb として認識されています。

[root@pgsql-vm-01 ~]# lsblk -i /dev/sd?
NAME                          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                             8:0    0   16G  0 disk
|-sda1                          8:1    0    1G  0 part /boot
`-sda2                          8:2    0   15G  0 part
  |-rhel_rhel89--min--01-root 253:0    0 13.4G  0 lvm  /
  `-rhel_rhel89--min--01-swap 253:1    0  1.6G  0 lvm  [SWAP]
sdb                             8:16   0   10G  0 disk

ext4 ファイルシステムを作成します。

[root@pgsql-vm-01 ~]# mkfs -t ext4 /dev/sdb
mke2fs 1.45.6 (20-Mar-2020)
Discarding device blocks: done
Creating filesystem with 2621440 4k blocks and 655360 inodes
Filesystem UUID: 87836d7b-8359-450e-8348-76faac702166
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

PostgreSQL をインストールするディレクトリを作成します。これは PG_HOME にあたります。

[root@pgsql-vm-01 ~]# mkdir /opt/pgsql-15

/dev/sdb を自動マウントするため、/etc/fstab にエントリを追記します。

[root@pgsql-vm-01 ~]# echo '/dev/sdb /opt/pgsql-15 ext4 defaults 0 0' >> /etc/fstab

ファイルシステムをマウントします。

[root@pgsql-vm-01 ~]# systemctl daemon-reload
[root@pgsql-vm-01 ~]# mount -a

マウントされました。

[root@pgsql-vm-01 ~]# df -h /dev/sdb
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/sdb         9.8G   24K  9.3G    1% /opt/pgsql-15
[root@pgsql-vm-01 ~]# lsblk /dev/sd? -i
NAME                          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                             8:0    0   16G  0 disk
|-sda1                          8:1    0    1G  0 part /boot
`-sda2                          8:2    0   15G  0 part
  |-rhel_rhel89--min--01-root 253:0    0 13.4G  0 lvm  /
  `-rhel_rhel89--min--01-swap 253:1    0  1.6G  0 lvm  [SWAP]
sdb                             8:16   0   10G  0 disk /opt/pgsql-15

1-3. PostgreSQL の前提 RPM インストール

PostgreSQL のソース インストールに必要な RPM をインストールします。

[root@pgsql-vm-01 ~]# dnf install tar make gcc libicu-devel readline-devel zlib-devel -y

1-4. PostgreSQL 15 のインストール

postgres ユーザにスイッチします。

[root@pgsql-vm-01 ~]# su - postgres
[postgres@pgsql-vm-01 ~]$ id
uid=1000(postgres) gid=1000(postgres) groups=1000(postgres) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

ソースの tar.gz ファイルをダウンロードします。

[postgres@pgsql-vm-01 ~]$ curl -OL https://ftp.postgresql.org/pub/source/v15.6/postgresql-15.6.tar.gz

アーカイブを展開します。

[postgres@pgsql-vm-01 ~]$ tar zxvf postgresql-15.6.tar.gz

展開されたディレクトリに移動します。

[postgres@pgsql-vm-01 ~]$ cd postgresql-15.6/
[postgres@pgsql-vm-01 postgresql-15.6]$ ls
COPYRIGHT       HISTORY  Makefile  aclocal.m4  configure     contrib  src
GNUmakefile.in  INSTALL  README    config      configure.ac  doc

ソースをコンパイルして、インストールします。

[postgres@pgsql-vm-01 postgresql-15.6]$ ./configure --prefix=/opt/pgsql-15
[postgres@pgsql-vm-01 postgresql-15.6]$ make
[postgres@pgsql-vm-01 postgresql-15.6]$ sudo make install

これで PostgreSQL 15.6 がインストールされました。

[postgres@pgsql-vm-01 postgresql-15.6]$ ls /opt/pgsql-15
bin  include  lib  lost+found  share
[postgres@pgsql-vm-01 postgresql-15.6]$ /opt/pgsql-15/bin/postgres --version
postgres (PostgreSQL) 15.6
[postgres@pgsql-vm-01 postgresql-15.6]$ /opt/pgsql-15/bin/psql --version
psql (PostgreSQL) 15.6

1-5. SELinux の無効化

NDB での PostgreSQL 管理は SELinux 非対応というわけではないようですが、設定変更が悩ましいので無効化してしまいます。

これは、root ユーザで実行します。

SELinux の設定ファイル(/etc/selinux/config)を編集します。

  • SELINUX=enforcing → SELINUX=disabled
[root@pgsql-vm-01 ~]# vi /etc/selinux/config

編集後の設定を確認します。

[root@pgsql-vm-01 ~]# grep ^SELINUX= /etc/selinux/config
SELINUX=disabled

OS を再起動します。

[root@pgsql-vm-01 ~]# reboot

OS に root でログインして、SELinux が無効化されたことを確認します。

[root@pgsql-vm-01 ~]# getenforce
Disabled

2. DB サーバー VM の登録

2-1. NBD Server 登録の前提 RPM インストール

NDB Server への登録に必要な RPM をインストールします。

[postgres@pgsql-vm-01 ~]$ sudo dnf install zip unzip rsync lsof iscsi-initiator-utils -y

NDB Server から、事前チェック スクリプト(era_linux_prechecks.sh)をダウンロードします。era_linux_prechecks.sh は、NDB Server の画面右上 →「ダウンロード」を開き、「Linux 用のダウンロード」ボタンからダウンロードします。

era_linux_prechecks.sh を、DB サーバーにアップロードしておきます。

[postgres@pgsql-vm-01 ~]$ ls -l era_linux_prechecks.sh
-rw-rw-r--. 1 postgres postgres 35428  5月  3 02:47 era_linux_prechecks.sh

スクリプトを実行して、チェック結果が YES または N/A になっていることを確認します。

  • -t: PostgreSQL では postgres_database を指定
  • -c: Nutanix クラスタ(Prism Element)のアドレスを指定
[postgres@pgsql-vm-01 ~]$ bash era_linux_prechecks.sh -t postgres_database -c 192.168.20.40


--------------------------------------------------------------------
|              Era Pre-requirements Validation Report              |
--------------------------------------------------------------------

     General Checks:
     ---------------
         1] Username           : postgres
         2] Package manager    : yum
         2] Database type      : postgres_database

     Era Configuration Dependencies:
     -------------------------------
         1] User has sudo access                         : YES
         2] User has sudo with NOPASS access             : YES
         3] Crontab configured for user                  : YES
         4] Secure paths configured in /etc/sudoers file : YES
         5] Prism API connectivity                       : YES

     Era Software Dependencies:
     --------------------------
          1] GCC                  : N/A
          2] readline             : YES
          3] libselinux-python    : YES
          4] crontab              : YES
          5] lvcreate             : YES
          6] lvscan               : YES
          7] lvdisplay            : YES
          8] vgcreate             : YES
          9] vgscan               : YES
         10] vgdisplay            : YES
         11] pvcreate             : YES
         12] pvscan               : YES
         13] pvdisplay            : YES
         14] zip                  : YES
         15] unzip                : YES
         16] rsync                : YES
         17] bc                   : N/A
         18] sshpass              : N/A
         19] ksh                  : N/A
         20] lsof                 : YES
         21] tar                  : YES
         22] xfsprogs             : N/A
         23] ifupdown             : N/A
         24] net-tools            : N/A
         25] nftables             : N/A
         26] acl                  : N/A

     Summary:
     --------
         This machine satisfies dependencies required by Era, it can be onboarded.
==================================

2-2. DB サーバー VM の登録

NDB Server で「データベース サーバー VM」→「リスト」を開き、「登録」→「PostgreSQL」をクリックします。

DB サーバー VM の情報を入力して、「次へ」をクリックします。

  • IP アドレス: 登録する DB サーバー VM の IP アドレスを選択
  • NDB ドライブ ユーザー: postgres ※PostgreSQL 用ユーザと兼用
  • PG ホーム: /opt/pgsql-15
  • パスワード: postgres ユーザのパスワード

自動パッチ適用の画面では、そのまま「登録」をクリックします。

オペレーションが「完了」になるまで待ちます。

これで、DB サーバー VM「pgsql-vm-01」が登録されました。

3. ソフトウェア プロファイルの作成

登録した DB サーバー VM から、PostgreSQL 15 のソフトウェア プロファイルを作成します。

3-1. PostgreSQL ソフトウェア プロファイルの作成

NDB Server の「プロファイル」→「ソフトウェア」を開き、「作成」→「PostgreSQL」→「インスタンス」をクリックします。

ソフトウェアの情報を入力して「次へ」をクリックします。

  • プロファイル名: postgres-15.6
  • ソフトウェア プロファイル バージョンの名前: postgres-15.6 (1.0) ※自動入力
  • プロファイルで使用するソフトウェアを持つデータベース サーバーの選択: pgsql-vm-01

「注釈」画面では、そのまま「作成」をクリックします。

少し待つと、ソフトウェア プロファイルが作成されます。

スクリーンショットでは SELinux の警告付きで完了していますが、今回は SELinux を無効化しているので「完了」になるはずです。

3-2. ソフトウェア プロファイル バージョンの公開

ソフトウェア プロファイルは、それに含まれる「ソフトウェア プロファイル バージョン」を「公開」することで、管理ユーザ以外でも利用できるようになります。ちなみに、この環境では admin ユーザで作業しているため、「非公開」のままでも利用できてしまいます。

NDB Server で、「プロファイル」→「ソフトウェア」を開き、作成したプロファイルの名前をクリックします。

  • プロファイル: postgres-15.6

「ソフトウェア プロファイルのバージョン」画面が開くので、「postgres-15.6 (1.0)」が選択された状態で「更新」をクリックします。

ソフトウェア プロファイル バージョンで、下記を設定して「次へ」をクリックします。

  • ステータス: 公開済み
  • このバージョンのソフトウェア プロファイルを公開すると~: ON

「注釈」画面では、そのまま「更新」をクリックします。

ソフトウェア プロファイルバージョンが「公開済み」になりました。

4. DB のプロビジョニング

ソフトウェア プロファイルから、DB サーバー VM と、DB を同時にプロビジョニングします。

4-1. DB のプロビジョニング

NDB Server で「データベース」→「ソース」を開き、「プロビジョン」→「PostgreSQL」→「インスタンス」をクリックします。

「データベース サーバー VM」画面で、下記を入力して画面をスクロールします。

  • データベース サーバー VM: 新しいサーバーの作成 ※デフォルトのまま
  • データベース サーバー名: pgsql15-vm-01
  • ソフトウェア プロファイル: postgres-15.6
  • コンピュート プロファイル: DEFAULT_OOB_SMALL_COMPUTE
  • ネットワーク プロファイル: DEFAULT_OOB_POSTGRESQL
  • NDB ドライブ ユーザーのパスワード: postgres ユーザをパスワードを入力

これから作成される DB サーバー VM の NDB ドライブ ユーザー(postgres)に SSH ログインするための SSH 公開鍵を「テキスト」欄に入力して、「次へ」をクリックします。

  • ここで入力する SSH 鍵ペアのファイルは、あらかじめ適当な Linux マシンの ssh-keygen コマンドなどで作成しておきます。

DB インスタンスの情報を入力して「次へ」をクリックします。

  • PostgreSQL インスタンス名: pgsql15-01
  • リスナー ポート: 5432 ※デフォルトのまま
  • サイズ (GiB): 200 ※デフォルトのまま
  • 初期データベースの名前: testdb
  • データベース パラメータのプロファイル - データベース: DEFAULT_POSTGRES_PARAMS
  • POSTGRES のパスワード: postgres ユーザに設定するパスワードを入力

タイムマシンの設定を入力して「次へ」をクリックします。

  • 名前:pgsql15-01_TM ※デフォルトのまま
  • SLA: DEFAULT_OOB_BRASS_SLA ※デフォルトのまま

「自動パッチ適用」画面では、そのまま「プロビジョン」をクリックします。

「オペレーション」画面で、進捗を確認できます。しばらく待つと、DB サーバー VM と DB が作成されます。

4-2. 作成された DB サーバー VM と DB の確認

「データベース」→「ソース」画面を開くと、プロビジョニングされた DB が表示されます。DB の名前をクリックします。

  • 名前: pgsql15-01

 DB「pgsql15-01」が、PostgreSQL 15.6 のソフトウェアで作成されています。

画面をスクロールすると、DB サーバー VM の IP アドレスを確認できます。そして SSH 接続の方法は、「SSH 経由で接続:」の隣りにある「説明を御覧ください」リンクをクリックすると表示できます。

SSH では、NDB ドライブ ユーザーとして指定した「postgres」ユーザで接続します。

SSH で、DB サーバー VM に接続してみます。接続元のマシンに SSL 秘密鍵をはいちしておけば、パスワードなしでログインできます。

[gowatana@infra-jbox-01 ~]$ ssh -i $HOME/.ssh/id_rsa postgres@192.168.12.190
The authenticity of host '192.168.12.190 (192.168.12.190)' can't be established.
ECDSA key fingerprint is SHA256:ACHtDsM1LuH0GTRnlaA/kVhFDpXPJVUaStmMoOoLtCo.
ECDSA key fingerprint is MD5:28:92:97:9a:fe:bb:cf:da:a6:f0:be:07:cd:03:68:1c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.12.190' (ECDSA) to the list of known hosts.
Last login: Fri May  3 13:27:18 2024 from 192.168.1.103
[postgres@pgsql15-vm-01 ~]$

そして、PostgreSQL のデータベースが利用可能になっています。

[postgres@pgsql15-vm-01 ~]$ psql
Password for user postgres:
psql (15.6)
Type "help" for help.

postgres=# \l
                                             List of databases
   Name    |  Owner   | Encoding  | Collate | Ctype | ICU Locale | Locale Provider |   Access privileges
-----------+----------+-----------+---------+-------+------------+-----------------+-----------------------
 postgres  | postgres | SQL_ASCII | C       | C     |            | libc            |
 template0 | postgres | SQL_ASCII | C       | C     |            | libc            | =c/postgres          +
           |          |           |         |       |            |                 | postgres=CTc/postgres
 template1 | postgres | SQL_ASCII | C       | C     |            | libc            | =c/postgres          +
           |          |           |         |       |            |                 | postgres=CTc/postgres
 testdb    | postgres | SQL_ASCII | C       | C     |            | libc            |
(4 rows)

postgres=#

以上。

つづきはこちら。

 

©2023 gowatana
クリエイティブ・コモンズ・ライセンスこの 作品 は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。