Neon は Postgres の永続データをオブジェクトストレージに保存することが可能です。そのためストレージ使用量のオートスケーリングによるコスト効率とオブジェクトストレージの高い耐久性のメリットを享受できます。
手っ取り早く試すには提供元のマネージドサービスがありますが、無料枠が 3GB(いまは 0.5GB )で足りなかったためコンテナでお試し環境を構築しました。
コンテナを使わずにローカルで動かす場合
また、 Vercel Postgres という名前でサーバーレス SQL データベースとして提供されています。
構成(Docker Compose)
- pageserver x 1
- safekeeper x 3
- storage_broker x 1
- compute x 1
- MinIO x 1 (Amazon S3 互換オブジェクトストレージ)
ソースコードをクローン
git clone https://github.com/neondatabase/neon.git --depth 1
cd neon/docker-compose/
コンテナを起動
# コンテナを起動
docker compose up --build -d
# バージョン指定する場合。Postgresバージョン(デフォルトは14)、コンテナイメージのタグバージョン(デフォルトはlatest)
PG_VERSION=15 TAG=2937 docker compose up --build -d
compute node に接続
さっそく localhost:55433
に psql
コマンドで接続してみます。
接続データベース名「postgres」
ユーザーは「cloud_admin」
パスワードは 「cloud_admin」
# インストールせずにコンテナの psql で接続(入っていない場合など)
docker run -it --rm --add-host=localhost:host-gateway postgres:latest psql -h localhost -p 55433 -d postgres -U cloud_admin
# インストール済み psql で接続する場合
echo "localhost:55433:postgres:cloud_admin:cloud_admin" >> ~/.pgpass
psql -h localhost -p 55433 -U cloud_admin
これで Neon の Postgres データベースに接続できました!
アプリケーションなどプログラムからも Postgres と同等に扱えると思います。
Neon 特有のブランチ機能は?と思われそうですが、ブランチ作成方法など不明なので分かり次第追加したいです。
cargo neon
コマンドで操作するようなのですが…
MinIOで永続データを見たい場合(S3互換ストレージ)
永続データは S3 互換ストレージの MinIO に保存されています。
操作PCとサーバーが別なのでポートフォワーディングして繋ぎました。
# SSH ポートフォワーディング
ssh -L 9001:localhost:9001 <remote-server> -N
http://localhost:9001/ にアクセスしてログインすると永続データを確認できます。
- Username:
minio
- Password:
password
この構成だとコンピューティングとストレージがコンテナ単位で分離しているものの同じマシン上に存在しています。
せっかく分離できているので、高い耐久性を誇る AWS S3 や Cloud Storage に保存したいところです。