KUSANAGI 9 で PostgreSQL を利用する

片倉洋一

KUSANAGI 9がPostgreSQL 14および15に対応し、PostgreSQLのアップグレードが可能になりました。これにより、WordPressだけでなくDrupalなどのCMSでもPostgreSQLを使用できるようになりました。さらに、KUSANAGIはkusanagi dbinit psql / kusanagi upgrade psqlコマンドを用いて、データベースのバージョンを上げるだけでなく、使用するデータベースの切り替えや最適化も可能となりました。ただし、データベースの変更はデータのバックアップが必要であり、データの移行はご自分で行う必要があります。また、kusanagi upgrade psqlコマンドによりPostgreSQLのバージョンを上げることが可能ですが、下げることはできません。

先日、KUSANAGI 9 が PostgreSQL 14 および 15 に対応し、PostgreSQL のアップグレードに対応しました。

KUSANAGI 9がPostgreSQL のアップグレードに対応
KUSANAGI 9がPostgreSQL 15に対応しました

WordPress は MySQL(MariaDB) で動かすことを前提としていますが、他の CMS 、例えば Drupal は PostgreSQL で稼働させることができます。
今回のニュースで知った方もいるかもしれませんが、KUSANAGI は PostgreSQL の利用にも対応しています。

今回紹介する kusanagi dbinit psql / kusanagi upgrade psql コマンドでは、 kusanagi init した時に設定したデータベースを切り替えたり、データベースのバージョンを上げることが可能です。

それでは実際に kusanagi dbinit psql / kusanagi upgrade psql を使用すると何ができるのか見ていきましょう……と行きたいのですが、まずはこちらを見てください。

データベースのバックアップを取る

kusanagi dbinit psql / kusanagi upgrade psql のどちらもデータベースを丸ごと変える処理です。
もちろん、 KUSANAGI は不備がないように万全を期しているつもりですが、絶対に失敗しないとは言えません。

何かあった時の対策として、 kusanagi dbinit psql / kusanagi upgrade psql を実行する前には必ずデータベースのバックアップを取るようにしてください。

それでは、実際にバックアップを取る方法を2つ記載します。

スナップショットを取る

クラウドベンダーでは VM に紐づくディスクのスナップショットを取る機能が用意されています。
以下に代表的なクラウドベンダーでのスナップショットの作成手順を記載します。

AWS

AWS のコンソールにログイン
-> EC2 ダッシュボードを開く
-> メニューからボリュームを選択
-> 対象のディスクを選択
-> アクションからスナップショットを作成

Azure

Azure のコンソールにログイン
-> 対象のリソースグループを選択
-> 対象のディスクを選択
-> 上部メニューからスナップショットを作成

GCP

GCP のコンソールにログイン
-> 対象のプロジェクトを選択
-> メニューからディスクを選択
-> 対象のディスクを選択
-> 上部メニューからスナップショットを作成


このように、クラウドベンダーではディスクのスナップショットを取る機能が用意されていますので、この機能を利用して簡単にスナップショットを取ることができます。

復旧したい場合は、スナップショットからディスクを作成して、対象の VM にディスクをアタッチすれば手軽にスナップショットを取った状態まで戻すことができます。

データベースのダンプを取る

データベースにはダンプと呼ばれる、データベースのデータをファイルとして出力する機能が存在します。
以下に MariaDB と PostgreSQL のダンプの取り方を記載します。

MariaDB

MariaDB は MySQL と同じように mysqldump を使用してデータベースのダンプを取ることができます。

mysqldump -h localhost -u root -p (対象データベース名) > (出力するファイルパス)

※ 実行する際に、データベースの root ユーザ(管理者ユーザにあたります)のパスワードの入力を求められます。

出力するファイルパスで指定したパスに、対象データベース名で指定したデータベースのデータが出力されます。

復旧する際には、以下のコマンドを使用します。

mysql -u root -p (対象データベース名) < ( mysqldump で出力したファイルパス)

※ 実行する際に、データベースの root ユーザ(管理者ユーザにあたります)のパスワードの入力を求められます。

これで、対象データベース名で指定したデータベースのデータを mysqldump を実行したの時のデータに戻すことができます。

PostgreSQL

PostgreSQL では pg_dump を使用してデータベースのダンプを取ることができます。

pg_dump -h localhost -U postgres -d (対象データベース名) > (出力するファイルパス)

※ 実行する際に、データベースの postgres ユーザ(管理者ユーザにあたります)のパスワードの入力を求められます。

出力するファイルパスで指定したパスに、対象データベース名で指定したデータベースのデータが出力されます。

復旧する際には、以下のコマンドを使用します。

psql -h localhost -U postgres -d (対象データベース名) -f ( pg_dump で出力したファイルパス)

※ 実行する際に、データベースの postgres ユーザ(管理者ユーザにあたります)のパスワードの入力を求められます。

以上の手順を参考に、DB の環境を変える際には必ずバックアップを取るようにしてください。

それでは今度こそ kusanagi dbinit psql / kusanagi upgrade psql を使用すると何ができるのか見ていきましょう。

MariaDB から PostgreSQL に切り替える

現在設定されているデータベースが MariaDB であり、それを PostgreSQL に切り替えたい場合は、 kusanagi dbinit psql を使用します。

注意していただきたいのですが、 kusanagi dbinit psql によるデータベースの切り替えはデータ移行を伴いません。
もし、既に MariaDB を利用していてデータベースを PostgreSQL に変更したい場合、 kusanagi dbinit psql でデータベースを切り替えてもデータは移行されないので、ご自身によるデータ移行を行って下さい。

これは kusanagi dbinit mariadb コマンドも同様です。

それでは実際の例として、MariaDB を利用するデータベースとして既に kusanagi init してある環境があるとします。

# kusanagi status
KUSANAGI Version 9.4.2-1.el8
(クラウド名)

:
(中略)
:
*** (active) mariadb : mariadb10.5 ***
* mariadb.service - MariaDB 10.5.22 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2023-10-12 14:24:59 JST; 1min 3s ago

*** (inactive) psql :  ***


*** (inactive) pgpool-II :  ***

:
(中略)
:
status completed.
#

このように、 MariaDB 10.5 がインストールされていて、 PostgreSQL がインストールされていないことが確認できます。
それでは、この状態から kusanagi dbinit psql を使用してデータベースを PostgreSQL に切り替えます。

# kusanagi dbinit psql --use psql13 --dbrootpass (DB 管理者ユーザーパスワード)
Last metadata expiration check: 0:09:31 ago on Thu Oct 12 14:23:56 2023.
pgdg-redhat-repo-latest.noarch.rpm               12 kB/s |  13 kB     00:01
Dependencies resolved.
================================================================================
 Package                Architecture Version           Repository          Size
================================================================================
Installing:
 pgdg-redhat-repo       noarch       42.0-35PGDG       @commandline        13 k
:
:
dbinit psql completed.
dbinit completed.
#

dbinit psql completed. および dbinit completed. が表示されれば、切り替え成功です。

再び、 kusanagi status を実行して環境を確認します。

# kusanagi status
KUSANAGI Version 9.4.2-1.el8
(クラウド名)

:
(中略)
:
*** (inactive) mariadb : mariadb10.5 ***
* mariadb.service - MariaDB 10.5.22 database server
   Loaded: loaded (/usr/lib/systemd/system/./mariadb.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

*** (active) psql : psql13 ***
* postgresql-13.service - PostgreSQL 13 database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql-13.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2023-10-12 14:34:23 JST; 1min 27s ago

*** (active) pgpool-II : pgpool44 ***
* pgpool.service - Pgpool-II
   Loaded: loaded (/usr/lib/systemd/system/pgpool.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2023-10-12 14:34:40 JST; 1min 11s ago

:
(中略)
:
status completed.
#

MariaDB が inactive になり、 PostgreSQL が active になりました。
これで切り替わったことが確認できました。

では実際に、 Drupal の環境をプロビジョニングしてみましょう。

# kusanagi provision --drupal --fqdn (FQDN) --noemail --dbname drupal_test --dbuser drupal_user --dbpass (DB ユーザーパスワード) drupal_test
Target directory is /home/kusanagi/drupal_test.
CREATE ROLE
provision postgresql completed.
provision db completed.
Last metadata expiration check: 0:18:48 ago on Thu Oct 12 14:40:28 2023.
:
(中略)
:
Provisioning of drupal_test completed. Access (FQDN) and install drupal.
provision completed.
#

provision completed. と表示され、無事に Drupal がプロビジョニングされました。
指定した FQDN にアクセスしてみます。

このように、ちゃんと PostgreSQL で Drupal が動くことが確認できました。

なお、今回切り替える際に以下のコマンドを使用しました。

kusanagi dbinit psql --use psql13 --dbrootpass (DB 管理者ユーザーパスワード)

この、 --use psql13 が切り替える PostgreSQL のバージョンの指定となります。
この場合は、 PostgreSQL 13 となります。

対応可能なバージョンは、最下部に記載した KUSANAGI 9 のマニュアルを参照してください。

PostgreSQL の設定を最適化する

kusanagi dbinit psql には使用するデータベースを切り替える以外にも、データベースの最適化を行うこともできます。
利用するデータベースが PostgreSQL の状態で kusanagi dbinit psql にオプションを付けずに実行すると最適化が行えます。

# kusanagi dbinit psql
dbinit psql completed.
dbinit completed.
#

これで、 PostgreSQL の設定が最適化されました。

PostgreSQL のバージョンを上げる

それでは、最近対応しました PostgreSQL のバージョンを上げる方法を見ていきます。

先ほどの「MariaDB から PostgreSQL に切り替える」際に使用した kusanagi dbinit psql では、オプションとして --use psql13 を指定しました。
これは前述したように、 PostgreSQL 13 のインストールとなります。

この PostgreSQL 13 を kusanagi upgrade psql を使用して PostgreSQL 14 にバージョンを上げてみましょう。

# kusanagi upgrade psql --use psql14
Last metadata expiration check: 0:44:35 ago on Thu Oct 12 14:40:28 2023.
Dependencies resolved.
Nothing to do.
Complete!
:
(中略)
:
upgrade psql completed.
upgrade completed.
#

upgrade psql completed. および upgrade completed. が表示されれば、バージョンアップ成功です。

kusanagi status で環境を見てみましょう。

# kusanagi status
KUSANAGI Version 9.4.2-1.el8
(クラウド名)

:
(中略)
:
*** (inactive) mariadb : mariadb10.5 ***
* mariadb.service - MariaDB 10.5.22 database server
   Loaded: loaded (/usr/lib/systemd/system/./mariadb.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

*** (active) psql : psql14 ***
* postgresql-14.service - PostgreSQL 14 database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql-14.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2023-10-12 15:25:52 JST; 2min 42s ago

*** (active) pgpool-II : pgpool44 ***
* pgpool.service - Pgpool-II
   Loaded: loaded (/usr/lib/systemd/system/pgpool.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2023-10-12 15:26:15 JST; 2min 19s ago

:
(中略)
:
status completed.
#

psql : psql13 から psql : psql14 に変わったことが確認できます。

このように、簡単に PostgreSQL のバージョンを上げることができました。

なお、 kusanagi upgrade psql ではバージョンを上げることはできますが、下げることができない点はご注意ください。

こちらも、対応可能なバージョンは、最下部に記載した KUSANAGI 9 のマニュアルを参照してください。

初期設定時から PostgreSQL を使用する

今回紹介するコマンドから離れますが、 KUSANAGI の初期設定をする時点で既に PostgreSQL をインストールすることが決まっているのであれば、kusanagi init で PostgreSQL を指定することができます。

kusanagi init --passwd (kusanagi ユーザーパスワード) --nophrase --dbrootpass (DB 管理者ユーザーパスワード) --psql13

このように、最後につけたオプション --psql13 が PostgreSQL 13 を使用することになります。

以前の Tech Column に kusanagi init の紹介もありますので、こちらも合わせて見てみてください。

kusanagi initでKUSANAGIの初期設定を簡単に実行する

kusanagi dbinit psql / kusanagi upgrade psql コマンドでできることは以上になります。

KUSANAGI は MariaDB だけでなく PostgreSQL も利用できますので、皆様ぜひとも活用してみてください。

KUSANAGI 9 コマンドのマニュアル (dbinit psql) :https://kusanagi.tokyo/document/commands/dbinit-psql/
KUSANAGI 9 コマンドのマニュアル (upgrade psql) :https://kusanagi.tokyo/document/commands/upgrade-psql/

<< kusanagi bcache コマンドとその仕組みkusanagi phpでPHPを自由自在に操作する >>

関連記事

Webサイト運用の課題解決事例100選 プレゼント

Webサイト運用の課題を弊社プロダクトで解決したお客様にインタビュー取材を行い、100の事例を108ページに及ぶ事例集としてまとめました。

・100事例のWebサイト運用の課題と解決手法、解決後の直接、間接的効果がわかる

・情報通信、 IT、金融、メディア、官公庁、学校などの業種ごとに事例を確認できる

・特集では1社の事例を3ページに渡り背景からシステム構成まで詳解