VoltDBを3台でクラスタを組んでいる環境で、コマンドラインでの起動・停止、ストアドプロシージャの操作やsqlcmdユーティリティの実行を実行してみます。
クラスタの情報を確認
- voltadmin status
# voltadmin status
Cluster 0, version 8.2, hostcount 3, kfactor 1
3 live hosts, 0 missing host, 0 live client, uptime 0 days 00:08:59.343
----------------------------------------------
HostId Host Name
0 voltserver1
1 voltserver2
3 voltserver3
起動
- voltdb start
# voltdb start -D /opt/voltdb/voltdbroot -H volt1 -c 3 -B
-D: VoltDBのルートディレクトリ。省略可。
-H: 接続先のクラスタのサーバ
例ではvolt1に接続していますが、3台構成であればvolt1,volt2,volt3と書きます。1台の場合は省略可。
-c: クラスタ中のサーバ台数。1台の場合は省略可。
-B: バックグラウンドで実行
サーバ停止
- voltadmin stop [サーバ名]
サーバ1からサーバ3をリモートで停止しています。最初にvoltadmin statusでHost Nameを確認し、確認したHost Nameを指定してサーバを停止しています。
# voltadmin status
Cluster 0, version 8.2, hostcount 3, kfactor 1
3 live hosts, 0 missing host, 0 live client, uptime 0 days 00:06:33.305
----------------------------------------------
HostId Host Name
0 voltserver1
1 voltserver2
2 voltserver3
# voltadmin stop voltserver3
INFO: Connecting to 192.168.10.121:21211 (voltserver1) to issue "stop" command
INFO: Stopping host 2: voltserver3:3021
Status: 1
Information: SUCCESS
クラスタ構成時のみ利用できます。K-safeの値によりクラスタ内のノードに余裕がある場合のみノードは停止されます。
ノードの停止によりクラスタがダウンする場合はノードは停止されないため、安全にノードを停止することができます。
また、ノード停止前にトランザクションの終了も待つなど安全に停止できるように、停止前に前処理が行われます。
スナップショット取得
VoltDBはデータがメモリ上に格納されているため、クラスタを停止させるとデータが消えます。
そのため、停止前にメモリ上のデータのスナップショットとしてローカルディスクへバックアップを作成します。
voltadmin save
コマンドを実行すると「/opt/voltdb/voltdbroot/snapshots/MANUAL*」のファイルが生成されます。
voltdb startコマンドで起動すると、自動でスナップショットから復元されます。
# voltadmin save
-- Snapshot Save Results --
HOST_ID HOSTNAME TABLE RESULT ERR_MSG
------- ----------- --------- ------- -------
1 voltserver2 TEST_DATA SUCCESS
3 voltserver3 SUCCESS
1 voltserver2 SUCCESS
0 voltserver1 TEST_DATA SUCCESS
1 voltserver2 SUCCESS
0 voltserver1 SUCCESS
1 voltserver2 SUCCESS
0 voltserver1 SUCCESS
1 voltserver2 SUCCESS
0 voltserver1 SUCCESS
0 voltserver1 SUCCESS
3 voltserver3 TEST_DATA SUCCESS
0 voltserver1 SUCCESS
3 voltserver3 SUCCESS
1 voltserver2 SUCCESS
3 voltserver3 SUCCESS
1 voltserver2 SUCCESS
3 voltserver3 SUCCESS
1 voltserver2 SUCCESS
3 voltserver3 SUCCESS
0 voltserver1 SUCCESS
3 voltserver3 SUCCESS
0 voltserver1 SUCCESS
3 voltserver3 SUCCESS
クラスタ停止
voltadmin shutdown
クラスタを停止させるとメモリ上のデータは全て消えてしまいます。
そのため、あらかじめスナップショットを取得するか、「--save」オプションをつけて停止時にスナップショットを作成します。
voltadmin shutdown --save
--blocking: クライアントからのトランザクション処理をブロックする。
# voltadmin shutdown
INFO: Cluster shutdown in progress.
INFO: Preparing for shutdown...
INFO: The cluster is paused prior to shutdown.
INFO: Writing out all queued export data...
INFO: Completing outstanding client transactions...
INFO: Outstanding transactions=0, Outstanding request bytes=0, Outstanding response messages=0
INFO: Completing outstanding importer requests...
INFO: Completing outstanding exporter transactions...
INFO: The cluster shutdown process has stopped. The cluster is still in a paused state.
ERROR: Unexpected errors to collect statistics for TABLE: Connection broken.
"voltadmin shutdown --save"は以下とほぼ同様の動作になります。
$ voltadmin pause --wait
$ voltadmin save --blocking ./ mydb
$ voltadmin shutdown
クラスタを管理モードに変更
クラスタを管理モードに変更するとクライアントからのトランザクション処理を実行せず、エラーを返します。管理ポートからのトランザクション処理は実行します。
voltadmin pause
# voltadmin pause
INFO: The cluster is paused.
クラスタを管理モードを終了
voltadmin resume
# voltadmin resume
INFO: The cluster has resumed.
ストアドプロシージャの操作
ストアドプロシージャをロードする
load classes [ストアドプロシージャJarファイル]
$ sqlcmd
1> load classes XXX.jar;
ストアドプロシージャを削除する
DROP PROCEDURE [ストアドプロシージャ名]
$ sqlcmd
1> DROP PROCEDURE XXXX;
ストアドプロシージャを表示する
show classes
$ sqlcmd
show classes;
--- Active Procedure Classes ---------------------------------
test.GetData
test.InsertData
ストアドプロシージャを実行する
exec GetData [ストアドプロシージャ名] [プロシージャの引数]...
$ sqlcmd
1> exec GetData aaa;
DATA
-----
2
ストアドプロシージャ一覧を表示する
list procedures
$ sqlcmd
1> list procedures;
~省略~
--- User Procedures ------------------------------------------
GetData varchar
InsertData varchar, integer
~省略~
ストアドプロシージャの実行計画を表示する
explainproc [ストアドプロシージャ名]
# echo "explainproc TEST_DATA.insert" | sqlcmd
explainproc TEST_DATA.insert;
STATEMENT_NAME SQL_STATEMENT EXECUTION_PLAN
--------------- ------------------------------- -------------------------------
sql0 INSERT INTO TEST_DATA VALUES (?, ?); INSERT into "TEST_DATA"
MATERIALIZE TUPLE from parameters and/or literals
スキーマをロードする
DDLをスキーマファイル(例ではmyschema.sql)に書いて、以下のコマンドを実行する。
$ sqlcmd < myschema.sql
もしくは以下でも同じ結果になる。
$ sqlcmd
1> file myschema.sql;
スキーマファイルは以下のようにDDLを記載する。
サポートしているDDLは、Appendix A. Supported SQL DDL Statementsを参照。
CREATE TABLE Customer (
CustomerID INTEGER UNIQUE NOT NULL,
FirstName VARCHAR(15),
LastName VARCHAR (15),
PRIMARY KEY(CustomerID)
);
sqlcmdユーティリティ
sqlcmdは以下の2つの実行方法がある。
$ sqlcmd
1> list tables;
もしくは
$ echo "list tables" | sqlcmd
テーブル一覧を表示する
list tables
$ sqlcmd
1> list tables;
--- User Tables ----------------------------------------------
KEISOKU_DATA
TEST_DATA
もしくは
$ echo "list tables" | sqlcmd
テーブルの定義を表示する
describe [テーブル名]
# echo "describe test_data" | sqlcmd
COLUMN |DATATYPE |SIZE |NULLABLE |REMARKS
------------------------------------------------------------------
NAME |VARCHAR | 50|NOT NULL |PARTITION_COLUMN
DATA |SMALLINT | 2| |
------------------------------------------------------------------
Type: TABLE, Primary Key (NAME)
CPU負荷等の各種情報を表示する。
CPU負荷等の各種情報を表示する。
表示できる情報は以下を参照。
https://docs.voltdb.com/UsingVoltDB/sysprocstatistics.php
例)CPU負荷の場合
# echo "exec @Statistics CPU 0" | sqlcmd
exec @Statistics CPU 0;
TIMESTAMP HOST_ID HOSTNAME PERCENT_USED
-------------- -------- ------------ -------------
1538900630738 1 voltserver3 8
1538900630739 0 voltserver1 10
1538900630739 3 voltserver2 7
CPU負荷以外の代表的な情報の表示
# echo "exec @Statistics LATENCY 0" | sqlcmd
exec @Statistics LATENCY 0;
TIMESTAMP HOST_ID HOSTNAME INTERVAL COUNT TPS P50 P95 P99 P99.9 P99.99 P99.999 MAX
-------------- -------- ------------ --------- ------ ---- ---- ---- ---- ------ ------- -------- ----
1538900704543 1 voltserver3 5000 0 0 0 0 0 0 0 0 0
1538900704509 0 voltserver1 5000 0 0 0 0 0 0 0 0 0
1538900704457 3 voltserver2 5000 0 0 0 0 0 0 0 0 0
# echo "exec @Statistics liveclients 0" | sqlcmd
exec @Statistics liveclients 0;
TIMESTAMP HOST_ID HOSTNAME CONNECTION_ID CLIENT_HOSTNAME ADMIN OUTSTANDING_REQUEST_BYTES OUTSTANDING_RESPONSE_MESSAGES OUTSTANDING_TRANSACTIONS
-------------- -------- ------------ -------------- ---------------- ------ -------------------------- ------------------------------ -------------------------
1538900743656 1 voltserver3 13 voltserver3 0 0 0 0
1538900743657 3 voltserver2 3 voltserver2 0 0 0 0
# echo "exec @Statistics MEMORY 0" | sqlcmd
exec @Statistics MEMORY 0;
TIMESTAMP HOST_ID HOSTNAME RSS JAVAUSED JAVAUNUSED TUPLEDATA TUPLEALLOCATED INDEXMEMORY STRINGMEMORY TUPLECOUNT POOLEDMEMORY PHYSICALMEMORY JAVAMAXHEAP
-------------- -------- ------------ ------- --------- ----------- ---------- --------------- ------------ ------------- ----------- ------------- --------------- ------------
1538900787190 1 voltserver3 439160 85051 21736 0 32768 1404 0 3 106874 2915328 2088640
1538900787190 3 voltserver2 438820 83183 20216 0 32768 936 0 2 103802 2915328 2088640
1538900787190 0 voltserver1 517712 108413 46366 0 32768 1404 0 3 106874 2915328 3137216
# echo "exec @Statistics PARTITIONCOUNT 0" | sqlcmd
exec @Statistics PARTITIONCOUNT 0;
TIMESTAMP HOST_ID HOSTNAME PARTITION_COUNT
-------------- -------- ------------ ----------------
1538900817392 1 voltserver3 12
# echo "exec @Statistics TABLE 0" | sqlcmd
exec @Statistics TABLE 0;
TIMESTAMP HOST_ID HOSTNAME SITE_ID PARTITION_ID TABLE_NAME TABLE_TYPE TUPLE_COUNT TUPLE_ALLOCATED_MEMORY TUPLE_DATA_MEMORY STRING_DATA_MEMORY TUPLE_LIMIT PERCENT_FULL
-------------- -------- ------------ -------- ------------- ----------------- ---------------- ------------ ----------------------- ------------------ ------------------- ------------ -------------
1538900871653 1 voltserver3 1 1 KEISOKU_DATA PersistentTable 0 2048 0 0 NULL 0
1538900871653 1 voltserver3 1 1 TEST_DATA PersistentTable 1 2048 0 0 NULL 0
~省略~
# echo "exec @Statistics SNAPSHOTSTATUS 0" | sqlcmd
exec @Statistics SNAPSHOTSTATUS 0;
TIMESTAMP HOST_ID HOSTNAME TABLE PATH FILENAME NONCE TXNID START_TIME END_TIME SIZE DURATION THROUGHPUT RESULT TYPE
-------------- -------- ------------ ------------- ------------------------------- ------------------------------- -------------------- ----------------- -------------- -------------- ----- --------- ---------------------- -------- -----
1538900933740 1 voltserver3 KEISOKU_DATA /opt/voltdb-community-8.2/voltdbroot/snapshots MANUAL1538900930633-KEISOKU_DATA-host_1.vpt MANUAL1538900930633 3619631923298303 1538900930697 1538900931151 809 0 0.0032895462103352145 SUCCESS AUTO
1538900933740 1 voltserver3 TEST_DATA /opt/voltdb-community-8.2/voltdbroot/snapshots MANUAL1538900930633-TEST_DATA-host_1.vpt MANUAL1538900930633 3619631923298303 1538900930697 1538900931151 757 0 0.0032895462103352145 SUCCESS AUTO
1538900933742 0 voltserver1 KEISOKU_DATA /opt/voltdb-community-8.2/voltdbroot/snapshots MANUAL1538900930633-KEISOKU_DATA-host_0.vpt MANUAL1538900930633 3619631923298303 1538900930691 1538900930984 811 0 0.005110132002586391 SUCCESS AUTO
1538900933742 0 voltserver1 TEST_DATA /opt/voltdb-community-8.2/voltdbroot/snapshots MANUAL1538900930633-TEST_DATA-host_0.vpt MANUAL1538900930633 3619631923298303 1538900930691 1538900930984 759 0 0.005110132002586391 SUCCESS AUTO
1538900933742 3 voltserver2 KEISOKU_DATA /opt/voltdb-community-8.2/voltdbroot/snapshots MANUAL1538900930633-KEISOKU_DATA-host_3.vpt MANUAL1538900930633 3619631923298303 1538900930700 1538900931119 811 0 0.0035438446554762085 SUCCESS AUTO
1538900933742 3 voltserver2 TEST_DATA /opt/voltdb-community-8.2/voltdbroot/snapshots MANUAL1538900930633-TEST_DATA-host_3.vpt MANUAL1538900930633 3619631923298303 1538900930700 1538900931119 746 0 0.0035438446554762085 SUCCESS AUTO
snapshotの情報取得
- voltadmin show snapshots
最大10個の取得済みのsnapshotの情報を表示します。saveコマンドで取得したsnapshotが成功したかどうかを確認することができます。
# voltadmin show snapshots
-- Snapshot Status --
TIMESTAMP HOST_ID HOSTNAME TABLE PATH FILENAME NONCE TXNID START_TIME END_TIME SIZE DURATION THROUGHPUT RESULT TYPE
------------- ------- ----------- ------------ ---- ---------------------------------------------- ---------------------- ---------------- ------------- ------------- ---- -------- ---------------- ------- ------
1561182384387 0 voltserver1 KEISOKU_DATA Rejoin_3_1561171876679-KEISOKU_DATA-host_0.vpt Rejoin_3_1561171876679 3619631923232767 1561171876855 1561171877246 0 0 0.00431470553893 SUCCESS MANUAL
1561182384387 0 voltserver1 TEST_DATA Rejoin_3_1561171876679-TEST_DATA-host_0.vpt Rejoin_3_1561171876679 3619631923232767 1561171876855 1561171877246 1769 0 0.00431470553893 SUCCESS MANUAL
1561182384388 1 voltserver2 KEISOKU_DATA Rejoin_3_1561171876679-KEISOKU_DATA-host_1.vpt Rejoin_3_1561171876679 3619631923232767 1561171876843 1561171877275 0 0 0.00390520802251 SUCCESS MANUAL
1561182384388 1 voltserver2 TEST_DATA Rejoin_3_1561171876679-TEST_DATA-host_1.vpt Rejoin_3_1561171876679 3619631923232767 1561171876843 1561171877275 1769 0 0.00390520802251 SUCCESS MANUAL
DBの各種情報を表示する
@SystemInformationの後にoverviewかdeploymentを指定する。
# echo "exec @SystemInformation overview" | sqlcmd
exec @SystemInformation overview;
HOST_ID KEY VALUE
-------- ------------------------- -------------------------------
0 IPADDRESS 192.168.10.121
0 HOSTNAME voltserver1
0 CLIENTINTERFACE
0 CLIENTPORT 21212
0 ADMININTERFACE
0 ADMINPORT 21211
0 HTTPINTERFACE
0 HTTPPORT 8080
0 INTERNALINTERFACE
0 INTERNALPORT 3021
0 ZKINTERFACE 127.0.0.1
0 ZKPORT 7181
0 DRINTERFACE
0 DRPORT 0
0 PUBLICINTERFACE
0 BUILDSTRING 8.2_voltdb-8.2-0-g6115baf-local
0 VERSION 8.2
0 CATALOG /opt/voltdb/voltdbroot/config/staged-catalog.jar
0 DEPLOYMENT /opt/voltdb/voltdbroot/config/deployment.xml
0 CLUSTERSTATE RUNNING
0 INITIALIZED true
0 REPLICATIONROLE NONE
0 CATALOGCRC 3685888977
~省略~
# echo "exec @SystemInformation deployment" | sqlcmd
exec @SystemInformation deployment;
PROPERTY VALUE
------------------- -------------------------------
voltdbroot /opt/voltdb-community-8.2/voltdbroot
hostcount 3
kfactor 1
sitesperhost 8
httpport 8080
httpenabled true
jsonenabled true
snapshotenabled false
export false
partitiondetection true
heartbeattimeout 90
adminport 21211
commandlogenabled false
users
elasticduration 50
elasticthroughput 2
snapshotpriority 6
temptablesmaxsize 100
querytimeout 10000
(Returned 19 rows in 0.03s)