在单机上构建 insecure 多节点CockroachDB集群
本文将向大家介绍如何在一台机器上(可以是物理机,也可以是一台虚拟机)创建insecure多节点CockroachDB集群(在示例中我们将创建一个具有3节点的CRDB数据库集群)。这种方式创建的集群非常适合大家学习CRDB使用。在本人后续的很多文章中所描述的示例,为了方便大家试验和运行将采用这种方式创建CRDB集群。
这里所说的不安全模式 (insecure) 是指集群的各节点之间以及client与集群节点之间的通讯不加密,而安全模式(secure)使用TLS证书对通信进行加密。在生产环境下建议创建secure多节点CockroachDB集群。对于在单机上创建secure多节点CockroachDB集群的方法,在后续的文章中介绍。
环境说明
一个虚拟机:8G Mem 、4 VCores
操作系统:CentOS 7.4
操作系统用户: crdb 用户组:newsql 该用户具有sudo权限(假设读者已经掌握在Linux上创建用户和组以及设置权限的方法,本文不进行描述)
CockroachDB版本:2.0.6 (目前最新的发布版本)
下面开始介绍具体的创建方法
1. 创建目录
我们需要在操作系统的文件系统中创建一个目录,用于存放CRDB使用的文件
$ sudo mkdir /data/crdb
$ sudo chown crdb:newsql -R /data/crdb
2. 安装CRDB
$ cd /tmp
$ wget https://binaries.cockroachdb.com/cockroach-v2.0.6.linux-amd64.tgz
$ tar xvfz cockroach-v2.0.6.linux-amd64.tgz
$ sudo mv cockroach-v2.0.6.linux-amd64/cockroach /usr/local/bin
$ rm -Rf cockroach-v2.0.6.linux-amd64
3. 启动第一个节点
使用cockroach start命令启动第一个节点:
$cockroach start --insecure --store="/data/crdb/node1" --host=0.0.0.0 --port=26257 --http-port=8080 --join=0.0.0.0:26257,0.0.0.0:26258,0.0.0.0:26259 &
执行上面的命令后,输出如下:
*
* WARNING: RUNNING IN INSECURE MODE!
*
* - Your cluster is open for any client that can access localhost.
* - Any user, even root, can log in without providing a password.
* - Any user, connecting as root, can read or write any data in your cluster.
* - There is no network encryption nor authentication, and thus no confidentiality.
*
* Check out how to secure your cluster: https://www.cockroachlabs.com/docs/stable/secure-a-cluster.html
*
命令参数说明:
参 数 |
描 述 |
--insecure |
指示cockroachdb数据库集群节点之间通讯不加密。 当crdb集群头一个节点使用--insecure参数启动时,那么后续在启动节点时或者使用cockroach命令执行操作时都要加上这个参数。 如果不带这个参数,cockroach命令将会查找安全证书以加密通讯。 |
--store |
指定本地目录,用于存储节点的数据和日志 |
--host |
指定节点的主机名或IP地址,这个地址用于节点间通讯或者客户端访问节点时使用。 |
--port |
指定节点的通讯端口,这个端口用于节点间通讯或者客户端访问节点时使用。 这个参数的缺省值是26257。 |
--http-port |
指定CockroachDB admin UI监听的端口。这个参数的缺省值是8080。 |
--join |
创建CockroachDB集群时,所有初始节点的地址和TCP端口。 在启动所有初始节点时,都需要加上这个参数,并且参数值应当相同。 |
|
|
注意:
可以执行cockroach start --help查看命令的参数描述,也可以执行cockroach --help查看查看所有的命令参数描述。
4. 启动另两个节点
使用cockroach start命令能够再启动多个节点,这些节点是第1个节点启动时--join参数中指定的初始节点(除第1个节点之外的节点)。
--启动第2个节点
$cockroach start --insecure --store="/data/crdb/node2" --host=0.0.0.0 --port=26258 --http-port=8081 --join=0.0.0.0:26257,0.0.0.0:26258,0.0.0.0:26259 &
--启动第3个节点
$cockroach start --insecure --store="/data/crdb/node3" --host=0.0.0.0 --port=26259 --http-port=8082 --join=0.0.0.0:26257,0.0.0.0:26258,0.0.0.0:26259 &
5. 初始化CockroachDB集群
在前面的步骤中,我们执行带有--jon参数的cockroach start只是启动了节点,但是这些节点还不能正常工作,需要执行初始化后CRDB集群才完成创建,对外正常工作。
(1) 执行cockroach init命令初始化集群
$ cockroach init --insecure
你将会看到输出的信息中如果出现如下信息,表示集群初始化成功:
Cluster successfully initialized
(2) 下面是初始化时3个节点显示的完整输出:
$ CockroachDB node starting at 2018-10-05 09:12:58.657491019 +0000 UTC (took 65.8s)
build: CCL v2.0.6 @ 2018/10/01 13:59:40 (go1.10)
admin: http://0.0.0.0:8080
sql: postgresql://root@0.0.0.0:26257?sslmode=disable
logs: /data/crdb/node1/logs
temp dir: /data/crdb/node1/cockroach-temp941783697
external I/O path: /data/crdb/node1/extern
store[0]: path=/data/crdb/node1
status: initialized new cluster
clusterID: c537a7bc-6fee-4c2a-bb1d-d7630b245247
nodeID: 1
CockroachDB node starting at 2018-10-05 09:12:59.137653974 +0000 UTC (took 35.1s)
build: CCL v2.0.6 @ 2018/10/01 13:59:40 (go1.10)
admin: http://0.0.0.0:8081
sql: postgresql://root@0.0.0.0:26258?sslmode=disable
logs: /data/crdb/node2/logs
temp dir: /data/crdb/node2/cockroach-temp477522607
external I/O path: /data/crdb/node2/extern
store[0]: path=/data/crdb/node2
status: initialized new node, joined pre-existing cluster
clusterID: c537a7bc-6fee-4c2a-bb1d-d7630b245247
nodeID: 2
CockroachDB node starting at 2018-10-05 09:13:00.756600674 +0000 UTC (took 18.5s)
build: CCL v2.0.6 @ 2018/10/01 13:59:40 (go1.10)
admin: http://0.0.0.0:8082
sql: postgresql://root@0.0.0.0:26259?sslmode=disable
logs: /data/crdb/node3/logs
temp dir: /data/crdb/node3/cockroach-temp004902255
external I/O path: /data/crdb/node3/extern
store[0]: path=/data/crdb/node3
status: initialized new node, joined pre-existing cluster
clusterID: c537a7bc-6fee-4c2a-bb1d-d7630b245247
nodeID: 3
下表是输出字段的描述:
字段 |
描述 |
build |
运行的CockroachDB版本号 |
admin |
Admin UI访问的URL地址 |
sql |
客户端连接CockroachDB的URL |
logs |
包含日志文件的文件系统目录 |
store |
存储节点数据的目录 |
status |
节点的状态。可能的状态有: (1) “initialized new cluster”:集群中头一个节点(在执行init 之前启动的第一个节点)。例如:上面输出的nodeID为1的节点。 (2) “initialized new node, joined pre-existing cluster”:第一次加入集群的节点,--join参数指定的除头一个启动的接节点之外的节点都是这个状态。例如:上面输出的节点2和3. (3) “restarted pre-existing node”:重新加入集群的节点会显示这个状态。 |
clusterID |
集群的唯一标识 |
nodeID |
节点的唯一标识 |
6. 检验数据库集群状态
(1) 使用cockroach node status命令检查集群中节点的状态(本示例crdb数据库集群 是由3个节点组成):
$ cockroach node status --insecure
(2) 使用cockroach sql命令查询数据库情况:
$ cockroach sql --insecure --port=26257 --execute="SHOW DATABASES;"
(3)访问Admin UI
通过访问CRDB集群中的任何一个节点的http port端口(在启动节点时--http-port参数制定),我们可以看到用于管理和监控CRDB的web页面。例如:
http://192.168.1.171:8081
下图是显示的Admin UI的界面:
到此,我们就在一台机器上构建好具有3个节点的CockroachDB集群了。最后介绍一下停止和启动CRDB集群的方法:
## 停止CRDB集群
$ pkill cockroach
## 启动CRDB集群
编写一个sh脚本(假设叫做start-crdb-3.sh),方便以后每次启动创建好的这个集群。脚本内容如下:
#!/bin/bash
#start first node
cockroach start \
--insecure \
--store="/data/crdb/node1" \
--host=0.0.0.0 \
--port=26257 \
--http-port=8080 \
--join=0.0.0.0:26257,0.0.0.0:26258,0.0.0.0:26259 &
#start second node
cockroach start \
--insecure \
--store="/data/crdb/node2" \
--host=0.0.0.0 \
--port=26258 \
--http-port=8081 \
--join=0.0.0.0:26257,0.0.0.0:26258,0.0.0.0:26259 &
#start third node
cockroach start \
--insecure \
--store="/data/crdb/node3" \
--host=0.0.0.0 \
--port=26259 \
--http-port=8082 \
--join=0.0.0.0:26257,0.0.0.0:26258,0.0.0.0:26259 &
- 在单机上构建 secure 多节点CockroachDB集群
- Cockroach Design 翻译 ( 十六) 节点和集群指标
- cockroachdb 安装试用(单机伪分布式)
- test-definitions/blob/master/auto-test/cockroach/cockroachInsecureTest.sh
- CockroachDB SQL开发基础 ——创建表的更多有趣示例 (1)
- 【ES系列五】——集群搭建(多机集群&单机多节点集群)
- CockroachDB设计与实现-刘奇
- Cockroach Design 翻译 ( 十五) 节点分配(通过Gossip算法)
- redis学习笔记五(单机多节点集群)
- Nginx + varnish 构建高可用CDN节点集群
- Hadoop多节点集群的构建
- CockroachDB SQL开发基础 ——增删改查 (2)
- 存储,分享积累 CockroachDB
- 你应该了解NewSQL:CockroachDB验证文档
- Weblogic服务器单机多节点集群\集群代理服务器配置以及实现Session共享功能
- 阿里云构建Kafka单机集群环境
- 10021---Nginx + varnish 构建高可用CDN节点集群
- 分布式数据库cockroachDB 初探
- 单机环境构建WebSphere Application Server Community Edition V2.1.1集群环境
- bigchaindb集群部署(5节点)