忍者ブログ
データベースエンジニアのための実践ブログ。Oracle・PostgreSQL・MySQLなどの環境構築、実行計画の読み方やチューニングといった現場で役立つノウハウ、DB基礎知識までを発信しています。

【YugabyteDB】インストール直後に必ず確認したい初期設定チェックリスト

YugabyteDB(OSS版)をインストールしたあと、まず最初にやっておくべき確認ポイントをまとめた。
この記事では、付属のインターフェースである ysqlsh を用いて、デフォルトのデータベース・ユーザ・拡張機能・テーブルスペースなどを確認する方法を紹介する。

YugabyteDB は PostgreSQL 互換を謳っているため、初期のDB構成やコマンド体系もほぼ PostgreSQL と同じである。しかし、分散データベース固有の挙動や制約もあるため、最初にこれらを押さえておくと構造理解が一気に進む。


1. ysqlsh にログインする

YugabyteDB の YSQL(PostgreSQL 互換レイヤー)に接続するには、ターミナルから以下のコマンドを実行する。

./bin/ysqlsh -h 10.x.x.x -U yugabyte -d yugabyte

2. デフォルトで作成されているデータベースを確認する

無事にログインできたら、まずはメタコマンド \l を実行して、最初から存在しているデータベースの一覧を確認する。

yugabyte=# \l

■ 実行結果(データベース一覧)

名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | ロールプロバイダー | アクセス権限 -----------------+----------+------------------+----------+-------------------+--------------------+----------------------- postgres | postgres | UTF8 | C | en_US.UTF-8 | libc | system_platform | postgres | UTF8 | C | en_US.UTF-8 | libc | template0 | postgres | UTF8 | C | en_US.UTF-8 | libc | =c/postgres + | | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | C | en_US.UTF-8 | libc | =c/postgres + | | | | | | postgres=CTc/postgres yugabyte | postgres | UTF8 | C | en_US.UTF-8 | libc | (5 行)

✔ インストール直後に存在する主なDB:

  • yugabyte:メインとなるデータベース。実際のアプリケーション開発ではこのDBを使うのが基本となる。
  • postgres:PostgreSQL互換を維持するための管理用データベース。
  • template0 / template1:新しくデータベースを作成する際の雛形となるテンプレートDB。

※YugabyteDBはPostgreSQL互換レイヤーを持っているため、初期のシステムデータベースの構成もほぼPostgreSQLの標準状態を踏襲している。


3. デフォルトユーザを確認する

次に、データベースに定義されている初期ロール(ユーザ)を \du コマンドで確認する。

yugabyte=# \du

■ 実行結果(ロール一覧)

ロール一覧 ロール名 | 属性 | 所属グループ --------------+--------------------------------------------------------------------------------------------------------------+-------------- postgres | スーパーユーザー, ロール作成可, DB作成可, レプリケーション可, RLS のバイパス | {} yb_db_admin | 継承なし, ログインできません | {} yb_extension | ログインできません | {} yb_fdw | ログインできません | {} yugabyte | スーパーユーザー, ロール作成可, DB作成可, レプリケーション可, RLS のバイパス | {}

✔ 主な初期ユーザ:

  • yugabyte:初期接続で利用した最高権限を持つスーパーユーザ。
  • postgres:PostgreSQL互換の文脈から存在する管理ユーザ。

※セキュリティを確保するため、初期管理者ユーザー(yugabyte)をそのままアプリケーションの接続に常用するのは避け、必要に応じて最小権限を割り当てたアプリ専用のユーザーを別途作成するのがベストプラクティスだ。


4. 拡張(extensions)の確認

YugabyteDB は PostgreSQL 互換ではあるものの、すべてのシステム拡張機能がそのまま利用できるわけではない。利用可能な拡張機能をシステムカタログから確認する。

SELECT name, default_version, comment FROM pg_available_extensions;

■ 出力される主な注目機能

plpgsql | 1.0 | PL/pgSQL procedural language citext | 1.6 | data type for case-insensitive character strings earthdistance | 1.1 | calculate great-circle distances on the surface of the Earth (・・・以下略・・・)

✔ 事前に確認しておきたい主要な拡張:

  • pg_stat_statements:SQLの実行統計を採取する、パフォーマンスチューニングの必須機能。
  • uuid-ossp:分散環境で主キーとして多用されるUUIDを生成する関数群。
  • pgcrypto:データの暗号化・ハッシュ化をサポート。
  • yb_fdw:YugabyteDB専用の外部データラッパ(Foreign Data Wrapper)。

※100%すべてのPostgreSQLプラグインがそのまま動くわけではないため、利用予定の拡張機能が初期状態でサポートされているかは、開発の最初に必ずチェックしておこう。


5. テーブルスペースの確認

データベース内の物理配置を司るテーブルスペースを確認する。

SELECT oid, spcname FROM pg_tablespace;

■ 実行結果

oid | spcname
------+------------
1663 | pg_default
1664 | pg_global

✔ 各領域の仕組み:

  • pg_default:ユーザーが作成する通常のテーブルやインデックスが格納される標準領域。通常のPostgreSQLではOS上の特定のディレクトリに紐づくが、YugabyteDBでは分散ストレージである「DocDB」内部の論理的な領域として扱われる。
  • pg_global:ユーザー情報やシステムカタログなど、クラスター全体で共有・同期されるメタデータ専用の領域。

6. ノード構成(クラスタ情報)の確認

YugabyteDBの本領である分散構成(クラスタ)が正常に機能しているかを、専用の管理ツール yb-admin を使って外側から確認する。

① Master(マスター)ノードの確認

./bin/yb-admin --master_addresses 10.x.x.x:7100 list_all_masters
Master UUID RPC Host/Port State Role Broadcast Host/Port c3f22f44f3864710a8801fa2b41d082f 10.x.x.x:7100 ALIVE LEADER 10.x.x.x:7100
  • State = ALIVE:Masterが稼働中であることを示す。
  • Role = LEADER:このMasterがクラスタのメタデータを統括するリーダーであることを示す(単一ノード構成時は1台が自動的にLEADERになる)。

② Tablet Server(データノード)の確認

./bin/yb-admin --master_addresses 10.x.x.x:7100 list_all_tablet_servers
Tablet Server UUID RPC Host/Port Heartbeat delay Status Reads/s Writes/s Uptime SST total size SST uncomp size SST #files Memory Broadcast Host/Port 4e9cc709d23649ac8d67065da18e1211 10.x.x.x:9100 0.81s ALIVE 0.00 0.20 1028 0 B 0 B 0 54.11 MB 10.x.x.x:9100
  • Status = ALIVE:実際のデータ読み書きを受け持つデーモンが正常稼働している状態。
  • Heartbeat delay:Masterとの疎通確認(心拍)の間隔。1秒未満など、極めて短く維持されていることが正常の証拠である。

7. ysqlsh 内での基本メタコマンドまとめ(おまけ)

YugabyteDBを操作する上で、最低限これだけは最初に暗記しておきたいメタコマンドの一覧を以下に記す。

\l      -- データベース一覧を表示
\c db名  -- 指定したデータベースへ接続を切り替え
\dt     -- 現在のDB内のテーブル一覧を表示
\d 表名  -- 指定したテーブルのスキーマ(定義)を表示
\du     -- ロール(ユーザー)および付与された権限の一覧を表示
\df     -- 定義されている関数(ファンクション)の一覧を表示

まとめ

インストール直後に確認すべきは、以下の5点である。

  1. デフォルトDB(\l)
  2. デフォルトユーザ(\du)
  3. 利用可能な拡張(pg_available_extensions)
  4. テーブルスペースの実体(pg_tablespace)
  5. クラスタ内のノード構成(yb-admin)

これらをはじめに把握しておくことで、単なるリレーショナルDBとしてではなく、「PostgreSQLのガワを被った堅牢な分散データベース」としての素性をスムーズに掴むことができる。初期設定や運用の第一歩として活用してほしい。


PR

GCP + Ubuntu 24.04 YugabyteDB 3ノード構築完全ガイド 〜 yugabyte-node1, 2, 3 を使った複製構築戦略 〜

本ガイドでは、まずベースとなる yugabyte-node1 を「ひな形(マスター)」として完璧にセットアップする。
その後、その状態を丸ごと保存した「マシンイメージ」を作成し、それを使って yugabyte-node2 と yugabyte-node3 を一瞬で複製する。

この「ゴールデンイメージ戦略」により、各ノードで同じコマンドを何度も叩く不毛な手作業を省き、設定ミスをゼロに抑えて最短で分散データベースのクラスターを立ち上げることが可能だ。


1. 【1台目】ひな形となる yugabyte-node1 の作成

まずは Google Cloud コンソールで、すべてのベースとなる1台目のVMインスタンスを作成する。

「Compute Engine > VM インスタンス」を開き、「インスタンスを作成」をクリックして以下のように設定を行う。

  • 名前: yugabyte-node1
  • マシンタイプ: e2-medium (2 vCPU, 4GB RAM)
  • OS/イメージ: Ubuntu 24.04 LTS
  • ブートディスク: 50GB (バランス永続ディスク)
  • ネットワークタグ: yugabyte-node

※「詳細オプション」>「ネットワーキング」のタグ欄に入力するこのネットワークタグは、後ほど3台まとめて通信許可(ファイアウォール)を設定する際に重要となる。


2. 【1台目】共通環境のセットアップ(SSH接続)

作成した yugabyte-node1 にSSHでログインし、以下のコマンド群を実行してYugabyteDBが正常に動作する環境を完成させる。

① システムの事前準備

分散DBの大量アクセスに耐えられるよう、OSのリソース制限およびカーネルパラメータを拡張し、必須パッケージを導入する。

# リソース制限の拡張
sudo bash -c 'cat << EOF > /etc/security/limits.d/yugabyte.conf
* soft nproc 65535
* hard nproc 65535
* soft nofile 1048576
* hard nofile 1048576
EOF'

# カーネルパラメータの調整
sudo sysctl -w vm.max_map_count=262144
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf

# 依存パッケージのインストール
sudo apt update && sudo apt install -y wget bzip2 tar libatomic1 python3-pip

② Python (Miniconda) のインストール

YugabyteDBの内部スクリプトが依存するPython環境を、Minicondaを用いてホームディレクトリ配下に整備する。

# Minicondaの導入
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -b -p $HOME/miniconda3
eval "$($HOME/miniconda3/bin/conda shell.bash hook)"
conda init bash
source ~/.bashrc

③ YugabyteDB のインストール

公式から最新のバイナリ(バージョン: 2025.2.2.2-b11)を取得し、展開と初期設定を行う。

# ダウンロードと解凍
wget https://software.yugabyte.com/releases/2025.2.2.2/yugabyte-2025.2.2.2-b11-linux-x86_64.tar.gz
tar xvfz yugabyte-2025.2.2.2-b11-linux-x86_64.tar.gz
cd yugabyte-2025.2.2.2/

# Conda環境のPythonを使ってパスの初期設定を実行
./bin/post_install.sh

3. 【複製】マシンイメージから node2, node3 を作成

ここが「ゴールデンイメージ戦略」の本番である。苦労してセットアップした yugabyte-node1 をクローンし、残り2台を数クリックで複製する。

  1. VMを停止: 正確なスナップショットを取るため、GCPコンソールで yugabyte-node1 を一度停止させる。
  2. マシンイメージ作成: 左メニュー「Compute Engine > マシンイメージ」へ進み、yugabyte-node1 をソースとして yugabyte-base-image を作成する。
  3. インスタンス複製: 作成した yugabyte-base-image の詳細画面から「インスタンスを作成」を選び、名前を yugabyte-node2、同様の手順でもう1台を yugabyte-node3 として作成する。(設定やネットワークタグ、ディスク状態が丸ごと引き継がれる)
  4. 全台起動: 複製が完了したら、最初に停止した yugabyte-node1 も含め、3台すべてを起動状態にする。

4. ネットワーク設定(ファイアウォール)

GCPコンソール上で、3台のノードが互いの間で全ポート通信を行えるようにルールを追加する。この設定は既存の外部からのSSH接続等には影響を与えない。

  • 名前: yugabyte-cluster-common
  • ターゲットタグ: yugabyte-node
  • ソース IPv4 範囲: 10.0.0.0/8 (または環境に合わせたVPCの内部IPレンジ)
  • プロトコルとポート: すべて許可 を選択

5. クラスターの起動(3台それぞれで実行)

3台それぞれに個別にSSHでログインし、クラスターを起動・結合していく。

全ノード共通の準備

まずは全台共通で、インストールディレクトリへ移動しておく。

cd yugabyte-2025.2.2.2/

node1 (マスター) で実行

最初にクラスターの起点となる1台目を起動する。

./bin/yugabyted start \
--base_dir=$HOME/var/yugabyte \
--listen $(hostname -I | awk '{print $1}') \
--master_flags="memory_limit_hard_bytes=1073741824" \
--tserver_flags="memory_limit_hard_bytes=1610612736"

node2 と node3 で実行

残り2台を、node1で作成されたクラスターにジョイン(参加)させる。
※ <yugabyte-node1の内部IP> の部分は、GCPコンソールで確認できる node1 の内部IP(10.x.x.x)に書き換えること。

./bin/yugabyted start \
--base_dir=$HOME/var/yugabyte \
--listen $(hostname -I | awk '{print $1}') \
--join <yugabyte-node1の内部IP> \
--master_flags="memory_limit_hard_bytes=1073741824" \
--tserver_flags="memory_limit_hard_bytes=1610612736"

6. 稼働確認(どのサーバーからでもOK)

YugabyteDBは完全な分散型アーキテクチャであるため、node1〜3 のどのサーバーからSQLシェルを起動しても、クラスター全体の同じグローバル情報を取得できる。

# 自身のノードのIPを指定してSQLシェルを起動
./bin/ysqlsh -h $(hostname -I | awk '{print $1}') -U yugabyte -d yugabyte

無事にSQLシェルに繋がったら、以下のメタデータ参照コマンドを叩く。

yugabyte=# SELECT * FROM yb_servers();

実行結果に 3台分のノードのIPアドレス、ポート番号、および正常に連動しているステータスがズラリと表示されれば、GCP上での3ノード・マルチマスター環境の構築は完全完了だ。