忍者ブログ
IT関係の小作人労働の日々の日記です。 最近データベースが好きです。 インフラ構築、DB構築、アプリケーション開発・・・何でも屋です。 何でもできそうで、何にもできない。

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

本ガイドでは、まずベースとなる yugabyte-node1 を「ひな形(マスター)」として完璧にセットアップする。
その後、その状態を丸ごと保存した「マシンイメージ」を作成し、それを使って yugabyte-node2yugabyte-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は完全な分散型アーキテクチャであるため、node13 のどのサーバーから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ノード・マルチマスター環境の構築は完全完了だ。


PR