Mais conteúdo relacionado
Semelhante a YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料) (20)
Mais de NTT DATA Technology & Innovation (20)
YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)
- 1. © 2022 NTT DATA Corporation
NewSQL/分散SQLデータベース よろず勉強会 #2
YugabyteDBを使ってみよう - part2 -
2022/12/22
NTTデータ 笠原 辰仁
- 2. © 2022 NTT DATA Corporation 2
© 2022 NTT DATA Corporation 2
00
はじめに
- 3. © 2022 NTT DATA Corporation 3
自己紹介
• NTTデータ 技術開発本部 笠原 辰仁
• 本日は、まだあまり馴染みのない分散データベースのOSSプロダクトであるYugabyteDBの概
観や利用方法を紹介
• 興味があるので手始めに簡単に触ってみたい、どんな特長のあるプロダクトかをざっくり知りた
い、という方々の一助になれば・・
• 本日は前回の勉強会の続きとなります!
• YugabyteDBの概要などを少し振り返ります
• 本資料は公開しますので、細かい部分はそちらで確認いただけます
- 4. © 2022 NTT DATA Corporation 4
本日のアジェンダ
1.YugabyteDBの概要とアーキテクチャ
2.YugabyteDBの導入と操作
3.YSQLによるDBへの処理
4.YugabyteDBの管理
【注意】
本日紹介するYugabyteDBでは、機能追加や変更が活発に行われているため、本日の講演内容と最新版のプロダクトとの
齟齬が出やすいことが想定されます。参考として公式のオンラインマニュアルのリンクも添えていますので、試行の際に躓く場合は
マニュアルを参考してください。
本資料の説明には2022年11月上旬での最新版であるYugabyteDBのバージョン2.15(2.15.2)を利用しています。
なお、一部実機でのデモを行う予定ですが、そちらはバージョン2.17(2.17.0)を使います!
2.5. 前回の簡単な振り返り
- 5. © 2022 NTT DATA Corporation 5
© 2022 NTT DATA Corporation 5
2.5
前回の簡単な振り返り
- 6. © 2022 NTT DATA Corporation 6
YugabyteDBの概要
Yugabyte社が中心に開発しているOSSプロダクト。PostgreSQL/Cassandraとの互換性があり、
高い可用性とスケーラビリティを持つ分散データベース。
YugabyteDB
開発主体 Yugabyte 社 ( https://www.yugabyte.com/ )
開発体制 Github上での開発。JIRAも併用。 ( https://github.com/yugabyte/yugabyte-db )
開発言語 DB本体は主に C/C++ (PostgreSQLのコードを流用している部分はC)
ユーティリティやCLIはPython
製品形態 YugabyteDB Core :YugabyteDB本体
YugabyteDB Anyware :YugabyteDBのセルフマネージド用のユーティリティ群
YugabyteDB Managed : YugabyteDBのマネージドサービス
ライセンス Apache License 2.0とPolyform Free Trial License 1.0.0の2つのライセンス形態がある。
Polyformライセンスは主にYugabyteDB Anywareに関するコード部分となる。(ソースツリーの managed
ディレクトリ以下の部分。バイナリには-managedのサフィックスを含む)
( https://docs.yugabyte.com/preview/legal/#licenses )
- 7. © 2022 NTT DATA Corporation 7
【前回の振り返り】 YugabyteDBの概要
非常に高いPostgreSQLとの互換性を持つ。
• ほとんどのDDL/DML/DCLのシンタックスをサポート
• PostgreSQLが持っているデータ型や組み込み関数もOK
• Extensionも主要なものはカバー
• NewSQLとしては珍しく外部キーやトリガ、ユーザ定義関数、ストアドプロシージャもサポート
• TiDBやCockroachDBなども追随しているが一歩リード、な感じ
• トランザクション分離レベルとしてもRead Committedもサポートし、PostgreSQLと同じよう
な振る舞いが可能
• JDBCなどPostgreSQL用のドライバも広く利用可能
- 8. © 2022 NTT DATA Corporation 8
【前回の振り返り】 YugabyteDBのアーキテクチャ
ユーザデータの配置先・ユーザ・権限などのメタデータを管理する「YB-Master」と、
ユーザデータを保持するとともに、ユーザリクエストを処理する「YB-Tserver」の2つのコンポーネントから構成される。
複数のYB-MasterとYB-Tserverで構成されるクラスタをYugabyteDBクラスタ(Universe)と呼ぶ。
YugabyteDBクラスタ (Universe)
YugabyteDBノード#1
YB-Master
YB-Tserver
YugabyteDBノード#2
YB-Master
YB-Tserver
YugabyteDBノード#3
YB-Master
YB-Tserver
YB-Masterはクラスタ全体の
メタデータ管理を担当
YB-Tserverはクエリ処理や
ユーザデータの保管を担当
- 9. © 2022 NTT DATA Corporation 9
【前回の振り返り】 Tablet
ユーザデータ(テーブルとインデックス)はTabletと呼ばれる単位で分割され、
各TserverのDocDBへ分散配置(シャーディング)される。Tabletは1台のLeaderと
複数(replication factorで変動)のFollowerから成る。
基本的にユーザからの読み書きリクエストはLeaderのTabletに対して実行される。
Masterと同じく、ユーザデータもRaftによりLeader選出と冗長化が行われている。
Tablet1
(Leader)
Tablet1 Tablet1
Tablet2
(Leader)
Tablet2 Tablet2
Tablet3
Tablet3 Tablet3
(Leader)
YB-Tserver YB-Tserver YB-Tserver ユーザからは一つのテーブル
に見えるが内部的に複数の
Tabletに分割される。
分割はHash or Rangeが
選択可能。
分割数や配置は基本的に
自動で決定・実施。
- 10. © 2022 NTT DATA Corporation 10
【前回の振り返り】 YugabyteDBのインストール
YugabyteDBのインストール方法にはいくつかあるが、
ここでは公式に公開しているバイナリを入手する方法を紹介。
最新版の資材は https://docs.yugabyte.com/preview/quick-start/linux/#download-yugabytedb を参照。
以下はyugabyteユーザを追加し、python3を入手後、alternativesコマンドでpythonコマンドがpython3を向くように設定
した後、実際のインストールへ移るコマンド例。
(yugabyteユーザの作成は任意で、別のユーザ名でも可。python3もインストール済みならスキップ可)
# useradd yugabyte
# yum install -y python3
# alternatives --set python /usr/bin/python3
# yum install -y wget
# su - yugabyte
$ wget https://downloads.yugabyte.com/releases/2.15.2.1/yugabyte-2.15.2.1-b1-linux-x86_64.tar.gz
$ tar zxvf yugabyte-2.15.2.1-b1-linux-x86_64.tar.gz
$ cd yugabyte-2.15.1.0
$ ./bin/post_install.sh
以上で終わり。資材の格納先は任意なのでダウンロード/解凍後に好きなディレクトへ移しても問題ない。
なお yugabyte-xxx.tar.gzは約300MB、展開後は約1.1GB程度のサイズとなる。
- 11. © 2022 NTT DATA Corporation 11
【前回の振り返り】 YugabyteDBの起動と停止
YugabyteDBの起動は基本的にMasterサーバ(YB-Master)の起動を行い、
それからTabletサーバ(YB-Tserver)を起動する手順となる。
起動と停止(初期化含む)には以下のコマンドを利用可能。
説明 備考/注意
yb-master YB-Masterの起動用コマンド。
yb-tserver YB-Tserverの起動用コマンド。
yugabyted yb-masterとyb-tserverをラップし、簡易的にクラ
スタの設定や起動/停止を行うコマンド。動作確
認や開発、試験時の利用を想定。
商用利用は非推奨。複数ノードでのクラスタ
構成などをサポート。
yb-ctl yb-masterとyb-tserverをラップし、簡易的にクラ
スタの設定や起動/停止を行うコマンド。動作確
認や開発、試験時の利用を想定。
商用利用は非推奨。シングルノードのみでの
クラスタ構成などをサポート。yb-ctlコマンドで
生成したデータディレクトリはyb-ctlでのみ再
利用可。
クラスタ構成を組んでの起動などはやや煩雑なコマンドとなるため、利便用のコマンドとしてyugabytedとyb-ctlが用意されている。
従来はyb-ctlが主に用いられてきたようだが、最近はyugabytedの機能拡充が目立つ。
簡易的な動作確認であれば、構築されるクラスタの機能としては変わらないためどちらを選んでも良い。
本資料ではyugabytedコマンドを利用した実例で解説を進める。
- 12. © 2022 NTT DATA Corporation 12
【前回の振り返り】 YugabyteDBの起動
yugabytedコマンドを利用する場合、以下のように「yugabyted start」とするだけで起動できる。
$ yugabyted start
Starting yugabyted...
? System checks
? YugabyteDB Started
? WARNING: Cluster started in an insecure mode without authentication and encryption enabled. For non-
production use only, not to be used without firewalls blocking the internet traffic.
+----------------------------------------------------------------------------------------------------------+
| yugabyted |
+----------------------------------------------------------------------------------------------------------+
| Status : Running. |
| Replication Factor : 1 |
| Web console : http://127.0.0.1:7000 |
| JDBC : jdbc:postgresql://127.0.0.1:5433/yugabyte?user=yugabyte&password=yugabyte |
| YSQL : bin/ysqlsh -U yugabyte -d yugabyte |
| YCQL : bin/ycqlsh -u cassandra |
| Data Dir : /home/yugabyte/var/data |
| Log Dir : /home/yugabyte/var/logs |
| Universe UUID : e8bffde5-b7e1-4837-83b8-15c0d6008d0b |
+----------------------------------------------------------------------------------------------------------+
? YugabyteDB started successfully! To load a sample dataset, try 'yugabyted demo'.
? Join us on Slack at https://www.yugabyte.com/slack
? Claim your free t-shirt at https://www.yugabyte.com/community-rewards/
- 13. © 2022 NTT DATA Corporation 13
© 2022 NTT DATA Corporation 13
03
YSQLによるDBへの処理
- 14. © 2022 NTT DATA Corporation 14
ysqlshによる接続と操作
YugabyteDBのYSQLでの接続はysqlshコマンド、もしくはPostgreSQL用のドライバや
コマンド(psqlなど)を利用可能。
$ ysqlsh
ysqlsh (11.2-YB-2.15.2.1-b0)
Type "help" for help.
yugabyte=# CREATE TABLE test (c1 int primary key, c2 text);
CREATE TABLE
yugabyte=# ¥d+ test
Table "public.test"
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
--------+---------+-----------+----------+---------+----------+--------------+-------------
c1 | integer | | not null | | plain | |
c2 | text | | | | extended | |
Indexes:
"test_pkey" PRIMARY KEY, lsm (c1 HASH)
yugabyte=# INSERT INTO test SELECT generate_series(1,10000), md5(clock_timestamp()::text);
INSERT 0 10000
基本的にPostgreSQLと同じ
シンタックスであればほとんど実行可能。
メタコマンド(¥~)もおおよそ
カバーされている
- 15. © 2022 NTT DATA Corporation 15
【参考】非サポートのシンタックス対応
YugabyteDBではPostgreSQLで実施可能なVACUUMやCHECKPOINTなどの処理、
およびDDLのオプションの一部などはサポートしていない。
ただしそれらの多くはERRORとせずにWARNING扱い(無視)とすることで処理のアボートを回避している。
下記はPostgreSQLのソースに同梱されているpgbenchというベンチマークツールによる初期化の様子を
抜粋したもの。
$ pgbench -i -s 1 -h 127.0.0.1 -p5433
dropping old tables...
NOTICE: table "pgbench_accounts" does not exist, skipping
NOTICE: table "pgbench_branches" does not exist, skipping
NOTICE: table "pgbench_history" does not exist, skipping
NOTICE: table "pgbench_tellers" does not exist, skipping
creating tables...
WARNING: storage parameter fillfactor is unsupported, ignoring
WARNING: storage parameter fillfactor is unsupported, ignoring
WARNING: storage parameter fillfactor is unsupported, ignoring
(中略)
HINT: Set 'ysql_beta_features' yb-tserver gflag to true to suppress the warning for all beta features.
WARNING: VACUUM will be ignored
creating primary keys...
done in 17.98 s (drop tables 0.03 s, create tables 1.07 s, client-side generate 5.69 s, vacuum 2.79 s, primary keys 8.40 s).
- 16. © 2022 NTT DATA Corporation 16
PostgreSQLとの差異/注意点
PostgreSQLとの高い互換性を持つYugabyteDBだが、当然ながら非互換なものもある。
一般的な使い方をするうえで注意した方が良いポイントをいくつかピックアップする。
• トランザクション分離レベルの設定
• DDLはトランザクショナルではないこと
• CREATE INDEXはデフォルトでCONCURRENTLYであること
なお、非互換に関しては以下のマニュアルにまとまっている。
https://docs.yugabyte.com/preview/explore/ysql-language-features/postgresql-compatibility/
https://docs.yugabyte.com/preview/faq/compatibility/#ycql-compatibility-with-apache-cassandra-ql
- 17. © 2022 NTT DATA Corporation 17
DDLはトランザクショナルではないこと
YugabyteDBではテーブル作成やインデックス作成、TRUNCATEといった処理は
トランザクションとして実行できない(※)
PostgreSQLではROLLBACKできるが、それができないので注意。
yugabyte=# BEGIN;
BEGIN
yugabyte=# CREATE TABLE t1 (c1 int primary key, c2 text);
CREATE TABLE
yugabyte=# ROLLBACK ;
ROLLBACK
yugabyte=# SELECT * FROM t1;
c1 | c2
----+----
(0 rows)
yugabyte=# INSERT INTO t1 SELECT generate_series(1,10000), 'AAA';
INSERT 0 10000
yugabyte=# BEGIN;
BEGIN
yugabyte=# TRUNCATE t1;
TRUNCATE TABLE
yugabyte=# ROLLBACK ;
ROLLBACK
yugabyte=# SELECT count(*) FROM t1;
count
-------
0
(1 row)
CREATE TABLEの例 TRUNCATEの例
※HEADにはDDLをAtomicに行うための改善パッチが段階的に導入されている。
https://github.com/yugabyte/yugabyte-db/commit/6e604ba9a00842d4e114ef70708c99b6d2fac2af
- 18. © 2022 NTT DATA Corporation 18
トランザクション分離レベルの設定
YugabyteDBでは複数のトランザクション分離レベルをサポートしており、Beta機能では
あるがRead Committedでの動作(PostgreSQLのデフォルトと同じ振る舞い)も可能。
ただし、それを利用するにはTserverの「yb_enable_read_committed_isolation」パラメータを有効にする必要がある。
-- PostgreSQLにもある以下のパラメータでも確認できるが、実際には作用しない
yugabyte=# SHOW default_transaction_isolation ;
default_transaction_isolation
-------------------------------
read committed
-- 実際に分離レベルとして作用するのは以下のパラメータ
yugabyte=# SHOW yb_effective_transaction_isolation_level ;
yb_effective_transaction_isolation_level
------------------------------------------
repeatable read
-- 「default_transaction_isolation」を設定しても実際には変更されていない・・
yugabyte=# SET default_transaction_isolation TO "read committed";
SET
yugabyte=# SHOW yb_effective_transaction_isolation_level ;
yb_effective_transaction_isolation_level
------------------------------------------
repeatable read
- 19. © 2022 NTT DATA Corporation 19
トランザクション分離レベルの設定
YugabyteDBでは複数のトランザクション分離レベルをサポートしており、Beta機能では
あるがRead Committedでの動作(PostgreSQLのデフォルトと同じ振る舞い)も可能。
ただし、それを利用するにはTserverの「yb_enable_read_committed_isolation」パラメータを
有効にする必要がある。
-- 以下のようにパラメータを指定してTserverを起動する必要がある。
$ yugabyted start --tserver_flags="yb_enable_read_committed_isolation=true"
-- 適切にTserverのパラメータを有効にすることでRead Committedになる
yugabyte=# SHOW default_transaction_isolation ;
default_transaction_isolation
-------------------------------
read committed
yugabyte=# SHOW yb_effective_transaction_isolation_level ;
yb_effective_transaction_isolation_level
------------------------------------------
read committed
- 20. © 2022 NTT DATA Corporation 20
CREATE INDEXはデフォルトでCONCURRENTLYであること
YugabyteDBではインデックスの作成をデフォルトでCONCURRENTLYに行う。
(YugabyteDBではindex backfillと呼ぶ)
これはインデックス作成対象のテーブルへの更新処理をブロックしない一方、作成時間が長くなる。
NONCONCURRENTLYを付与すると対象テーブルへの排他ロックを取る一方、作成時間は短縮する。
大量の空のテーブルとインデックスを作成する場合にはNONCONCURRENTLYを付与すると良い。
yugabyte=# CREATE TABLE cic (c1 int);
CREATE TABLE
yugabyte=# ¥timing
Timing is on.
yugabyte=# CREATE INDEX cic_idx1 On cic (c1);
CREATE INDEX
Time: 3067.489 ms (00:03.067)
yugabyte=# CREATE INDEX NONCONCURRENTLY cic_idx2 On cic (c1);
CREATE INDEX
Time: 268.417 ms
- 21. © 2022 NTT DATA Corporation 21
CREATE INDEXはデフォルトでCONCURRENTLYであること
CONCURRENTLYでのインデックス作成が失敗するとインデックスの定義だけが
残存する。(これはPostgreSQLと同じ仕様)
作成に失敗したインデックスの再作成前に削除が必要なことに注意。
yugabyte=# INSERT INTO cic VALUES(1), (1);
INSERT 0 2
yugabyte=# CREATE UNIQUE INDEX cic_u_idx1 On cic (c1);
ERROR: Aborted: ERROR: duplicate key value violates unique constraint "cic_u_idx1"
yugabyte=# TRUNCATE cic;
TRUNCATE TABLE
yugabyte=# CREATE UNIQUE INDEX cic_u_idx1 On cic (c1);
ERROR: relation "cic_u_idx1" already exists
yugabyte=# SELECT indexrelid::regclass, indisvalid FROM pg_index WHERE NOT indisvalid;
indexrelid | indisvalid
------------+------------
cic_u_idx1 | f
- 22. © 2022 NTT DATA Corporation 22
© 2022 NTT DATA Corporation 22
04
YugabyteDBの管理
- 23. © 2022 NTT DATA Corporation 23
YugabyteDBの管理
DBの管理には様々あるが、本資料では以下の項目について紹介する。
• クラスタの状態/情報を確認する
• yb-adminコマンドで確認する
• ノード追加と削除
• MasterとTserverを追加/削除しスケールさせる
• Web UIを使う
• Web UIで各種情報を確認する
• 監視(メトリクス監視)
• PrometheusとGrafanaと連携しメトリクスを可視化する
- 24. © 2022 NTT DATA Corporation 24
クラスタの状態/情報を確認する
YugabyteDBではクラスタ管理用にyb-adminコマンドが用意されている。
yb-adminではおよそ以下のことができる。DBAの作業に該当することはほぼカバーする。
• クラスタ状態の確認
• MasterやTserverの数や状態、Tabletの配置状況など
• クラスタ構成の変更
• Masterの追加やレプリケーション数の変更、Master/TserverのDecommissionなど
• テーブルやTabletの構成変更
• テーブルのレプリケーション数変更やTabletの分割、再配置など
• バックアップ/リストア
• 手動でのスナップショット取得や自動バックアップのスケジュール設定など
その他いろいろ
詳細はマニュアルを参照 -> https://docs.yugabyte.com/preview/admin/yb-admin
- 25. © 2022 NTT DATA Corporation 25
クラスタの状態/情報を確認する
YugabyteDB試用に際してyb-adminで多用するのは以下のコマンドとなる。
-master_addressesはMasterが複数いれば全MasterのIP:portの組を指定するのが
一般的だが、LEADERのMasterが含まれていれば良い。
-- Masterの状態を確認
$ yb-admin -master_addresses "127.0.0.1:7100" list_all_masters
Master UUID RPC Host/Port State Role
de21a4e44387425abbe4493631dbc49b 127.0.0.1:7100 ALIVE LEADER
f3514d982165448da71199cc4242bf90 127.0.0.2:7100 ALIVE FOLLOWER
bb46c71afd0242d3a8e60cd103750e9c 127.0.0.3:7100 ALIVE FOLLOWER
-- Tserverの状態を確認
$ yb-admin -master_addresses "127.0.0.1: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
3ba6f5f1545c4052ae69403d253c0328 127.0.0.3:9100 0.76s ALIVE 0.00 0.00 1132 80.83 KB 190.31 KB 1 64.65 MB
1e22539c24f548f6b63d232391eb9476 127.0.0.2:9100 0.76s ALIVE 0.00 0.00 1142 80.83 KB 190.31 KB 1 82.25 MB
4b2534e0864142b2a0706bd388e40896 127.0.0.1:9100 0.76s ALIVE 0.00 0.00 1162 80.83 KB 190.31 KB 1 77.32 MB
-- Tabletの状態を確認
$ yb-admin -master_addresses "127.0.0.1:7100" list_tablets ysql.test1 t1
Tablet-UUID Range Leader-IP Leader-UUID
3e7bf5ea759147859dc7f5a2292521c0 partition_key_start: "" partition_key_end: "H¥200¥000¥003¥350!" 127.0.0.2:9100 1e22539c24f548f6b63d232391eb9476
9559e27874824a39b2f301223ff00fbf partition_key_start: "H¥200¥000¥003¥350!" partition_key_end: "H¥200¥000¥013¥270!" 127.0.0.3:9100 3ba6f5f1545c4052ae69403d253c0328
2ee47bf19fb04858b09a17ed71463a35 partition_key_start: "H¥200¥000¥013¥270!" partition_key_end: "" 127.0.0.1:9100 4b2534e0864142b2a0706bd388e40896
テーブルやTabletの状態確認、変更を行う場合、DB(Keyspace)を指定するが、
ysql.dbname or ycql.keyspacenameのように修飾が必要になるので注意
- 26. © 2022 NTT DATA Corporation 26
ノード追加と削除
YugabyteDBではMasterとTserverを適宜クラスタへ追加することで冗長性や性能の向上を
実施できる。以下、テーブルを明示的に4つのTabletで作成し、ノード追加によるそれらTabletの
Leaderが均等にリバランスしている様子をコマンド結果で示す。
-- 以下は1台のローカルマシン上で3つのMasterとTserverを起動しクラスタを構成
$ yugabyted start --base_dir=/home/yugabyte/ydata/node1 --listen=127.0.0.1
$ yugabyted start --base_dir=/home/yugabyte/ydata/node2 --listen=127.0.0.2 --join=127.0.0.1
$ yugabyted start --base_dir=/home/yugabyte/ydata/node3 --listen=127.0.0.3 --join=127.0.0.1
yugabyte=# CREATE TABLE t1 (c1 int primary key, c2 text) SPLIT INTO 4 TABLETS;
CREATE TABLE
yugabyte=# INSERT INTO t1 SELECT generate_series(1,10000), 'AAA';
INSERT 0 10000
yugabyte=# ¥q
$ yb-admin list_tablets ysql.yugabyte t1
Tablet-UUID Range Leader-IP Leader-UUID
dc7ad7e2988742a8861b4c224e66b05a partition_key_start: "" partition_key_end: "?¥377" 127.0.0.2:9100 68c0f30f937140a9a0d1449e9c5cc01d
3739b68f0035419eb2b8d2e57937cef3 partition_key_start: "?¥377" partition_key_end: "¥177¥376" 127.0.0.1:9100 44ea2d19ea0b469184a0640713796f3b
82b1ef5f90604bc6a7a204953247b52e partition_key_start: "¥177¥376" partition_key_end: "¥277¥375" 127.0.0.2:9100 68c0f30f937140a9a0d1449e9c5cc01d
69b32c5c0ae441e8ade3bd46f923732c partition_key_start: "¥277¥375" partition_key_end: "" 127.0.0.3:9100 a8f45172236f451190cc55a74c41ceba
4つのTabletが3つのノードに配置されている
- 27. © 2022 NTT DATA Corporation 27
ノード追加と削除
-- もう1台のTserverを起動しクラスタに追加
$ yugabyted start --base_dir=/home/yugabyte/ydata/node4 --listen=127.0.0.4 --join=127.0.0.1
$ yb-admin list_tablets ysql.yugabyte t1
Tablet-UUID Range Leader-IP Leader-UUID
dc7ad7e2988742a8861b4c224e66b05a partition_key_start: "" partition_key_end: "?¥377" 127.0.0.2:9100 68c0f30f937140a9a0d1449e9c5cc01d
3739b68f0035419eb2b8d2e57937cef3 partition_key_start: "?¥377" partition_key_end: "¥177¥376" 127.0.0.1:9100 44ea2d19ea0b469184a0640713796f3b
82b1ef5f90604bc6a7a204953247b52e partition_key_start: "¥177¥376" partition_key_end: "¥277¥375" 127.0.0.4:9100 767b16ee4ac84184a27e08fef1cd0d01
69b32c5c0ae441e8ade3bd46f923732c partition_key_start: "¥277¥375" partition_key_end: "" 127.0.0.3:9100 a8f45172236f451190cc55a74c41ceba
4つのTabletが新規に追加されたノード(127.0.0.4)を
含めた4ノードにリバランスされた
- 28. © 2022 NTT DATA Corporation 28
ノード追加と削除
次に、ノード削除を行い削除対象のTserverノードにいたLeaderが別のノードに移る様子を見る。
-- yugabyted destoryでNode3を停止しデータディレクトリを破棄する
$ yugabyted destroy --base_dir=/home/yugabyte/ydata/node3
Stopped yugabyted using config /home/yugabyte/ydata/node3/conf/yugabyted.conf.
Deleted logs at /home/yugabyte/ydata/node3/logs.
Deleted data at /home/yugabyte/ydata/node3/data.
Deleted conf file at /home/yugabyte/ydata/node3/conf/yugabyted.conf.
$ yb-admin list_tablets ysql.yugabyte t1
Tablet-UUID Range Leader-IP Leader-UUID
dc7ad7e2988742a8861b4c224e66b05a partition_key_start: "" partition_key_end: "?¥377" 127.0.0.2:9100 68c0f30f937140a9a0d1449e9c5cc01d
3739b68f0035419eb2b8d2e57937cef3 partition_key_start: "?¥377" partition_key_end: "¥177¥376" 127.0.0.1:9100 44ea2d19ea0b469184a0640713796f3b
82b1ef5f90604bc6a7a204953247b52e partition_key_start: "¥177¥376" partition_key_end: "¥277¥375" 127.0.0.4:9100 767b16ee4ac84184a27e08fef1cd0d01
69b32c5c0ae441e8ade3bd46f923732c partition_key_start: "¥277¥375" partition_key_end: "" 127.0.0.1:9100 44ea2d19ea0b469184a0640713796f3b
削除されたノード(127.0.0.3)がLeaderだったTabletが
別のノードに変更された
- 29. © 2022 NTT DATA Corporation 29
© 2022 NTT DATA Corporation 29
05
おわりに
- 30. © 2022 NTT DATA Corporation 30
まとめ
本講演ではYugabyteDBの概要とアーキテクチャの簡単な説明、
および利用と管理の基本的な一連の流れを解説しました。
分散データベースは非常に取っつきにくい、扱いにくそう、というイメージがあるかもしれませんが
利用してみるだけならばとても簡単です。
YugabyteDBに限らず、昨今の類似プロダクト(TiDBやCockroachDBなど)は使い勝手を考
慮した便利なユーティリティやコマンドの充実にも力を入れています。
ぜひ、気になっている方々がいれば、実際に使ってみてください。
- 31. © 2022 NTT DATA Corporation 31
© 2022 NTT DATA Corporation 31
06
付録など
- 32. © 2022 NTT DATA Corporation 32
【参考】 Tabletの分割方法の指定
Tabletの分割は自動で行われるほか、テーブル作成時に予め分割しておくことも可能。
分割はHashかRangeとなるが、主キーやインデックスの定義方法で決まることになる。
Range SplitのテーブルにHash Splitのインデックス定義なども可能。
-- 主キーをASC/DESC付きでソートしたものを定義した場合はRange Splitとなる
yugabyte=# CREATE TABLE r_t1 (c1 int, c2 text, primary key (c1 ASC));
CREATE TABLE
-- 主キーのデフォルト(ASCなどを付与しない)定義ではHash Splitとなる
yugabyte=# CREATE TABLE h_t1 (c1 int, c2 text, primary key (c1));
CREATE TABLE
-- インデックスも同様のルール。なおRange Splitの場合は作成時にSplitの境界値を指定できる
yugabyte=# CREATE INDEX r_t1_idx ON r_t1 (c2 ASC) SPLIT AT VALUES((1000),(2000));
CREATE INDEX
-- Hash Splitの場合は作成時に分割数を指定できる
yugabyte=# CREATE INDEX h_t1_idx ON h_t1 (c2) SPLIT INTO 4 TABLETS;
CREATE INDEX
- 33. © 2022 NTT DATA Corporation 33
【参考】 yugabytedコマンドのその他ポイント
• yugabytedで3つ以上のMaster/Tserverを起動し—joinオプションでクラスタを構成すると、
自動的にreplication factorを3に設定し、冗長構成としてくれる
• ただしMasterは4つ以上の構成にしない(Tserverは4台上の追加がされる)
• Masterを4つ以上とするクラスタを構成する場合は手動でyb-masterを起動しクラスタに参加させる必要がある
• Tserverを4つ以上に増やしていってもreplication factorは3から変更されない
• replication factorを変更する場合は別途tserver_flagsオプションで変更する必要がある
• master_flagsやtserver_flagsオプションの指定は非常に長くなりやすく、かつクォート/ダブルクォートの指定が(正しい文法で
あっても)一部のケースでエラーで弾かれることがある。
• 以下のようにconfファイルを作成し、--tserver_flags=flagfile=/path/to/conf_fileという方法を取ると良い。
$ cat /tmp/tserver_flg.conf
--yb_enable_read_committed_isolation=true
--ysql_beta_features=true
--ysql_pg_conf_csv=password_encryption=scram-sha-256
--ysql_hba_conf_csv=host all kasa 127.0.0.1/32 scram-sha-256,host all all 0.0.0.0/0 trust,host all all ::0/0 trust
$ yugabyted start --tserver_flags=flagfile=/tmp/tserver_flg.conf
- 34. © 2022 NTT DATA Corporation 34
【参考】 ycqlshによる接続と操作
YugabyteDBのYCQLでの接続はycqlshコマンド、もしくはCassandra用のドライバや
コマンド(cqlshなど)を利用可能。
$ ycqlsh
Connected to local cluster at 127.0.0.1:9042.
[ycqlsh 5.0.1 | Cassandra 3.9-SNAPSHOT | CQL spec 3.4.2 | Native protocol v4]
Use HELP for help.
ycqlsh> DESCRIBE KEYSPACES;
system_auth system_schema system
ycqlsh> CREATE KEYSPACE test;
ycqlsh> USE test;
ycqlsh:test> CREATE TABLE t1 (c1 int primary key, c2 text);
ycqlsh:test> INSERT INTO t1(c1, c2) VALUES (1, 'AAA');
ycqlsh:test> SELECT * FROM t1;
c1 | c2
----+-----
1 | AAA
(1 rows)
基本的にCassandraと同じ
シンタックスであればほとんど実行可能。
- 35. © 2022 NTT DATA Corporation
その他、記載されている会社名、商品名、又はサービス名は、
各社の登録商標又は商標です。