Nutanix Database Service(NDB)で PostgreSQL 15 のデータベースをプロビジョニングしてみます。
NDB 2.5 にデフォルトで含まれている PostgreSQL ソフトウェア プロファイルは、 PostgreSQL 10.4 です。そこで、PostgreSQL 15 をインストールした DB サーバー VM を用意して、そこからソフトウェア プロファイルを作成します。
今回の内容です。
0. 今回の環境
0-1. 利用するソフトウェアのバージョン
下記のソフトウェアを利用しています。
- NDB Server 2.5.4
- Red Hat Enterprise Linux(RHEL) 8.9
- ただし、NDB 2.4.5 の PostgreSQL 15 サポート OS は RHEL 8.8 まで
https://portal.nutanix.com/page/documents/details?targetId=Release-Notes-Nutanix-NDB:Release-Notes-Nutanix-NDB
※PostgreSQL Software Compatibility and Feature Support を参照
- ただし、NDB 2.4.5 の PostgreSQL 15 サポート OS は RHEL 8.8 まで
- PostgreSQL 15.6
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. NDB 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=#
以上。
つづきはこちら。