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 ()
- 点赞
- 收藏
- 关注作者
评论(0)