Postgresql互換のAlloyDB OmniをMisskeyで使う

Googleが開発しているPostgresql互換のAlloyDB Omniを触ってみました。
導入までをメモがてら残しておきます。

AlloyDB OmniはPostgresql互換でトランザクション性能が高いと謳われているデータベースサーバーソフトウェアです。
現在はプレビュー版が無料で利用できます。

検証環境

  • CPU2コア、メモリ8GB
  • Ubuntu 22.04
  • alloydb-omni-0.3.0-preview-postgresql-15.2

AlloyDB Omniの最小要件

ちなみに、AlloyDB Omniの最小要件は次のとおりです。

  • OS: Debian、Ubuntu、Red Hat Enterprise Linux version 8以上s
  • CPU: 2 CPU (x86/AMD64)
  • メモリ: 2GB (推奨は8GB)
  • ストレージ: 20 GB

他にもいくつか要件はありますが、最近のVPSなら動くと思います。(ConoHaでは動きました。)

Dockerのインストール

AlloyDB OmniはDockerで動くため、インストールします。
Install Docker Engine on Ubuntu | Docker Docsを参考にします。

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Add the repository to Apt sources:
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

鍵の登録とaptのsource listの更新が終わったら、Dockerをインストールします。

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

AlloyDB Omni のインストール

基本的にはInstall AlloyDB Omni  |  AlloyDB for PostgreSQL  |  Google Cloudに書いてある通りに進めば良いです。

まずはAlloyDB Omni CLIをインストールします。
ただ、手順書通りにやるとapt updateする度に次の警告が出るため気持ち悪いです。

W: https://asia-apt.pkg.dev/projects/alloydb-omni/dists/alloydb-omni-apt/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.

よって次のように読み替えました。
(REGIONはasiaを選びました。)

curl -fsSL https://asia-apt.pkg.dev/doc/repo-signing-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/repo-signing-key.gpg

sudo chmod a+r /etc/apt/keyrings/repo-signing-key.gpg

echo "deb [signed-by=/etc/apt/keyrings/repo-signing-key.gpg] https://asia-apt.pkg.dev/projects/alloydb-omni alloydb-omni-apt main" \
  | sudo tee -a /etc/apt/sources.list.d/artifact-registry.list

あとはalloydb-cliをインストールすれば良いです。

sudo apt update
sudo apt install alloydb-cli

終わったらシステムチェックをしてサーバーが動作要件を満たしていることを確認します。
全てSUCCESSでしたら大丈夫です。

sudo alloydb system-check

AlloyDB Omniのデータを保存するためのディレクトリを作成します。

mkdir /opt/alloydb

作ったら、AlloyDB Omniの本体をインストールします。

sudo alloydb database-server install --data-dir=/opt/alloydb

起動するには次のコマンドを実行します。
statusで稼働状況の確認が、stopで停止ができます。

sudo alloydb database-server start

AlloyDB Omniへの接続

psqlコマンドの実行や、pgdump、restoreはdockerコンテナ経由で行うようです。

docker exec -it pg-service psql -h localhost -U postgres

AlloyDB OmniをMisskeyで使う

まずはpg-serviceでPostgresqlにログインし、ユーザーとデータベースを作成します。

CREATE ROLE "misskey-user" LOGIN CREATEDB PASSWORD 'password';
CREATE DATABASE "misskey-db" OWNER "misskey-user";

もしPostgresqlから移行する場合は、dumpファイルをインポートします。

cat misskey-db.dump | docker exec -i pg-service pg_restore -U misskey-user -d misskey-db -h localhost

あとは .config/default.ymlのPostgresqlサーバーのアドレスをAlloyDB Omniが動いているIPアドレスに変更すれば、Misskeyが使えます。

ちなみに、AlloyDB Omniのバックアップはpg_dumpコマンドで行えます。

docker exec pg-service pg_dump -U misskey-user -d misskey-db -h localhost > /tmp/misskey-db.dump

メモリとディスクの使用状況

500MBほどのデータベースをリストアして動かしたところ、メモリは4.7GBほど使用していました。
素のPostgresqlよりもメモリを使うようです。

$ free -h
               total        used        free      shared  buff/cache   available
Mem:           7.8Gi       4.7Gi       762Mi       2.0Mi       2.3Gi       2.7Gi
Swap:           13Gi       0.0Ki        13Gi

ディスクの使用量は11GBほど。

$ sudo du -hd1 /opt/alloydb/
4.0K	/opt/alloydb/cores
8.0K	/opt/alloydb/scripts
502M	/opt/alloydb/data
11G	/opt/alloydb/

中を覗くと default-alloydb-swap というファイルが10GBほど使っているようです。

感想

データベースのサイズがそこまで大きくないせいか、私の環境ではPostgresqlと体感あまり変わらないですね。
今後、データサイズが大きくなった時に真価を発揮するかもしれません。

その後、かんなすきーのデータベースをお試しで入れて試しましたが、 データベースの全文検索結果が返ってくるまで、60秒から30秒程度になったので性能は良くなってそうです。
リードレプリカを追加したり、メモリを増やせばより快適になるかもしれませんが、そんなお金はないので今回はここまで。

関連記事