在单机上构建 secure 多节点CockroachDB集群
本文将向大家介绍如何在一台机器上(可以是物理机,也可以是一台虚拟机)创建secure多节点CockroachDB集群(在示例中我们将创建一个具有3节点的CRDB数据库集群)。这里所说的secure是指集群的各节点之间以及client与集群节点之间使用TLS证书对通信进行加密。在生产环境下建议创建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. 创建安全证书
(1) 创建CA证书和key
$ mkdir /data/crdb/certs /data/crdb/my-safe-directory
$ cockroach cert create-ca --certs-dir=/data/crdb/certs --ca-key=/data/crdb/my-safe-directory/ca.key
(2) 为root用户(CockroachDB自动具有的一个数据库用户) 创建一个client key对
$ cockroach cert create-client root --certs-dir=/data/crdb/certs --ca-key=/data/crdb/my-safe-directory/ca.key
(3)为集群中的每个节点创建一个key对
由于这个示例的所有节点都在一台机器上,所以只需要为一个节点生成证书。
$ cockroach cert create-node \
localhost \
0.0.0.0 \
--certs-dir=/data/crdb/certs \
--ca-key=/data/crdb/my-safe-directory/ca.key
4. 启动第一个节点
使用cockroach start命令启动第一个节点:
$ cockroach start --certs-dir=/data/crdb/certs --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 &
命令参数说明:
参 数 |
描 述 |
--certs-dir |
指定TLS证书的目录位置,cockroach命令将会查找安全证书以加密通讯。 |
--store |
指定本地目录,用于存储节点的数据和日志 |
--host |
指定节点的主机名或IP地址,这个地址用于节点间通讯或者客户端访问节点时使用。 |
--port |
指定节点的通讯端口,这个端口用于节点间通讯或者客户端访问节点时使用。 这个参数的缺省值是26257。 |
--http-port |
指定CockroachDB admin UI监听的端口。这个参数的缺省值是8080。 |
--join |
创建CockroachDB集群时,所有初始节点的地址和TCP端口。 在启动所有初始节点时,都需要加上这个参数,并且参数值应当相同。 |
|
|
注意:
可以执行cockroach start --help查看命令的参数描述,也可以执行cockroach --help查看查看所有的命令参数描述。
5. 启动另两个节点
使用cockroach start命令能够再启动多个节点,这些节点是第1个节点启动时--join参数中指定的初始节点(除第1个节点之外的节点)。
--启动第2个节点
$ cockroach start --certs-dir=/data/crdb/certs --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 --certs-dir=/data/crdb/certs --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 &
6. 初始化CockroachDB集群
在前面的步骤中,我们执行带有--jon参数的cockroach start只是启动了节点,但是这些节点还不能正常工作,需要执行初始化后CRDB集群才完成创建,对外正常工作。
(1) 执行cockroach init命令初始化集群
$ cockroach init --certs-dir=/data/crdb/certs
你将会看到输出的信息中如果出现如下信息,表示集群初始化成功:
Cluster successfully initialized
(2)下面是初始化时3个节点显示的完整输出:
$ CockroachDB node starting at 2018-10-06 08:06:12.445002685 +0000 UTC (took 79.4s)
build: CCL v2.0.6 @ 2018/10/01 13:59:40 (go1.10)
admin: https://0.0.0.0:8080
sql: postgresql://root@0.0.0.0:26257?sslcert=%2Fdata%2Fcrdb%2Fcerts%2Fclient.root.crt&sslkey=%2Fdata%2Fcrdb%2Fcerts%2Fclient.root.key&sslmode=verify-full&sslrootcert=%2Fdata%2Fcrdb%2Fcerts%2Fca.crt
logs: /data/crdb/node1/logs
temp dir: /data/crdb/node1/cockroach-temp076844517
external I/O path: /data/crdb/node1/extern
store[0]: path=/data/crdb/node1
status: initialized new cluster
clusterID: 33a31243-a960-438f-8fd4-62ebb9646437
nodeID: 1
CockroachDB node starting at 2018-10-06 08:06:12.863116011 +0000 UTC (took 40.3s)
build: CCL v2.0.6 @ 2018/10/01 13:59:40 (go1.10)
admin: https://0.0.0.0:8082
sql: postgresql://root@0.0.0.0:26259?sslcert=%2Fdata%2Fcrdb%2Fcerts%2Fclient.root.crt&sslkey=%2Fdata%2Fcrdb%2Fcerts%2Fclient.root.key&sslmode=verify-full&sslrootcert=%2Fdata%2Fcrdb%2Fcerts%2Fca.crt
logs: /data/crdb/node3/logs
temp dir: /data/crdb/node3/cockroach-temp185379391
external I/O path: /data/crdb/node3/extern
store[0]: path=/data/crdb/node3
status: initialized new node, joined pre-existing cluster
clusterID: 33a31243-a960-438f-8fd4-62ebb9646437
nodeID: 2
CockroachDB node starting at 2018-10-06 08:06:12.954463437 +0000 UTC (took 58.4s)
build: CCL v2.0.6 @ 2018/10/01 13:59:40 (go1.10)
admin: https://0.0.0.0:8081
sql: postgresql://root@0.0.0.0:26258?sslcert=%2Fdata%2Fcrdb%2Fcerts%2Fclient.root.crt&sslkey=%2Fdata%2Fcrdb%2Fcerts%2Fclient.root.key&sslmode=verify-full&sslrootcert=%2Fdata%2Fcrdb%2Fcerts%2Fca.crt
logs: /data/crdb/node2/logs
temp dir: /data/crdb/node2/cockroach-temp813995751
external I/O path: /data/crdb/node2/extern
store[0]: path=/data/crdb/node2
status: initialized new node, joined pre-existing cluster
clusterID: 33a31243-a960-438f-8fd4-62ebb9646437
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 |
节点的唯一标识 |
7. 检验数据库集群状态
(1)使用cockroach node status命令检查集群中节点的状态(本示例crdb数据库集群 是由3个节点组成):
$ cockroach node status --certs-dir=/data/crdb/certs
(2)使用cockroach sql命令查询数据库情况:
$ cockroach sql --certs-dir=/data/crdb/certs --port=26257 --execute="SHOW DATABASES;"
(3)访问Admin UI
通过访问CRDB集群中的任何一个节点的http port端口(在启动节点时--http-port参数制定),我们可以看到用于管理和监控CRDB的web页面。例如:
https://192.168.1.171:8081
下图是显示的Admin UI的界面:
到此,我们就在一台机器上构建好具有3个节点的CockroachDB集群了。最后介绍一下停止和启动CRDB集群的方法:
## 停止CRDB集群
$ pkill cockroach
## 启动CRDB集群
编写一个sh脚本(假设叫做start-crdb-3-secure.sh),方便以后每次启动创建好的这个集群。脚本内容如下:
#!/bin/bash
#start first node
cockroach start \
--certs-dir=/data/crdb/certs \
--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 \
--certs-dir=/data/crdb/certs \
--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 \
--certs-dir=/data/crdb/certs \
--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 &
- cockroachdb 安装试用(单机伪分布式)
- Cockroach Design 翻译 ( 十六) 节点和集群指标
- Elasticsearch单机双节点集群部署实战
- 阿里云构建Kafka单机集群环境
- CockroachDB 测试
- redis集群(单机6节点实现)
- 单机环境构建WebSphere Application Server Community Edition V2.1.1集群环境
- CockroachDB SQL开发基础 ——事务隔离级别和并发控制介绍 (1)
- Redis单机多节点集群实验
- CockroachDB设计与实现
- 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:5.安装Oracle RAC FAQ-RAC安装DB软件runInstaller看不到节点
- C#和NewSQL更配 —— CockroachDB入门
- [Hadoop 1] 构建一个单节点集群
- Cockroach DB 1.0发布
- Cockroachdb 一、系统环境
- Windows下ELK环境搭建(单机多节点集群部署)
- test-definitions/blob/master/auto-test/cockroach/cockroachInsecureTest.sh
- Cockroachdb 二、手动部署
- CockroachDB SQL开发基础——创建索引
- Cockroach DB 1.0发布