(メモ) CockroachDB のローカルクラスタを起動するコマンド
CockroachDB のローカルクラスタを構築するコマンドめも。
Insecure クラスタ (Docker 使用)
Docker Network 作成
$ sudo docker network create cockroach-net
ノード (コンテナ) 起動
$ sudo docker run -d \ --name=cockroach-1 \ --hostname=cockroach-1 \ --net=cockroach-net \ -p 26257:26257 -p 8081:8080 \ -v "${PWD}/cockroach-cluster/cockroach-data/cockroach-1:/cockroach/cockroach-data" \ cockroachdb/cockroach:v19.2.5 start \ --insecure \ --join=cockroach-1,cockroach-2,cockroach-3
$ sudo docker run -d \ --name=cockroach-2 \ --hostname=cockroach-2 \ --net=cockroach-net \ -p 8082:8080 \ -v "${PWD}/cockroach-cluster/cockroach-data/cockroach-2:/cockroach/cockroach-data" \ cockroachdb/cockroach:v19.2.5 start \ --insecure \ --join=cockroach-1,cockroach-2,cockroach-3
$ sudo docker run -d \ --name=cockroach-3 \ --hostname=cockroach-3 \ --net=cockroach-net \ -p 8083:8080 \ -v "${PWD}/cockroach-cluster/cockroach-data/cockroach-3:/cockroach/cockroach-data" \ cockroachdb/cockroach:v19.2.5 start \ --insecure \ --join=cockroach-1,cockroach-2,cockroach-3
$ sudo docker run -d \ --name=cockroach-4 \ --hostname=cockroach-4 \ --net=cockroach-net \ -p 8084:8080 \ -v "${PWD}/cockroach-cluster/cockroach-data/cockroach-4:/cockroach/cockroach-data" \ cockroachdb/cockroach:v19.2.5 start \ --insecure \ --join=cockroach-1,cockroach-2,cockroach-3
$ sudo docker run -d \ --name=cockroach-5 \ --hostname=cockroach-5 \ --net=cockroach-net \ -p 8085:8080 \ -v "${PWD}/cockroach-cluster/cockroach-data/cockroach-5:/cockroach/cockroach-data" \ cockroachdb/cockroach:v19.2.5 start \ --insecure \ --join=cockroach-1,cockroach-2,cockroach-3
$ sudo docker run -d \ --name=cockroach-6 \ --hostname=cockroach-6 \ --net=cockroach-net \ -p 8086:8080 \ -v "${PWD}/cockroach-cluster/cockroach-data/cockroach-6:/cockroach/cockroach-data" \ cockroachdb/cockroach:v19.2.5 start \ --insecure \ --join=cockroach-1,cockroach-2,cockroach-3
$ sudo docker run -d \ --name=cockroach-7 \ --hostname=cockroach-7 \ --net=cockroach-net \ -p 8087:8080 \ -v "${PWD}/cockroach-cluster/cockroach-data/cockroach-7:/cockroach/cockroach-data" \ cockroachdb/cockroach:v19.2.5 start \ --insecure \ --join=cockroach-1,cockroach-2,cockroach-3
$ sudo docker run -d \ --name=cockroach-8 \ --hostname=cockroach-8 \ --net=cockroach-net \ -p 8088:8080 \ -v "${PWD}/cockroach-cluster/cockroach-data/cockroach-8:/cockroach/cockroach-data" \ cockroachdb/cockroach:v19.2.5 start \ --insecure \ --join=cockroach-1,cockroach-2,cockroach-3
$ sudo docker run -d \ --name=cockroach-9 \ --hostname=cockroach-9 \ --net=cockroach-net \ -p 8089:8080 \ -v "${PWD}/cockroach-cluster/cockroach-data/cockroach-9:/cockroach/cockroach-data" \ cockroachdb/cockroach:v19.2.5 start \ --insecure \ --join=cockroach-1,cockroach-2,cockroach-3
DB 初期化
$ sudo docker exec -it cockroach-1 ./cockroach init --host=cockroach-1 --insecure
DB アクセス (Built-in SQL Shell)
$ sudo docker exec -it cockroach-1 ./cockroach sql --host=cockroach-1 --insecure
Admin UI (Web UI) アクセス
http://localhost:8081/
Insecure クラスタ削除
$ sudo docker rm $(sudo docker kill cockroach-1 cockroach-2 cockroach-3 cockroach-4 cockroach-5 cockroach-6 cockroach-7 cockroach-8 cockroach-9)
$ sudo docker network rm cockroach-net
$ sudo rm -rf ${PWD}/cockroach-cluster/
Secure クラスタ (Docker 使用)
証明書作成
$ mkdir -p ${PWD}/cockroach-cluster/cockroach-certs
$ mkdir -p ${PWD}/cockroach-cluster/cockroach-certs/certs
$ mkdir -p ${PWD}/cockroach-cluster/cockroach-certs/my-safe-directory
$ for i in `seq 1 9`; do mkdir -p ${PWD}/cockroach-cluster/cockroach-certs/cockroach-${i}; done
$ mkdir -p ${PWD}/cockroach-cluster/cockroach-certs/client-root
$ sudo docker run -it --rm \ --name cockroach-tmp \ --hostname cockroach-tmp \ -v "${PWD}/cockroach-cluster/cockroach-certs:/cockroach/cockroach-certs" \ cockroachdb/cockroach:v19.2.5 \ cert create-ca \ --certs-dir=/cockroach/cockroach-certs/certs \ --ca-key=/cockroach/cockroach-certs/my-safe-directory/ca.key
$ sudo docker run -it --rm \ --name cockroach-tmp \ --hostname cockroach-tmp \ -v "${PWD}/cockroach-cluster/cockroach-certs:/cockroach/cockroach-certs" \ cockroachdb/cockroach:v19.2.5 \ cert create-node \ localhost \ cockroach-1 \ cockroach-2 \ cockroach-3 \ cockroach-4 \ cockroach-5 \ cockroach-6 \ cockroach-7 \ cockroach-8 \ cockroach-9 \ --certs-dir=/cockroach/cockroach-certs/certs \ --ca-key=/cockroach/cockroach-certs/my-safe-directory/ca.key
$ sudo docker run -it --rm \ --name cockroach-tmp \ --hostname cockroach-tmp \ -v "${PWD}/cockroach-cluster/cockroach-certs:/cockroach/cockroach-certs" \ cockroachdb/cockroach:v19.2.5 \ cert create-client \ root \ --certs-dir=/cockroach/cockroach-certs/certs \ --ca-key=/cockroach/cockroach-certs/my-safe-directory/ca.key
$ for i in `seq 1 9`; do sudo cp ${PWD}/cockroach-cluster/cockroach-certs/certs/* ${PWD}/cockroach-cluster/cockroach-certs/cockroach-${i}/; done
$ sudo cp ${PWD}/cockroach-cluster/cockroach-certs/certs/* ${PWD}/cockroach-cluster/cockroach-certs/client-root/
Docker Network 作成
$ sudo docker network create cockroach-net
ノード (コンテナ) 起動
$ sudo docker run -d \ --name=cockroach-1 \ --hostname=cockroach-1 \ --net=cockroach-net \ -p 26257:26257 -p 8081:8080 \ -v "${PWD}/cockroach-cluster/cockroach-data/cockroach-1:/cockroach/cockroach-data" \ -v "${PWD}/cockroach-cluster/cockroach-certs/cockroach-1:/cockroach/certs" \ -v "${PWD}/cockroach-cluster/cockroach-certs/client-root:/cockroach/client-certs" \ cockroachdb/cockroach:v19.2.5 start \ --certs-dir=certs \ --join=cockroach-1,cockroach-2,cockroach-3
$ sudo docker run -d \ --name=cockroach-2 \ --hostname=cockroach-2 \ --net=cockroach-net \ -p 8082:8080 \ -v "${PWD}/cockroach-cluster/cockroach-data/cockroach-2:/cockroach/cockroach-data" \ -v "${PWD}/cockroach-cluster/cockroach-certs/cockroach-2:/cockroach/certs" \ -v "${PWD}/cockroach-cluster/cockroach-certs/client-root:/cockroach/client-certs" \ cockroachdb/cockroach:v19.2.5 start \ --certs-dir=certs \ --join=cockroach-1,cockroach-2,cockroach-3
$ sudo docker run -d \ --name=cockroach-3 \ --hostname=cockroach-3 \ --net=cockroach-net \ -p 8083:8080 \ -v "${PWD}/cockroach-cluster/cockroach-data/cockroach-3:/cockroach/cockroach-data" \ -v "${PWD}/cockroach-cluster/cockroach-certs/cockroach-3:/cockroach/certs" \ -v "${PWD}/cockroach-cluster/cockroach-certs/client-root:/cockroach/client-certs" \ cockroachdb/cockroach:v19.2.5 start \ --certs-dir=certs \ --join=cockroach-1,cockroach-2,cockroach-3
$ sudo docker run -d \ --name=cockroach-4 \ --hostname=cockroach-4 \ --net=cockroach-net \ -p 8084:8080 \ -v "${PWD}/cockroach-cluster/cockroach-data/cockroach-4:/cockroach/cockroach-data" \ -v "${PWD}/cockroach-cluster/cockroach-certs/cockroach-4:/cockroach/certs" \ -v "${PWD}/cockroach-cluster/cockroach-certs/client-root:/cockroach/client-certs" \ cockroachdb/cockroach:v19.2.5 start \ --certs-dir=certs \ --join=cockroach-1,cockroach-2,cockroach-3
$ sudo docker run -d \ --name=cockroach-5 \ --hostname=cockroach-5 \ --net=cockroach-net \ -p 8085:8080 \ -v "${PWD}/cockroach-cluster/cockroach-data/cockroach-5:/cockroach/cockroach-data" \ -v "${PWD}/cockroach-cluster/cockroach-certs/cockroach-5:/cockroach/certs" \ -v "${PWD}/cockroach-cluster/cockroach-certs/client-root:/cockroach/client-certs" \ cockroachdb/cockroach:v19.2.5 start \ --certs-dir=certs \ --join=cockroach-1,cockroach-2,cockroach-3
$ sudo docker run -d \ --name=cockroach-6 \ --hostname=cockroach-6 \ --net=cockroach-net \ -p 8086:8080 \ -v "${PWD}/cockroach-cluster/cockroach-data/cockroach-6:/cockroach/cockroach-data" \ -v "${PWD}/cockroach-cluster/cockroach-certs/cockroach-6:/cockroach/certs" \ -v "${PWD}/cockroach-cluster/cockroach-certs/client-root:/cockroach/client-certs" \ cockroachdb/cockroach:v19.2.5 start \ --certs-dir=certs \ --join=cockroach-1,cockroach-2,cockroach-3
$ sudo docker run -d \ --name=cockroach-7 \ --hostname=cockroach-7 \ --net=cockroach-net \ -p 8087:8080 \ -v "${PWD}/cockroach-cluster/cockroach-data/cockroach-7:/cockroach/cockroach-data" \ -v "${PWD}/cockroach-cluster/cockroach-certs/cockroach-7:/cockroach/certs" \ -v "${PWD}/cockroach-cluster/cockroach-certs/client-root:/cockroach/client-certs" \ cockroachdb/cockroach:v19.2.5 start \ --certs-dir=certs \ --join=cockroach-1,cockroach-2,cockroach-3
$ sudo docker run -d \ --name=cockroach-8 \ --hostname=cockroach-8 \ --net=cockroach-net \ -p 8088:8080 \ -v "${PWD}/cockroach-cluster/cockroach-data/cockroach-8:/cockroach/cockroach-data" \ -v "${PWD}/cockroach-cluster/cockroach-certs/cockroach-8:/cockroach/certs" \ -v "${PWD}/cockroach-cluster/cockroach-certs/client-root:/cockroach/client-certs" \ cockroachdb/cockroach:v19.2.5 start \ --certs-dir=certs \ --join=cockroach-1,cockroach-2,cockroach-3
$ sudo docker run -d \ --name=cockroach-9 \ --hostname=cockroach-9 \ --net=cockroach-net \ -p 8089:8080 \ -v "${PWD}/cockroach-cluster/cockroach-data/cockroach-9:/cockroach/cockroach-data" \ -v "${PWD}/cockroach-cluster/cockroach-certs/cockroach-9:/cockroach/certs" \ -v "${PWD}/cockroach-cluster/cockroach-certs/client-root:/cockroach/client-certs" \ cockroachdb/cockroach:v19.2.5 start \ --certs-dir=certs \ --join=cockroach-1,cockroach-2,cockroach-3
DB 初期化
$ sudo docker exec -it cockroach-1 ./cockroach init --host=cockroach-1 --certs-dir=client-certs
DB アクセス (Built-in SQL Shell)
$ sudo docker exec -it cockroach-1 ./cockroach sql --host=cockroach-1 --certs-dir=client-certs
Admin UI (Web UI) アクセス
$ sudo docker exec -it cockroach-1 ./cockroach sql --host=cockroach-1 --certs-dir=client-certs -e "CREATE USER cockroach PASSWORD 'cockroach'"
https://localhost:8081/
Secure クラスタ削除
$ sudo docker rm $(sudo docker kill cockroach-1 cockroach-2 cockroach-3 cockroach-4 cockroach-5 cockroach-6 cockroach-7 cockroach-8 cockroach-9)
$ sudo docker network rm cockroach-net
$ sudo rm -rf ${PWD}/cockroach-cluster/
小ネタ
cockroach-1 起動 -> cockroach-2 起動 -> cockroach-3 起動 -> ... -> cockroach-N 起動 -> クラスタ初期化 (cockroach init
) の順で実行すると、以下のように "ノード名の数字 (cockroach-N)" と "CockroachDB 内部で各ノードに割り当てられる ID" が バラバラ になる (一致しない)。
id | address | sql_address | build | started_at | updated_at | locality | is_available | is_live +----+-------------------+-------------------+---------+----------------------------------+----------------------------------+----------+--------------+---------+ 1 | cockroach-1:26257 | cockroach-1:26257 | v19.2.5 | 2020-03-12 11:30:57.023256+00:00 | 2020-03-12 11:31:10.625955+00:00 | | true | true 2 | cockroach-8:26257 | cockroach-8:26257 | v19.2.5 | 2020-03-12 11:30:57.342416+00:00 | 2020-03-12 11:31:10.973333+00:00 | | true | true 3 | cockroach-9:26257 | cockroach-9:26257 | v19.2.5 | 2020-03-12 11:30:57.612006+00:00 | 2020-03-12 11:31:11.206786+00:00 | | true | true 4 | cockroach-7:26257 | cockroach-7:26257 | v19.2.5 | 2020-03-12 11:30:57.778118+00:00 | 2020-03-12 11:31:11.400892+00:00 | | true | true 5 | cockroach-6:26257 | cockroach-6:26257 | v19.2.5 | 2020-03-12 11:30:57.875776+00:00 | 2020-03-12 11:31:11.509177+00:00 | | true | true 6 | cockroach-3:26257 | cockroach-3:26257 | v19.2.5 | 2020-03-12 11:30:57.908572+00:00 | 2020-03-12 11:31:11.529298+00:00 | | true | true 7 | cockroach-2:26257 | cockroach-2:26257 | v19.2.5 | 2020-03-12 11:30:58.39514+00:00 | 2020-03-12 11:31:12.033717+00:00 | | true | true 8 | cockroach-4:26257 | cockroach-4:26257 | v19.2.5 | 2020-03-12 11:30:58.674961+00:00 | 2020-03-12 11:31:12.299762+00:00 | | true | true 9 | cockroach-5:26257 | cockroach-5:26257 | v19.2.5 | 2020-03-12 11:30:58.84338+00:00 | 2020-03-12 11:31:12.4652+00:00 | | true | true (9 rows)
cockroach-1 起動 -> クラスタ初期化 (cockroach init
) -> cockroach-2 起動 -> cockroach-3 起動 -> ... -> cockroach-N 起動 の順で実行すると、以下のように "ノード名の数字 (cockroach-N)" と "CockroachDB 内部で各ノードに割り当てられる ID" が 一致する 。
id | address | sql_address | build | started_at | updated_at | locality | is_available | is_live +----+-------------------+-------------------+---------+----------------------------------+----------------------------------+----------+--------------+---------+ 1 | cockroach-1:26257 | cockroach-1:26257 | v19.2.5 | 2020-03-12 12:04:19.949289+00:00 | 2020-03-12 12:06:39.498269+00:00 | | true | true 2 | cockroach-2:26257 | cockroach-2:26257 | v19.2.5 | 2020-03-12 12:05:25.179127+00:00 | 2020-03-12 12:06:41.736312+00:00 | | true | true 3 | cockroach-3:26257 | cockroach-3:26257 | v19.2.5 | 2020-03-12 12:05:32.196454+00:00 | 2020-03-12 12:06:39.756711+00:00 | | true | true 4 | cockroach-4:26257 | cockroach-4:26257 | v19.2.5 | 2020-03-12 12:05:45.115173+00:00 | 2020-03-12 12:06:39.176477+00:00 | | true | true 5 | cockroach-5:26257 | cockroach-5:26257 | v19.2.5 | 2020-03-12 12:05:55.636434+00:00 | 2020-03-12 12:06:40.683675+00:00 | | true | true 6 | cockroach-6:26257 | cockroach-6:26257 | v19.2.5 | 2020-03-12 12:06:03.864341+00:00 | 2020-03-12 12:06:39.948482+00:00 | | true | true 7 | cockroach-7:26257 | cockroach-7:26257 | v19.2.5 | 2020-03-12 12:06:13.726423+00:00 | 2020-03-12 12:06:40.789314+00:00 | | true | true 8 | cockroach-8:26257 | cockroach-8:26257 | v19.2.5 | 2020-03-12 12:06:21.316927+00:00 | 2020-03-12 12:06:39.391539+00:00 | | true | true 9 | cockroach-9:26257 | cockroach-9:26257 | v19.2.5 | 2020-03-12 12:06:29.451055+00:00 | 2020-03-12 12:06:38.502739+00:00 | | true | true (9 rows)