Last Updated: 2024-07-06

YugabyteDBとは?

YugabyteDBは、PostgresSQL互換の分散SQLデータベースです。自動シャーディングによるデータの分散配置とレプリケーションを行うため、柔軟なスケールや高い耐障害性、ゼロダウンタイムでのメンテナンスを行うことができます。

ハンズオンで実施すること

このハンズオンではYugabyteDBのDockerイメージを使用して、ローカル環境で3つのコンテナで構成されるクラスタを作成します。テーブルを作成したときにどのようにデータ (タブレット) が配置されるか、スケールアウトやスケールインによってどう変化するかを確認します。

以下の内容を実施します:

ハンズオン実施に必要なもの

  1. ターミナルから以下のコマンドを入力して、最新のYugabyteDBのイメージをダウンロードします。
docker pull yugabytedb/yugabyte
  1. Dockerコンテナがデータを保管するフォルダを作成します。
mkdir ~/yb_data
  1. コンテナ間で通信を行うため、Dockerネットワークを作成します。
docker network create yb-network
  1. 最初のコンテナを起動します。

<Windowsの場合>

docker run -d --name yugabyte-n1 --net yb-network `
    -p 15433:15433 -p 7001:7000 -p 9101:9000 -p 5433:5433 `
    -v ~/yb_data/node1:/home/yugabyte/yb_data --restart unless-stopped `
    yugabytedb/yugabyte `
    bin/yugabyted start `
    --base_dir=/home/yugabyte/yb_data --background=false

<Macの場合>

docker run -d --name yugabyte-n1 --net yb-network \
    -p 15433:15433 -p 7001:7000 -p 9001:9000 -p 5433:5433 \
    -v ~/yb_data/node1:/home/yugabyte/yb_data --restart unless-stopped \
    yugabytedb/yugabyte \
    bin/yugabyted start \
    --base_dir=/home/yugabyte/yb_data --background=false
  1. Dockerコマンドで、コンテナが開始されていることを確認してください。
docker ps
  1. 2つ目、3つ目のコンテナを起動します。

<Windowsの場合>

docker run -d --name yugabyte-n2 --net yb-network `
    -p 15434:15433 -p 7002:7000 -p 9102:9000 -p 5434:5433 `
    -v ~/yb_data/node2:/home/yugabyte/yb_data --restart unless-stopped `
    yugabytedb/yugabyte `
    bin/yugabyted start --join=yugabyte-n1 `
    --base_dir=/home/yugabyte/yb_data --background=false

docker run -d --name yugabyte-n3 --net yb-network `
    -p 15435:15433 -p 7003:7000 -p 9103:9000 -p 5435:5433 `
    -v ~/yb_data/node3:/home/yugabyte/yb_data --restart unless-stopped `
    yugabytedb/yugabyte `
    bin/yugabyted start --join=yugabyte-n1 `
    --base_dir=/home/yugabyte/yb_data --background=false

<Macの場合>

docker run -d --name yugabyte-n2 --net yb-network \
    -p 15434:15433 -p 7002:7000 -p 9002:9000 -p 5434:5433 \
    -v ~/yb_data/node2:/home/yugabyte/yb_data --restart unless-stopped \
    yugabytedb/yugabyte \
    bin/yugabyted start --join=yugabyte-n1 \
    --base_dir=/home/yugabyte/yb_data --background=false

docker run -d --name yugabyte-n3 --net yb-network \
    -p 15435:15433 -p 7003:7000 -p 9003:9000 -p 5435:5433 \
    -v ~/yb_data/node3:/home/yugabyte/yb_data --restart unless-stopped \
    yugabytedb/yugabyte \
    bin/yugabyted start --join=yugabyte-n1 \
    --base_dir=/home/yugabyte/yb_data --background=false
  1. http://localhost:15433 にアクセスします。3つのDockerコンテナで構成されたクラスタが確認できるはずです。

2f4908481a9cef30.png

データベースの作成

  1. 以下のコマンドを入力して、ysqlインターフェースにアクセスします。
docker exec -it yugabyte-n1 bash -c '/home/yugabyte/bin/ysqlsh --echo-queries --host $(hostname)'
  1. YSQLの入力ができるようになります。YugabyteDBのサンプルとして付属している、northwindデータベースを作成します。
CREATE DATABASE northwind;
\c northwind
\i share/northwind_ddl.sql
  1. 作成されたテーブルを確認してください。
\dt
  1. データを投入します。
\i share/northwind_data.sql
  1. Selectコマンドでデータを確認してください。
select * from categories;

yugabytedのUI確認

  1. http://localhost:15433 にアクセスしてください。

9a2770278c567017.png

  1. 左側のメニューからDatabaseを選択します。

22de6625fbd88221.png

  1. YSQLタブにあるデータベースの表から、northwindデータベースの行をクリックすると、テーブルの一覧が表示されます。

9414a5b09a0ba51e.png

  1. 一番上にある、categoriesテーブルの行をクリックしてください。このテーブルが3つのタブレットに分割され、それぞれのタブレットが3つのコピーを持ち、1つのリーダーと2つのフォロワータブレットが分散配置されていることがわかります。

e343bae6e404c38d.png

  1. 以下のコマンドを入力して、1つのDockerコンテナを停止します。
docker stop yugabyte-n2
  1. ysqlのインターフェースを終了してしまった場合は、再度以下のコマンドを入力します。
docker exec -it yugabyte-n1 bash -c '/home/yugabyte/bin/ysqlsh --echo-queries --host $(hostname)'
  1. northwindデータベースにアクセスをして、selectコマンドを実行します。1つのコンテナが停止しても、問題なくクエリ実行ができることを確認してください。
\c northwind
select * from categories;
  1. yugabyted ( http://localhost:15433) にアクセスし、categoriesテーブルのタブレット配置を確認します。

4f7abd2ff71a012b.png

  1. 以下のコマンドを入力して、停止したコンテナを再開してください。
docker start yugabyte-n2
  1. yugabytedの画面をリフレッシュすると、リーダータブレットの配置が分散されていることがわかります。

b23e8395292aa340.png

  1. yugabyted ( http://localhost:15433) にアクセスし、左側のClusterメニューを選択します。Nodesタブで、タブレットが分散配置されていることを確認してください。

25df7f3e9995558f.png

  1. 以下のコマンドを入力して、4つめのコンテナを開始します。

<Windowsの場合>

docker run -d --name yugabyte-n4 --net yb-network `
    -p 15436:15433 -p 7004:7000 -p 9104:9000 -p 5436:5433 `
    -v ~/yb_data/node4:/home/yugabyte/yb_data --restart unless-stopped `
    yugabytedb/yugabyte `
    bin/yugabyted start --join=yugabyte-n1 `
    --base_dir=/home/yugabyte/yb_data --background=false

<Macの場合>

docker run -d --name yugabyte-n4 --net yb-network \
    -p 15436:15433 -p 7004:7000 -p 9004:9000 -p 5436:5433 \
    -v ~/yb_data/node4:/home/yugabyte/yb_data --restart unless-stopped \
    yugabytedb/yugabyte \
    bin/yugabyted start --join=yugabyte-n1 \
    --base_dir=/home/yugabyte/yb_data --background=false
  1. yugabyedのページをリフレッシュして、タブレットがリバランスされていることを確認してください。

c33f9f563e7d10a6.png

  1. 続いて、スケールインするために1つのコンテナを停止してみましょう。yugabytedの画面上から、ノードは削除されるでしょうか?
docker stop yugabyte-n4
  1. コンテナを停止すると、ノード障害の発生がyugabytedに表示されますが、クラスタからノードは削除されません。コンテナを再開してください。
docker start yugabyte-n4
  1. ノードを削除するには、管理コマンドを実行して、タブレットを移動してから安全に構成を変更する必要があります。yugabytedのCluster > Settingsのタブから、4つ目のコンテナのTserverのserver_broadcast_addresses (ポート番号9100)と、tserver_master_addrsを確認して以下のコマンドを入力してください。
docker exec -it yugabyte-n1 bash -c '/home/yugabyte/bin/yb-admin -master_addresses <tserver_master_addrs> change_blacklist ADD <server_broadcast_addresses>'
  1. yugabytedのCluster > Nodes タブを確認すると、4つ目のコンテナがブラックリストされて全てのタブレットが移動していることが確認できます。

8091a5803f30c7d6.png

YugabyteDB のDockerイメージは、ローカル環境でYugabyteDBの動作を確認するのに適しています。yugabytedコマンドを使用することで、masterプロセスとtserverプロセスを個別起動しなくてもクラスタのサービスを開始/停止することができます。

yugabytedはUIも提供していますが、全てのオペレーションはCLIでの操作になります。UIからの操作やオペレーションの自動化、より詳細なメトリクスの監視を行いたい場合は、YugabyteDB Anywhereを使用することをお勧めします。

次におすすめのハンズオン

以下のハンズオンはYugabyteDB Managed向けに作成されていますが、ローカル環境でも実行可能です。是非お試しください。

参考資料