Se ha denunciado esta presentación.
Se está descargando tu SlideShare. ×

トランザクション処理可能な分散DB 「YugabyteDB」入門(Open Source Conference 2022 Online/Fukuoka 発表資料)

Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio

Eche un vistazo a continuación

1 de 66 Anuncio

トランザクション処理可能な分散DB 「YugabyteDB」入門(Open Source Conference 2022 Online/Fukuoka 発表資料)

トランザクション処理可能な分散DB 「YugabyteDB」入門
(Open Source Conference 2022 Online/Fukuoka 発表資料)

2022年11月26日(土)

NTTデータ
技術開発本部 先進コンピューティング技術センタ
笠原 辰仁

トランザクション処理可能な分散DB 「YugabyteDB」入門
(Open Source Conference 2022 Online/Fukuoka 発表資料)

2022年11月26日(土)

NTTデータ
技術開発本部 先進コンピューティング技術センタ
笠原 辰仁

Anuncio
Anuncio

Más Contenido Relacionado

Más de NTT DATA Technology & Innovation (20)

Más reciente (20)

Anuncio

トランザクション処理可能な分散DB 「YugabyteDB」入門(Open Source Conference 2022 Online/Fukuoka 発表資料)

  1. 1. © 2022 NTT DATA Corporation Open Source Conference 2022 Online/Fukuoka トランザクション処理可能な分散DB 「YugabyteDB」入門 2022/11/26 NTTデータ 笠原 辰仁
  2. 2. © 2022 NTT DATA Corporation 2 © 2022 NTT DATA Corporation 2 00 はじめに
  3. 3. © 2022 NTT DATA Corporation 3 自己紹介 • NTTデータ 技術開発本部 笠原 辰仁 • 長年PostgreSQLの検証や周辺ツールの開発、サポートなどに従事 • 最近はNewSQLや分散データベースに属するOSSプロダクトの調査や検証、 適用領域の見極めなど • 本日は、まだあまり馴染みのない分散データベースのOSSプロダクトであるYugabyteDBの概 観や利用方法を紹介 • 興味があるので手始めに簡単に触ってみたい、どんな特長のあるプロダクトかをざっくり知りた い、という方々の一助になれば・・ • 本資料は公開しますので、細かい部分はそちらで確認いただけます
  4. 4. © 2022 NTT DATA Corporation 4 本日のアジェンダ 1.YugabyteDBの概要とアーキテクチャ 2.YugabyteDBの導入と操作 3.YSQLによるDBへの処理 4.YugabyteDBの管理 【注意】 本日紹介するYugabyteDBでは、機能追加や変更が活発に行われているため、本日の講演内容と最新版のプロダクトとの 齟齬が出やすいことが想定されます。参考として公式のオンラインマニュアルのリンクも添えていますので、試行の際に躓く場合は マニュアルを参考してください。 本資料の説明には2022年11月上旬での最新版であるYugabyteDBのバージョン2.15(2.15.2)を利用しています。
  5. 5. © 2022 NTT DATA Corporation 5 © 2022 NTT DATA Corporation 5 01 YugabyteDBの概要とアーキテクチャ
  6. 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. 7. © 2022 NTT DATA Corporation 7 YugabyteDBの概要 非常に高いPostgreSQLとの互換性を持つ。 • ほとんどのDDL/DML/DCLのシンタックスをサポート • PostgreSQLが持っているデータ型や組み込み関数もOK • Extensionも主要なものはカバー • NewSQLとしては珍しく外部キーやトリガ、ユーザ定義関数、ストアドプロシージャもサポート • TiDBやCockroachDBなども追随しているが一歩リード、な感じ • トランザクション分離レベルとしてもRead Committedもサポートし、PostgreSQLと同じよう な振る舞いが可能 • JDBCなどPostgreSQL用のドライバも広く利用可能
  8. 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. 9. © 2022 NTT DATA Corporation 9 YB-Masterサーバ YB-Masterサーバ(以降Masterと呼称)はDDLの実行やデータ配置などの管理を行う。 Masterは複数ノードで構成され、1台のLeaderと複数のFollowerから成る。 メタデータはDocDB(RocksDBの改良版となるKVS)に格納され、Raftを用いてLeaderの選出や冗長化を実施。 Leader役のノードダウン時にはFollowerがLeaderに昇格し処理を継続する。 YugabyteDBクラスタ (Universe) YugabyteDBノード#1 YB-Master (Follower) YB-Tserver YugabyteDBノード#2 YB-Master (Leader) YB-Tserver YugabyteDBノード#3 YB-Master (Follower) YB-Tserver DocDB DocDB DocDB クラスタのメタデータの変更を 伴う処理(テーブル作成や データ配置の変更など)は Leaderで実施され、 その結果がFollowerに 伝搬される。
  10. 10. © 2022 NTT DATA Corporation 10 YB-Tserverサーバ YB-Tserverサーバ(以降Tserverと呼称)はユーザからのYSQL(PostgreSQL互換のIF)と YCQL(Cassandra互換のIF)を受け付け処理を行う。また、Masterのメタデータを元に ユーザーデータの読み書きを実施。データはTablet(後述)という単位で分割され複数のTserverに 均等に分散される。これによりTserverのノード増減に伴うスケーラビリティを実現している。 YugabyteDBクラスタ (Universe) YugabyteDBノード#1 YB-Master YB-Tserver YugabyteDBノード#2 YB-Master YugabyteDBノード#3 YB-Master YSQL YCQL DocDB YB-Tserver YSQL YCQL DocDB YB-Tserver YSQL YCQL DocDB クエリ処理やそれに伴うデータ の読み書きを行う。 ユーザはすべてのTserverへ 処理を行うことができる。
  11. 11. © 2022 NTT DATA Corporation 11 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が 選択可能。 分割数や配置は基本的に 自動で決定・実施。
  12. 12. © 2022 NTT DATA Corporation 12 © 2022 NTT DATA Corporation 12 02 YugabyteDBの導入と操作
  13. 13. © 2022 NTT DATA Corporation 13 YugabyteDBの動作環境とインストール YugabyteDBは以下の環境で利用可能。 詳しくは https://docs.yugabyte.com/preview/quick-start/ OSのバージョン バイナリ Docker 備考 CentOS 7以降 ○ ○ RockyLinux8でもとりあえ動作 Ubuntu 16.04以降 ○ ○ Mac 10.12以降 ○ ○ Windows -- - ○ 必要なハードスペック • https://docs.yugabyte.com/preview/deploy/checklist/ • CPUは最低2core, 推奨は16core以上 • メモリは最低2GB, 推奨は32GB以上 • CPUとメモリはあるだけ良い・・ • ストレージはSSD等の高速なもの推奨 • YugabyteDBではJBODのような複数ディスク構成も扱いやすい (RAIDやLLVMでまとめなくても良い) • サイズ要求は明示的にないが、触ってみる程度ならば最低限1GB程度あれば動く (できれば20GBくらいあると良い)
  14. 14. © 2022 NTT DATA Corporation 14 YugabyteDBの動作環境とインストール インストールに際しては、以下のソフトウェアを事前に導入しておく。 • Python3 • 後にも出てくるYugbyteDBのCLIやユーティリティの多くがPythonを利用しているため • wget もしくは curl • これはバイナリのダウンロードのため その他のポイント • 複数ノードでクラスタを構成する場合は、NTP/Chronyでノード間の時刻同期をしておく • デフォルトの設定では250 msec以上の時刻差があるとWARNING、6秒以上でFATALのエラーとなる • システム設定でいくつかの設定を引き上げておくと良い • 簡易動作確認程度ならば問題ないが、比較的多めのファイルやスレッドを扱うためnofile (ulimit –n)、 nproc (ulimit –u)は公式ドキュメントの推奨程度にしておく • https://docs.yugabyte.com/preview/deploy/manual-deployment/system-config/
  15. 15. © 2022 NTT DATA Corporation 15 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程度のサイズとなる。
  16. 16. © 2022 NTT DATA Corporation 16 YugabyteDBのインストール 前述のコマンドにより $HOME/yugabyte-2.15.2.1 に必要資材が格納される。 操作に必要な実行ファイルは $HOME/yugabyte-2.15.2.1/bin と $HOME/yugabyte-2.15.2.1/postgres/bin にあるため、PATH に上記を通しておくと良い。 $ cat .bashrc YUGA_INSTALL=/home/yugabyte/yugabyte-2.15.2.1 export PATH=$PATH:$YUGA_INSTALL/bin:$YUGA_INSTALL/postgres/bin
  17. 17. © 2022 NTT DATA Corporation 17 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コマンドを利用した実例で解説を進める。
  18. 18. © 2022 NTT DATA Corporation 18 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/
  19. 19. © 2022 NTT DATA Corporation 19 YugabyteDBの起動 YugabyteDBを起動すると以下のプロセスが立ち上がる。 yugabyte 6411 0.0 0.0 470544 17560 ? Sl 10:27 0:00 python /home/yugabyte/yugabyte-2.15.2.1/bin/yugabyted start yugabyte 6423 1.7 0.3 649900 127504 ? Sl 10:27 0:04 /home/yugabyte/yugabyte-2.15.2.1/bin/yb-master (略 yugabyte 6504 0.3 0.1 1055384 57748 ? Sl 10:27 0:00 /home/yugabyte/yugabyte-2.15.2.1/bin/yb-tserver (略 yugabyte 6672 0.0 0.2 291664 64508 ? S 10:27 0:00 /home/yugabyte/yugabyte-2.15.2.1/postgres/bin/postgres (略 yugabyte 6696 0.0 0.0 133392 17548 ? Ss 10:27 0:00 postgres: logger yugabyte 6698 0.0 0.0 308056 26272 ? Ssl 10:27 0:00 postgres: YSQL webserver yugabyte 6700 0.0 0.0 291664 18452 ? Ss 10:27 0:00 postgres: checkpointer yugabyte 6701 0.0 0.0 135512 17508 ? Ss 10:27 0:00 postgres: stats collector yugabytedとyb-master、yb-tserverの他、PostgreSQL(とPostgreSQLのバックグラウンドプロセス)が稼働する。 PostgreSQLはTserverが内部的に起動/停止するためユーザが直接管理する必要はない。
  20. 20. © 2022 NTT DATA Corporation 20 YugabyteDBのデータディレクトリ YugabyteDBを起動する際、指定されたデータディレクトリ(yb-master、yb-tserverコマンドの--fs_data_dirsオプションで指 定)が空もしくは存在しない場合、自動でディレクトリが作成され各種の初期データが作成される。 yugabytedコマンドを利用する場合、デフォルトでは実施ユーザのHOMEディレクトリ配下に「var」ディレクトリが生成され、その配下 に各種データが生成・格納される。以下はyugabytedコマンドで生成されるデータディレクトリ。 var/ |-- conf < -- yugabytedコマンドの起動オプション(デフォルト含む)として使用されたパラメータの設定ファイル |-- data | |-- pg_data < -- Tserverで稼働するPostgreSQLのデータファイル | `-- yb-data < -- Master、およびTserverのデータファイル `-- logs |-- master < -- Masterのログディレクトリへのリンク `-- tserver < -- Tserverのログディレクトリへのリンク ログディレクトリ配下にはいくつかログが生成される。直下にあるmaster.errやtserver.errは各サービスの起動ログ。 yugabyted.logはyugabytedが発行しているコマンドログ。起動が上手くいかない場合はこれらを見ると良い。
  21. 21. © 2022 NTT DATA Corporation 21 yugabytedが利用するポート YugabyteDBは処理の受付や後述するメトリクス情報のエンドポイント用に以下のポートを利用する。 ユーザはこれらにアクセスして処理をリクエストしたり情報を参照したりできる。 (なお他にYEDIS用のポートもあるが、YEDISは廃止予定のため省いている) ポート番号 用途 備考 5433 TserverでのYSQLのリクエスト 9042 TserverでのYCQLのリクエスト 7000 MasterのWeb UIとメトリクス用 Web UIはブラウザでアクセスする。 メトリクスはPrometheusで収集するためのもの だが、jsonフォーマット出力を行うエンドポイント も備えている。 9000 TserverのWeb UIとメトリクス用 13000 TserverでのYSQLのメトリクス用 12000 TserverでのYCQLのメトリクス用 7100 MasterのRPC処理用 ユーザは直接利用しない。 9100 TserverのRPC処理用 https://docs.yugabyte.com/preview/reference/configuration/default-ports/
  22. 22. © 2022 NTT DATA Corporation 22 YugabyteDBの停止 yugabytedコマンドを利用する場合、以下のように「yugabyted stop」とするだけで起動できる。 $ yugabyted stop Stopped yugabyted using config /home/yugabyte/var/conf/yugabyted.conf. もし、同じデータディレクトリで再度起動したい場合は「yugabyted start」とすれば良い。 なお、使い捨てのデータディレクトリである場合(停止後にデータなどを破棄しても良い)、 「yugabyted destroy」とすることで停止と共にデータディレクトリの破棄も行う。ただし 「var/conf」のみ残る。 $ yugabyted destroy Stopped yugabyted using config /home/yugabyte/var/conf/yugabyted.conf. Deleted logs at /home/yugabyte/var/logs. Deleted data at /home/yugabyte/var/data. Deleted conf file at /home/yugabyte/var/conf/yugabyted.conf..
  23. 23. © 2022 NTT DATA Corporation 23 yugabytedによる起動時のオプションについて yugabytedコマンドはいくつかのオプションを取ることができる。 以下は多用するため抑えておくと良い。特に複数のYugabyteDBを起動してクラスタを組む場合には必須となる。 オプション 用途 --listen 起動するMasterとTserverのListenアドレスの指定。複数のMasterとTserverでクラスタを組む場合は 明示しておくと良い。 --base_dir 起動するMasterとTserverのデータディレクトリの指定。 --join 複数のMasterとTserverでクラスタ構成を組む際のジョインする既存Masterのアドレス --master_flags Master用のパラメータ指定。カンマ区切りでname=valueを複数指定可能。 --tserver_flags Tserver用のパラメータ指定。カンマ区切りでname=valueを複数指定可能。 -- 以下は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 https://docs.yugabyte.com/preview/reference/configuration/yugabyted/
  24. 24. © 2022 NTT DATA Corporation 24 © 2022 NTT DATA Corporation 24 03 YSQLによるDBへの処理
  25. 25. © 2022 NTT DATA Corporation 25 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と同じ シンタックスであればほとんど実行可能。 メタコマンド(¥~)もおおよそ カバーされている
  26. 26. © 2022 NTT DATA Corporation 26 【参考】非サポートのシンタックス対応 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).
  27. 27. © 2022 NTT DATA Corporation 27 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
  28. 28. © 2022 NTT DATA Corporation 28 DLはトランザクショナルではないこと 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
  29. 29. © 2022 NTT DATA Corporation 29 トランザクション分離レベルの設定 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
  30. 30. © 2022 NTT DATA Corporation 30 トランザクション分離レベルの設定 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
  31. 31. © 2022 NTT DATA Corporation 31 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
  32. 32. © 2022 NTT DATA Corporation 32 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
  33. 33. © 2022 NTT DATA Corporation 33 © 2022 NTT DATA Corporation 33 04 YugabyteDBの管理
  34. 34. © 2022 NTT DATA Corporation 34 YugabyteDBの管理 DBの管理には様々あるが、本資料では以下の項目について紹介する。 • クラスタの状態/情報を確認する • yb-adminコマンドで確認する • ノード追加と削除 • MasterとTserverを追加/削除しスケールさせる • Web UIを使う • Web UIで各種情報を確認する • 監視(メトリクス監視) • PrometheusとGrafanaと連携しメトリクスを可視化する
  35. 35. © 2022 NTT DATA Corporation 35 クラスタの状態/情報を確認する YugabyteDBではクラスタ管理用にyb-adminコマンドが用意されている。 yb-adminではおよそ以下のことができる。DBAの作業に該当することはほぼカバーする。 • クラスタ状態の確認 • MasterやTserverの数や状態、Tabletの配置状況など • クラスタ構成の変更 • Masterの追加やレプリケーション数の変更、Master/TserverのDecommissionなど • テーブルやTabletの構成変更 • テーブルのレプリケーション数変更やTabletの分割、再配置など • バックアップ/リストア • 手動でのスナップショット取得や自動バックアップのスケジュール設定など その他いろいろ 詳細はマニュアルを参照 -> https://docs.yugabyte.com/preview/admin/yb-admin
  36. 36. © 2022 NTT DATA Corporation 36 クラスタの状態/情報を確認する 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のように修飾が必要になるので注意
  37. 37. © 2022 NTT DATA Corporation 37 ノード追加と削除 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つのノードに配置されている
  38. 38. © 2022 NTT DATA Corporation 38 ノード追加と削除 -- もう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ノードにリバランスされた
  39. 39. © 2022 NTT DATA Corporation 39 ノード追加と削除 次に、ノード削除を行い削除対象の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が 別のノードに変更された
  40. 40. © 2022 NTT DATA Corporation 40 ノード全体の停止について 注意点として、クラスタ全体を綺麗にシャットダウンする機能は今のところない(ように見受けられる)。 これはTODOとなっている。従って大規模データでクラスタを組んでいる場合にYugabyteDBのクラスタ全体の起動と停止を行う 場合は注意が必要。 https://github.com/yugabyte/yugabyte-db/issues/10664
  41. 41. © 2022 NTT DATA Corporation 41 Web UIを使う YugabyteDBではMasterとTserverのぞれぞれにWeb UIを備えている。 Web UIへはMasterやTserverが稼働しているホストの7000 or 9000ポートにブラウザでアクセスする。 操作はできないが、MasterやTserverのノード数や状態、テーブルやTabletの状態を確認することができる。
  42. 42. © 2022 NTT DATA Corporation 42 Web UIを使う (テーブルとインデックスの情報)
  43. 43. © 2022 NTT DATA Corporation 43 Web UIを使う (Tablet Serverの情報)
  44. 44. © 2022 NTT DATA Corporation 44 Web UIを使う (Debug情報) メモリ使用量やスレッドの稼働状況などがかなり細かく分かる。GFlagsで現状のパラメータ設定が確認可能。
  45. 45. © 2022 NTT DATA Corporation 45 PrometheusとGrafanaとの連携 YugabyteDBではMasterとTserverがPrometheus用のフォーマットでメトリクスを出力する エンドポイントを備えている。またGrafana用のサンプルダッシュボードも提供している。 そのためPrometheusでそれらを対象にスクレイピングを行い、主要なメトリクスをGrafanaで可視化することが容易である。 この資料ではPrometheusとGrafanaをそれぞれ入手して最もシンプルな利用方法を説明する。 ポート番号 エンドポイント 説明 7000 (Master) 9000 (Tserver) 13000 (YSQL) 12000 (YCQL) /metrics Master、Tserver、YSQL、YCQLそれぞれのメトリクスをJSONの形 で出力するエンドポイント /prometheus-metrics 同上のデータをPrometheusフォーマットで出力するエンドポイント 13000 (YSQL) /statements PostgreSQLのpg_stat_statementsと同様のデータをJSONの形 式で出力するエンドポイント
  46. 46. © 2022 NTT DATA Corporation 46 PrometheusとGrafanaとの連携 以下のように最新版のPrometheusとGrafanaを入手し、 提供されているサンプルの設定を利用する。 $ cd download $ wget https://dl.grafana.com/enterprise/release/grafana-enterprise-9.2.2.linux-amd64.tar.gz $ tar zxvf grafana-enterprise-9.2.2.linux-amd64.tar.gz $ wget https://github.com/prometheus/prometheus/releases/download/v2.39.1/prometheus-2.39.1.linux-amd64.tar.gz $ tar zxvf prometheus-2.39.1.linux-amd64.tar.gz $ cd prometheus-2.39.1.linux-amd64 $ ./prometheus --config.file=prometheus-yugabyte.yml & $ cd ../grafana-9.2.2 $ ./bin/grafana-server web & https://docs.yugabyte.com/preview/explore/observability/prometheus-integration/linux/ の prometheus用のymlファイルを改変(スクレイプ対象のIPなどを変更)して利用すると良い。 本資料では「prometheus-yugabyte.yml」としている。
  47. 47. © 2022 NTT DATA Corporation 47 PrometheusとGrafanaとの連携 Prometheusが無事稼働していれば、稼働させたノードのポート:9090にブラウザで アクセスすると以下のようなページが表示される。(PromQLで問い合わせは可能)
  48. 48. © 2022 NTT DATA Corporation 48 PrometheusとGrafanaとの連携 Grafanaの設定に関しては通常の(他の製品と同様の)手順となる。 ここではGrafanaを起動してブラウザでアクセスするところから解説する。 ブラウザでGrafanaの起動しているサー バのポート(デフォルト3000)にアクセス。 ID/passはadmin/adminが初期値。 赤枠のメニューから「Data Source」を選択
  49. 49. © 2022 NTT DATA Corporation 49 PrometheusとGrafanaとの連携 Data SourceにPrometheusを選択し、 URLでPrometheusの稼働している サーバとポート(デフォルト9090)を指定 下部の「Save & Test」を押下。 (上記のようになる)
  50. 50. © 2022 NTT DATA Corporation 50 PrometheusとGrafanaとの連携 Dashboardsを選択し、Grafana.com にアップロードされているYugabyteDB 用のひな型(12620)を指定しLoadする 下部でPrometehusを指定しImportを押下する
  51. 51. © 2022 NTT DATA Corporation 51 PrometheusとGrafanaとの連携 ここまでの手順でDashboardが利用可 能になっている(はず)
  52. 52. © 2022 NTT DATA Corporation 52 PrometheusとGrafanaとの連携 pgbenchで負荷をかけてメトリクスを眺めてみる -- 初期化(ベンチマーク用のテーブルとインデックス作成、およびデータロード) $ pgbench -i -s 1 -h 127.0.0.1 -p 5433 -- ベンチマーク実施(-n: VACUUM不要、-T: 実施時間、-c: 同時実行数、-P: 指定間隔での性能レポート出力) -- Read Committed以外のトランザクション分離レベルの場合、開始時にエラーが出る $ pgbench -n -T 1200 -c 4 -P 10 -h 127.0.0.1 -p 5433 progress: 10.0 s, 364.4 tps, lat 2.730 ms stddev 0.783 progress: 20.0 s, 366.3 tps, lat 2.730 ms stddev 0.321 (中略) progress: 610.0 s, 365.3 tps, lat 2.738 ms stddev 0.427 progress: 620.0 s, 365.5 tps, lat 2.736 ms stddev 0.388 (中略) progress: 1190.0 s, 343.9 tps, lat 2.908 ms stddev 0.259 progress: 1200.0 s, 343.9 tps, lat 2.907 ms stddev 0.267 (中略) number of transactions actually processed: 426127 latency average = 2.816 ms latency stddev = 0.356 ms tps = 355.105677 (including connections establishing) tps = 355.109373 (excluding connections establishing)
  53. 53. © 2022 NTT DATA Corporation 53 PrometheusとGrafanaとの連携 以下のようにpgbench実行中のクエリ種別ごとのレイテンシやスループットが可視化される。
  54. 54. © 2022 NTT DATA Corporation 54 PrometheusとGrafanaとの連携 注意点として、YugabyteDBが出力するメトリクスがYugabyteDB内のレイテンシとなる。 そのためクライアントとの通信や結果送信などのNWレイテンシは加味されない。性能試験などの際はメトリクスだけでなくクライアン ト側でのレイテンシなども確認しておくと良い
  55. 55. © 2022 NTT DATA Corporation 55 © 2022 NTT DATA Corporation 55 05 おわりに
  56. 56. © 2022 NTT DATA Corporation 56 まとめ 本講演ではYugabyteDBの概要とアーキテクチャの簡単な説明、 および利用と管理の基本的な一連の流れを解説しました。 分散データベースは非常に取っつきにくい、扱いにくそう、というイメージがあるかもしれませんが 利用してみるだけならばとても簡単です。 YugabyteDBに限らず、昨今の類似プロダクト(TiDBやCockroachDBなど)は使い勝手を考 慮した便利なユーティリティやコマンドの充実にも力を入れています。 ぜひ、気になっている方々がいれば、実際に使ってみてください。
  57. 57. © 2022 NTT DATA Corporation 57 © 2022 NTT DATA Corporation 57 06 付録など
  58. 58. © 2022 NTT DATA Corporation 58 【参考】 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
  59. 59. © 2022 NTT DATA Corporation 59 【参考】 YugabyteDBのデータディレクトリ (yb-data) YugabyteDBのMasterとTserverそれぞれで扱う実データは基本的にDocDBに格納される。DocDBはTabletの単位でイン スタンスが作成されるため、Tabletの数だけDocDB用のディレクトリが存在する。 また、内部的にノード間はProtocol Bufferを利用してデータのやり取り(read/write, replication, consensusなど)がされ るため、そのデータのメタデータもデータディレクトリに格納される。 var/data/yb-data/ |-- master | |-- consensus-meta < -- Tablet毎のRaftコンセンサスのメタデータ | |-- data < -- Tablet毎のDocDB(RocksDB)の実データ | |-- logs < -- ログファイル | |-- tablet-meta < -- Tablet毎のメタデータ | `-- wals < -- Tablet毎のWAL(Write Ahead Log) `-- tserver < -- 以下はTservertのデータだが区分けはMasterと同様 |-- consensus-meta |-- data |-- logs |-- tablet-meta `-- wals
  60. 60. © 2022 NTT DATA Corporation 60 【参考】 YugabyteDBのデータディレクトリ (rocksdb) 「var/data/yb-data/tserver/data/」配下には、YugabyteDBのTserverのユーザデータ(ユーザが作成したテーブルなど) が格納される。以下のように「rocksdb」ディレクトリの下に「table-<UUID>」ディレクトリがテーブルとインデックス(主キーは除く) の数だけ作成され、その下に「tablet-<UUID>」のディレクトリが作成される。 var/data/yb-data/tserver/data/ `-- rocksdb |-- table-000033e8000030008000000000004008 < -- Table(3つのTabletを持つ)のディレクトリ | |-- tablet-39ae7e99082e4e2483d9909131a67155 < -- Tabletのデータ | |-- tablet-39ae7e99082e4e2483d9909131a67155.intents < -- 同名Tabletのロックなどのデータ | |-- tablet-39ae7e99082e4e2483d9909131a67155.snapshots < -- 同名Tabletのスナップショットデータ | |-- tablet-3c47e9b44d25408f9765231ba6fedbc7 | |-- tablet-3c47e9b44d25408f9765231ba6fedbc7.intents | |-- tablet-3c47e9b44d25408f9765231ba6fedbc7.snapshots | |-- tablet-ce93f09488d94b109f09f05e434470ff | |-- tablet-ce93f09488d94b109f09f05e434470ff.intents | `-- tablet-ce93f09488d94b109f09f05e434470ff.snapshots |-- table-000033e8000030008000000000004003 (略)
  61. 61. © 2022 NTT DATA Corporation 61 【参考】 メタデータのダンプ YugabyteDBではメタデータのダンプを行う yb-pbc-dumpコマンドを提供している。以下のようにメタデータファイルを引数として 渡すことで、中身をJSON形式で確認することができる。 $ yb-pbc-dump var/data/yb-data/tserver/tablet-meta/39ae7e99082e4e2483d9909131a67155 yb.tablet.RaftGroupReplicaSuperBlockPB 0 ------- primary_table_id: "000033e8000030008000000000004008" raft_group_id: "39ae7e99082e4e2483d9909131a67155" tablet_data_state: TABLET_DATA_READY partition { partition_key_start: "¥252¥252" partition_key_end: "" } wal_dir: "/home/yugabyte/var/data/yb-data/tserver/wals/table-000033e8000030008000000000004008/tablet- 39ae7e99082e4e2483d9909131a67155" kv_store { kv_store_id: "39ae7e99082e4e2483d9909131a67155" rocksdb_dir: "/home/ yugabyte/var/data/yb-data/tserver/data/rocksdb/table-000033e8000030008000000000004008/tablet- 39ae7e99082e4e2483d9909131a67155" tables { table_id: "000033e8000030008000000000004008" table_name: “t1" table_type: PGSQL_TABLE_TYPE (略)
  62. 62. © 2022 NTT DATA Corporation 62 【参考】 WALデータのダンプ YugabyteDBではWALデータのダンプを行う log-dumpコマンドを提供している。以下のようにwalファイルを引数として渡すこと で、中身をJSON形式で確認することができる。 $ log-dump var/data/yb-data/master/wals/table-sys.catalog.uuid/tablet-00000000000000000000000000000000/wal-000000001 Header: major_version: 1 minor_version: 0 unused_tablet_id: "00000000000000000000000000000000" sequence_number: 1 (中略) 1.753@6836335657396293632 REPLICATE WRITE_OP, SIZE: 211 1.754@6836335657458892800 REPLICATE UPDATE_TRANSACTION_OP, SIZE: 96 id { term: 1 index: 754 } hybrid_time: 6836335657458892800 op_type: UPDATE_TRANSACTION_OP committed_op_id { term: 1 index: 753 } monotonic_counter: 0 transaction_state { transaction_id: "¥313I¥217¥266¥333¥340M¥213¥252¥311¥2003¥275¥213¥r¥337" status: APPLYING tablets: "722f625cf0224b69b4a2082d68880329" commit_hybrid_time: 6836335657455751168 sealed: false aborted { } } 1.755@6836335661583060992 REPLICATE WRITE_OP, SIZE: 429 1.756@6836335661617115136 REPLICATE WRITE_OP, SIZE: 557 1.757@6836335661690589184 REPLICATE WRITE_OP, SIZE: 568 1.758@6836335662616879104 REPLICATE WRITE_OP, SIZE: 639 1.759@6836335662670917632 REPLICATE WRITE_OP, SIZE: 993 1.760@6836335662694785024 REPLICATE WRITE_OP, SIZE: 854 1.761@6836335662809821184 REPLICATE WRITE_OP, SIZE: 500
  63. 63. © 2022 NTT DATA Corporation 63 【参考】 パラメータについて YugabyteDBではMaster、Tserverそれぞれで非常に多くのパラメータが設定できる。 パラメータの中には動的に変更できるものなどもあるが、マニュアル上から読み解くことが難しい。 パラメータについてはXMLの形式だが資材ディレクトリ(インストール時に入手したtar.gzを解凍した配下)に配置される master_flags.xmlとtserver_flags.xmlに詳細情報がある 以下のようにXMLをパースしてmodeを確認し、「runtime」とラベル付けされていれば動的変更が可能。 $ cat yuga-param.pyc ################################ import sys import xml.etree.ElementTree as ET for param in ET.parse(sys.stdin).getroot().findall('flag'): name = param.find('name').text mode = param.find('tags').text print ("name:[", name, "] mode:[", mode, "]") ################################ $ python yuga-param.pyc < yugadb/yugabyte-2.15.2.1/master_flags.xml | grep runtime (略) name:[ ysql_index_backfill_rpc_timeout_ms ] mode:[ runtime,advanced ] name:[ ysql_num_tablets ] mode:[ runtime ] name:[ ysql_tablespace_info_refresh_secs ] mode:[ runtime ]
  64. 64. © 2022 NTT DATA Corporation 64 【参考】 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
  65. 65. © 2022 NTT DATA Corporation 65 【参考】 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と同じ シンタックスであればほとんど実行可能。
  66. 66. © 2022 NTT DATA Corporation その他、記載されている会社名、商品名、又はサービス名は、 各社の登録商標又は商標です。

×