CockroachDB集群安装

举报
HuaweiCloudDeveloper 发表于 2026/02/05 15:57:41 2026/02/05
【摘要】  CockroachDB是一种基于事务性强一致性键值存储构建的分布式SQL数据库。它具备水平扩展能力,能在磁盘、机器、机架甚至数据中心故障时保持最小延迟中断且无需人工干预;支持强一致性ACID事务;并提供熟悉的SQL API用于数据结构化、操作和查询。更多细节请参见:https://github.com/cockroachdb/cockroach 当前CockroachDB代码采用双许可证组...

 CockroachDB是一种基于事务性强一致性键值存储构建的分布式SQL数据库。它具备水平扩展能力,能在磁盘、机器、机架甚至数据中心故障时保持最小延迟中断且无需人工干预;支持强一致性ACID事务;并提供熟悉的SQL API用于数据结构化、操作和查询。

更多细节请参见:https://github.com/cockroachdb/cockroach

 

当前CockroachDB代码采用双许可证组合发布:商业源代码许可证(BSL)和Cockroach社区许可证(CCL)。

 

商业源代码许可证:BSL功能可免费使用且源代码开放,但用户未经Cockroach Labs许可不得将CockroachDB作为服务使用。BSL虽未获开源倡议组织认证,但满足大部分开源标准。

社区许可证:

CCL(免费)功能可免费使用,源代码可查看和修改,但未经Cockroach Labs许可不得复用。

CCL(付费)功能需企业许可证密钥才能使用,源代码可查看和修改,但未经许可不得使用。

作为 Spanner 的开源实现 , CockroachDB 具有支持标准 SQL 接口 , 线性扩展 , 强一致 , 高可用等重要特性。

 

ECS 服务器 规格

• CentOS7.9

• 2vCPU, 8GB RAM, 40GB SSD

• Enablechronyd

集群搭建整体流程 ( secure 模式 )

 

secure 模式下 CockroachDB 集群使用 TLS( 安全传输层协议 ) 加密节点间以及客户端到节点的通信 , 使用上述 规格 3 E CS(192.168.2.131, 192.168.2.132, 192.168.2.133) 搭建一个 3 副本的 secure 模式 CockroachDB 集群步骤 :

 

目录创建

 

集群涉及的服务器均需要执行

 

安装目录 : /home/cockroach/ CockroachDB

 

数据目录 : /ssd1/ CockroachDB /cockroach-data

 

安装包准备

 

其中一台服务器执行即可 (1 92.168.2.133 )

 

wget https://binaries.cockroachdb.com/cockroach-v1.0.4.linux-amd64.tgz

 

tar - xvf cockroach-v1.0.4.linux-amd64.tgz

 

mv cockroach-v1.0.4.linux-amd64/cockroach / home/cockroach/ CockroachDB

 

CA 证书与私钥及 root 用户的证书与私钥生成

 

其中一台服务器执行即可 (1 92.168.2.133 )

 

cd / home/cockroach/ CockroachDB

 

./ cockroach cert create-ca --certs- dir =certs --ca-key=certs/ ca.key --allow-ca-key-reuse – overwrite

 

./ cockroach cert create-client root --certs- dir =certs --ca-key=certs/ ca.key --overwrite

 

将安装目录 scp 至其余节点

 

其中一台服务器执行即可 (1 92.168.2.133 )

 

/home/cockroach/ CockroachDB 下的所有文件推送至其他节点的证书目录

 

cd /

 

scp - rp home/ cockrdb1:$PWD

 

各自节点的证书和 私钥 生成

 

集群涉及的服务器均需要执行

 

1 92.168.2.131 服务器

 

cd /home/cockroach/ CockroachDB

 

./ cockroach cert create-node 1 92.168.2.131 --certs- dir =certs --ca-key=certs/ ca.key overwrite

 

1 92.168.2.132 服务器

 

cd /home/cockroach/ CockroachDB

 

./ cockroach cert create-node 1 92.168.2.132 --certs- dir =certs --ca-key=certs/ ca.key overwrite

 

1 92.168.2.133 服务器

 

cd /home/cockroach/ CockroachDB

 

./ cockroach cert create-node 1 92.168.2.133 --certs- dir =certs --ca-key=certs/ ca.key --overwrite

 

 

启动各个节点并验证

 

Cockrdb1:

 

/home/cockroach/ CockroachDB /cockroach start --port=26257 --http-port=8080 --store=path=/ssd1/ CockroachDB /cockroach-data --certs- dir =/home/cockroach/ CockroachDB /certs --host=1 92.168.2.131 - background

 

/home/cockroach/ CockroachDB /cockroach sql --port=26257 --host= 1 92.168.2.131 --certs- dir =/home/cockroach/ CockroachDB /certs -e "select 1"

cockrdb2:

 

/home/cockroach/ CockroachDB /cockroach start --port=26257 --http-port=8080 --store=path=/ssd1/ CockroachDB /cockroach-data --join= 1 92.168.2.131 :26257 -- certs- dir =/home/cockroach/ CockroachDB /certs --host= 1 92.168.2.132 -- background

 

/home/cockroach/ CockroachDB /cockroach sql --port=26257 --host= 1 92.168.2.132 --certs- dir =/home/cockroach/ CockroachDB /certs -e "select 1"

 

cockrdb3:

 

/home/cockroach/ CockroachDB /cockroach start --port=26257 --http-port=8080 --store=path=/ssd1/ CockroachDB /cockroach-data --join= 1 92.168.2.131 :26257 --join= 1 92.168.2.132 :26257 --certs- dir =/home/cockroach/ CockroachDB /certs --host= 1 92.168.2.133 -- background

 

/home/cockroach/ CockroachDB /cockroach sql --port=26257 --host= 1 92.168.2.133 --certs- dir =/home/cockroach/ CockroachDB /certs -e "select 1"

连接任意节点并执行 sql

 

/home/cockroach/ CockroachDB /cockroach sql --port=26257 --host= 192.168.2.131 --certs- dir =/home/cockroach/ CockroachDB /certs

运维界面

 

集群中任意一台服务器的 8080 端口为 web 页面进程

https:// 159.138.83.158:8080

/#/cluster/nodes

负载均衡

对于 CockroachDB 集群中 , 所有节点地位对等 , 均能对外接收读写请求。业务操作 CockroachDB 集群时 , 一般需要在业务层将连接打散到集群的各个节点。为了屏蔽应用操作的复杂性 , 可以在应用和 CockroachDB 之间搭建 HAProxy CockroachDB 内置了生成 HAProxy 配置文件的功能 , 安装 HAProxy 后可以直接使用。

在节点 192.168. 2.131 上生成 HAProxy 配置文件 haproxy. cfg , 生成方式 :

 

cd /home/cockroach/ CockroachDB

 

./ cockroach gen haproxy --certs- dir =certs --host=192.168.2.131 --port=26257

 

cat haproxy.cfg

 

 

global

 

maxconn  4096

 

defaults

 

mode tcp

 

timeout connect 10s

 

timeout client 1m

 

timeout server 1m

 

 

listen psql

 

bind :26257

 

mode tcp

 

balance roundrobin

 

server cockroach1 192.168.2.131:26257 check

 

server cockroach1 192.168.2.132:26257 check

 

server cockroach1 192.168.2.133:26257 check

 

maxconn 指示该 HAProxy 最大可接受的连接数 , bind 指示 HAProxy 监听端口 , balance 指示负载均衡的方式 , server 指示集群节点列表。

 

找另外一台服务器 ( 192.168.2.130) 部署 HAProxy 进程 , 提供负载均衡服务 :

 

yum install haproxy

COPY 节点 192.168. 2.131 上生成的 haproxy.cfg to / etc / haproxy

下图是当前 CockroachDB 服务的流量模型 , 客户端首先与 haproxy server cockrha1 建立连接 , haproxy 会以轮询的方式将流量分发到后面三个 cockroach server s cockrdb1/2/3

官方文档

英文文档 https://www.cockroachlabs.com/

中文文档 http://doc.cockroachchina.baidu.com/#

 

1      CockroachDB 应用接入指南

本文主要介绍了应用如何使用 CockroachDB , 结合之前《 CockroachDB 集群部署及常见问题》 , 业务可以快速搭建自己的集群 , 并进行访问使用。

数据库创建

往期文章 CockroachDB 集群部署及常见问题》中 , 我们部署了一个 3 节点 3 副本的 CockroachDB 集群 , 集群信息如下 :

 

haproxy 列表

192.168. 2.13 0 :26257

节点列表

192.168. 2.131 :26257

192.168. 2.132 :26257

192.168. 2.133 :26257

安装目录 : /home/cockroach/ CockroachDB

证书目录 :  /home/cockroach/ CockroachDB /certs

版本信息 : v1.0.4

 

并在每一台 CockroachDB 服务器上生成了 root 用户证书和 私钥 root 用户在集群搭建完成时默认创建且拥有所有权限 , 开发人员可以使用 root 用户的证书和 私钥 登录集群 ), 接下来主要介绍如何使用 root 用户创建库、表、新用户以及授权。

1 ) 在服务器 192.168. 2.131 上用 Cockroach 客户端以 root 用户连接 CockroachDB 集群 :

$ cd home/cockroach/ CockroachDB

$ ./ cockroach sql --user=root --certs- dir =certs --port= 26257  --host= 192.168 . 2.131

2 ) 创建 test 库 , 在终端中运行命令 :

> CREATE database test;

3 ) 在 test 库中创建表 logoff , 运行命令 :

> SET database='test';

> CREATE TABLE logoff ( 

  a INT PRIMARY KEY,

  b INT UNIQUE,

  c INT  );

4 ) 创建用户 tester , 密码 testpasswd , 运行命令 :

> CREATE USER tester   WITH   PASSWORD   ' testpasswd ' ;

5 ) 为 tester 用户授予对 logoff 表增删改查的权限 :

> GRANT INSERT, DELETE, UPDATE, SELECT ON TABLE logoff TO tester;

CockroachDB 的权限体系如下图 :

通过上述步骤 , 我们在 CockroachDB 集群上创建了 test 库 , 在 test 库中创建了  logoff 表 , 密码为 testpasswd 的新用户 tester , 并且为 tester 授予了对表 logoff 增删改查的 权限。

 

现在 , 经过上述步骤 , 已经完成了建库、建表、新建用户和授权工作。 DBA 可以将 tester 用户提供给业务方使用 , 业务可以在任何机器上通过 tester 用户使用 cockroach 或者 psql 客户端或者其他开发语言连接至 haprxoy server , 进行数据的存储 , 提取和修改工作。

 

连接

连接集群所需信息如下 :

库名 : test

用户 : tester

密码 : testpasswd

入口 : 192.168. 2.131 :26257

下面介绍 客户端 程序语言 方式连接   CockroachDB 数据库的方法 : 1 )   cockroach 客户端

CockroachDB 提供了两种用 Cockroach 客户端连接数据库的方法 :

 

方法一

url 格式 : url =postgresql://youruser:passwd@host:port/yourdb

youruser : 已经授权的用户

passwd : 用户密码

host: port : CockroachDB 集群流量入口

yourdb : 指要连接的数据库

本集群连接示例 :

$ cd / home/cockroach/ CockroachDB

$ ./ cockroach sql -- url =postgresql://'tester':'testpasswd'@192.168. 2.131 :26257/test

方法二

使用证书方式要求业务通过证书和 私钥 连接   CockroachDB

tester   用户证书和私钥的生成方法同  root 用户 , 生成命令 :

cd / home/cockroach/ CockroachDB

./ cockroach cert create-client tester --certs- dir =certs --ca-key=certs/ ca.key overwrite

上述操作生成的证书文件 client.tester.crt client.tester.key 。随后 , DBA 将证书 ca.crt client.tester.crt   client.tester.key  ( 三者缺一不可 ) 交付业务 , 假定证书存放在目录 certs-tester 中 , 使用 cockroach 登录 :

./ cockroach sql --user=tester --certs- dir =certs-tester --port= 26257 --host= 192.168 . 2.131

2 )   psql 客户端 连接 h aproxy

运行登录命令 :

$ psql -h   192.168 . 2.13 0  -p   26257  -U tester -d test -W

按提示输入密码 testpasswd 即可登录。

3)   Python 连接

使用 Python 连接至 CockroachDB 需要安装 psycopg2 ( 官网 http://initd.org/psycopg/docs/install.html ), 安装方法如下 :

$ pip install psycopg2

Python 连接数据库示例 :

# Import the driver.

import   psycopg2

# Connect to the "bank" database. 

conn = psycopg2.connect(database='test',user='tester',host='192.168. 2.131 ', port=26257,password=' testpasswd ')

conn = psycopg2.connect(database= 'test' ,user= 'tester' ,host= '192.168. 2.131 ' port= 26257 ,password= ' testpasswd ' )

# Open a cursor to perform database operations.

cur = conn.cursor ()

# Create the "accounts" table.

cur.execute ( "show tables)" )

# Print out the balances.

rows = cur.fetchall ()

print   rows

# Close the database connection.

cur.close ()

conn.close ()

 

 

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。