本小节将展示CockroachDB根据集群节点的状态进行数据的均衡分布。

该示例将创建一个包括3个节点的集群,利用预先使用Go语言编写的block_writer程序不停地往集群当中写入数据,查看集群中数据分布情况。执行block_writer程序,用户需要事先配置好Go语言的编程交互环境。

Step 1: 启动3个节点

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

# In a new terminal, start node 1:
cockroach start --insecure --store=scale-node1 --host=localhost --port=26257 --http-port=8080 --join=localhost:26257,localhost:26258,localhost:26259

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

# In a new terminal, start node 2:
cockroach start --insecure --store=scale-node2 --host=localhost --port=26258 --http-port=8081 --join=localhost:26257,localhost:26258,localhost:26259

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

# In a new terminal, start node 3:
cockroach start --insecure --store=scale-node3 --host=localhost --port=26259 --http-port=8082 --join=localhost:26257,localhost:26258,localhost:26259

Step 2: 初始化集群

cockroach init --insecure --host=localhost --port=26257

Step 3: 验证集群的可用性

连接任意一个节点,尝试SQL查询: 启动交互式shell:

cockroach sql --insecure --port=26257

查询:

SHOW DATABASES;
+--------------------+
|      Database      |
+--------------------+
| system             |
+--------------------+
(1 row)

Step 4: 调整Range大小

在CockroachDB当中,我们使用复制区域设置冗余副本数和调整副本分布状况,其中,数据以Range的形式组织。CockroachDB默认进行3副本数据冗余,每个Range大小为 67108864 bytes(64MB),我们需要减少Range的大小以便实验观察。

echo -e "range_min_bytes: 1\nrange_max_bytes: 262144" | cockroach zone set .default --insecure -f -

range_min_bytes: 1
range_max_bytes: 262144
gc:
  ttlseconds: 86400
num_replicas: 3
constraints: []

Step 5: 下载、执行block_writer程序

block_writer能够模拟多个客户端向集群节点写入数据。

下载程序:

go get github.com/cockroachdb/examples-go/block_writer

执行程序:

block_writer -duration 1m

 1s:  776.7/sec   776.7/sec
 2s:  696.3/sec   736.7/sec
 3s:  659.9/sec   711.1/sec
 4s:  557.4/sec   672.6/sec
 5s:  485.0/sec   635.1/sec
 6s:  563.5/sec   623.2/sec
 7s:  725.2/sec   637.7/sec
 8s:  779.2/sec   655.4/sec
 9s:  859.0/sec   678.0/sec
10s:  960.4/sec   706.1/sec
          ......

Step 6: 查看数据分布情况

登陆Admin界面(http://localhost:8080),查看数据增长情况 图片

Step 7: 添加2个新的节点

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

# In a new terminal, start node 4:
cockroach start --insecure --store=scale-node4 --host=localhost --port=26260 --http-port=8083 --join=localhost:26257,localhost:26258,localhost:26259

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

# In a new terminal, start node 5:
cockroach start --insecure --store=scale-node5 --host=localhost --port=26261 --http-port=8084 --join=localhost:26257,localhost:26258,localhost:26259

Step 8: 再次查看数据分布情况

登陆Admin界面。

图片

可以看见集群中数据从3个节点自动均衡分布到当前的5个节点上。

Step 9: 停止集群

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

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

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