分布式newsql数据库cockroach的secure模式

前言:cockroach是一个非常强大的分布式sql数据库(newsql),它通常被用来实现数据湖泊。它采用完全去中心化架构,可以实现(n-1)/2的服务器节点故障宕机,通过低耦合性的节点扩展,可以轻松实现海量数据的存储和利用,轻松实现pb级。cockroach采用强一致性机制(Strong Consistency),节点间基于Raft共识算法,比较适合那些对数据一致性要求很高的场景。而且,cockroach内置了postgres数据库,支持json/jsonb,可以通过sql方式对json/jsonb数据进行操作,实现其他nosql数据库的操作。

分布式newsql数据库cockroach的secure模式


前提条件

1、每个节点已成功安装cockroach到/usr/local/bin

2、确保所有节点的端口26260开启,其中任意某个节点的8080端口开启,比如node1(10.10.1.4),该端口用访问cockroach web ui。

3、确保所有节点的时间误差低于500ms(可通过一些NTP时钟同步服务实现)

一、生成证书

证书放到cockroach 安装目录 /usr/cockroach/certs

先在第一个节点生成证书,

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

生成如下文件

certs/ca.crt

certs/ca.key

把ca.crt和ca.key文件打包为ca.tar,发布到其他节点

注意,这里一定要先把ca文件打包,倘若在节点执行了其他证书相关操作(cert create-node,cert create-client)后再打包,cockroach joinin不成功,原因可能是在执行其他证书操作时会修改ca文件,所以一定要注意。

二、生成节点证书

在每个节点做如下操作

cd /usr/cockroach

cockroach cert create-node 10.10.1.4 --certs-dir=certs --ca-key=certs/ca.key

注意,把10.10.1.4替换为每个节点自己的ip

三、生成用户证书

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

为每个节点的root用户生成证书,否则不能该节点上不能使用cockroach sql连接(不仅仅是命令行,还包括代码的数据库连接dao)。如果不需要通过该节点连接数据库,可以不用执行该操作

四、逐步激动

每个节点执行 cockroach start --certs-dir=certs --store=node1 --listen-addr=10.10.1.4:26260 --http-addr=10.10.1.4:8080 --join=10.10.1.4:26260 &

这里listen-addr 和http-addr的ip替换为自己节点的ip。

每启动并jion成功一个节点,在cockroach web ui的node list都能看到。

所有节点启动成功后,在任意一个节点执行cockroach init --certs-dir=certs --host=10.10.1.4:26260

这里把ip替换为自己节点的ip

五、web ui

浏览器打开node1(该节点的8080端口已开启)

10.10.1.4:8080(我这里做了反向代理,通过公网ip访问,局域网下可以直接ip访问,或者如果使用云服务器,也可以直接ip访问)

浏览器第一次访问时,会有安全风险提示,这是因为这里的证书是私有的

点击接受风险,接入登录界面

分布式newsql数据库cockroach的secure模式


这里就需要连接到某台支持cockroach sql连接的服务器上(之前在某台服务器上执行过cockroach cert create-client),创建一个用户。

cockroach sql --certs-dir=certs --host=10.10.1.4:26260

分布式newsql数据库cockroach的secure模式


create user xxx with password ‘xxx’

然后就可以用该用户登录了。登录后就可以看到每个节点状态及当前副本相关信息。

如何添加一个新的服务器到集群中去?Cockroach是一个完全去中心化的分布式数据库,新节点加入跟已加入节点在部署上没有任何关系,只需要获取到原来集群节点使用的ca证书和要加入的joinin ip就可以了,新节点加入后会自动进行副本复制和调整,根据数据量和节点数量,会有一段时间,生产环境建议晚上或者非频繁时间进行。



分享到:


相關文章: