通过本小节你将大致了解CockroachDB如何生成冗余数据,并分发到集群中的节点。

Step 1: 启动节点1

cockroach start --insecure --store=repdemo-node1 --host=localhost

Step 2: 写数据

使用cockroach gen命令写数据:

cockroach gen example-data intro | cockroach sql --insecure

CREATE DATABASE
SET
DROP TABLE
CREATE TABLE
INSERT 1
INSERT 1
INSERT 1
INSERT 1
...

进入交互式shell:

cockroach sql --insecure

执行查询:

SHOW DATABASES;
+--------------------+
|      Database      |
+--------------------+
| intro              |
| system             |
+--------------------+
(2 rows)
SHOW TABLES FROM intro;
+---------+
|  Table  |
+---------+
| mytable |
+---------+
(1 row)
SELECT * FROM intro.mytable WHERE (l % 2) = 0;
+----+-----------------------------------------------------+
| l  |                          v                          |
+----+-----------------------------------------------------+
|  0 | !__aaawwmqmqmwwwaas,,_        .__aaawwwmqmqmwwaaa,, |
|  2 | !"VT?!"""^~~^"""??T$Wmqaa,_auqmWBT?!"""^~~^^""??YV^ |
|  4 | !                    "?##mW##?"-                    |
|  6 | !  C O N G R A T S  _am#Z??A#ma,           Y        |
|  8 | !                 _ummY"    "9#ma,       A          |
| 10 | !                vm#Z(        )Xmms    Y            |
| 12 | !              .j####mmm#####mm#m##6.               |
| 14 | !   W O W !    jmm###mm######m#mmm##6               |
| 16 | !             ]#me*Xm#m#mm##m#m##SX##c              |
| 18 | !             dm#||+*$##m#mm#m#Svvn##m              |
| 20 | !            :mmE=|+||S##m##m#1nvnnX##;     A       |
| 22 | !            :m#h+|+++=Xmm#m#1nvnnvdmm;     M       |
| 24 | ! Y           $#m>+|+|||##m#1nvnnnnmm#      A       |
| 26 | !  O          ]##z+|+|+|3#mEnnnnvnd##f      Z       |
| 28 | !   U  D       4##c|+|+|]m#kvnvnno##P       E       |
| 30 | !       I       4#ma+|++]mmhvnnvq##P`       !       |
| 32 | !        D I     ?$#q%+|dmmmvnnm##!                 |
| 34 | !           T     -4##wu#mm#pw##7'                  |
| 36 | !                   -?$##m####Y'                    |
| 38 | !             !!       "Y##Y"-                      |
| 40 | !                                                   |
+----+-----------------------------------------------------+
(21 rows)

Step 3: 添加2个新的节点

开启新终端,执行如下命令添加节点2:

cockroach start --insecure --store=repdemo-node2 --host=localhost --port=26258 --http-port=8081 --join=localhost:26257

开启新终端,执行如下命令添加节点3:

cockroach start --insecure --store=repdemo-node3 --host=localhost --port=26259 --http-port=8082 --join=localhost:26257

Step 4: 查询新节点添加后数据冗余情况

登陆Admin界面(URL:http://localhost:8080)查看节点信息: 图片 可以看到数据从节点1复制到节点2和节点3,默认副本数为3

Step 5: 配置副本数

将副本数增加到5份:

echo 'num_replicas: 5' | cockroach zone set .default --insecure -f -

range_min_bytes: 1048576
range_max_bytes: 67108864
gc:
  ttlseconds: 86400
num_replicas: 5
constraints: []

Step 6: 新增2个新的节点

开启新终端,执行如下命令添加节点4:

cockroach start --insecure --host=localhost --store=repdemo-node4 --port=26260 --http-port=8083 --join=localhost:26257

开启新终端,执行如下命令添加节点5:

cockroach start --insecure --host=localhost --store=repdemo-node5 --port=26261 --http-port=8084 --join=localhost:26257

Step 7: 查看新节点冗余情况

登陆Admin界面(http://localhost:8080)查看节点信息: 图片 可以看到数据从节点1、节点2、节点3复制到节点4和节点5,副本数为5

Step 8: 关闭集群

在各个终端使用Ctrl+C终止程序。 如不再需要测试用的集群,可使用如下指令删除:

rm -rf repdemo-node1 repdemo-node2 repdemo-node3 repdemo-node4 repdemo-node5

NOTE: 对于最后两个节点,可能需要花大约1min左右的时间去终止程序。原因是最后只剩下2个节点在集群当中的时候,由于已经丧失了集群当中冗余副本的绝大多数(此情况下是3/5),集群不再允许操作。如需加速终止程序的进程,可以尝试多次Ctrl+C操作。