暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

CockroachDB集群部署及常见问题

CockroachDB 2021-07-14
2916


CockroachDB支持secure和insecure两种集群部署方式,本文重点介绍secure模式下CockroachDB集群的搭建过程、集群的状态查看方法、集群重启、CockroachDB版本升级以及Trouble Shooting方法。


   集群部署  


1. 环境准备

1)机器IP列表:192.168.180.21,192.168.180.22 ,192.168.180.23

2)CentOS 6.3以上(也支持Ubuntu)

3)启用NTP服务

4)调整单进程可打开的最大文件句柄数的限制,建议 >100000

5)下载CockroachDB可执行文件(官方下载地址:https://www.cockroachlabs.com/docs/releases/,本文使用版本v1.0.4)


2. 集群搭建(secure模式)
secure模式下CockroachDB集群使用TLS(安全传输层协议)加密节点间以及客户端到节点的通信,集群搭建步骤:

1)使用cockroach certs create-ca命令生成公用的CA证书与私钥

2)使用cockroach cert create-client命令生成root用户的证书与私钥

3)各个节点通过cockroach certs create-node 命令使用公用的CA证书与私钥生成各自的节点证书和私钥(节点启动时通过节点证书和私钥连接到其他节点)

4)逐一启动所有节点(可以使用root用户的证书和私钥以root用户连接至节点检验节点是否成功启动)


使用上述3台机器搭建一个3副本的secure模式CockroachDB集群步骤:
1)各个节点生成cockroach安装目录 home/cockroach/CockroachDB,证书目录/home/cockroach/CockroachDB/certs和数据目录/ssd/CockroachDB/cockroach-data,下载可执行文件cockroach存放于安装目录中:

  1. wget https://binaries.cockroachdb.com/cockroach

  2. -v1.0.4.linux-amd64.tgz

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

  4. mv cockroach-v1.0.4.linux-amd64/cockroach  

  5. /home/cockroach/CockroachDB


2)使用cockroach cert create-ca命令生成CA证书ca.crt和私钥文件ca.key,在192.168.180.21上运行命令:

  1. cd /home/cockroach/CockroachDB

        ./cockroach cert create-ca --certs-dir=certs

  1. --ca-key=certs/ca.key

  2. --allow-ca-key-reuse --overwrite


3)使用cockroach cert create-client命令生成root用户证书client.root.crt和私钥client.root.key,用于客户端以证书方式访问CockroachDB,在192.168.180.21上运行命令:

  1. cd /home/cockroach/CockroachDB

  2. ./cockroach cert create-client root

  3. --certs-dir=certs

  4. --ca-key=certs/ca.key

  5. --overwrite

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


4)使用cockroach cert create-node命令创建节点证书node.crt和私钥文件node.key,以192.168.180.21为例,证书生成方式:

       cd /home/cockroach/CockroachDB

  1. ./cockroach cert create-node 192.168.180.21

    --certs-dir=certs 

    --ca-key=certs/ca.key

  2. --overwrite

同理192.168.180.22,192.168.180.23生成各自的节点证书和私钥


5) 启动节点192.168.180.21

        home/cockroach/CockroachDB/cockroach start

  1. --port=26257 --http-port=8080

    --store=path=/ssd/CockroachDB/cockroach-data

    --certs-dir=/home/cockroach/CockroachDB/certs  

    --host=192.168.180.21 --background

检查CockroachDB是否正常启动

  1. /home/cockroach/CockroachDB/cockroach sql

    --port=26257 --host=192.168.180.22 -e "select 1"


6) 启动节点192.168.180.22 

  1. /home/cockroach/CockroachDB/cockroach start

  2. --port=26257 --http-port=8080

  3. --store=path=/ssd/CockroachDB/cockroach-data

  4. --join=192.168.180.21:26257

  5. --join=192.168.180.22:26257

  6. --certs-dir=/home/cockroach/CockroachDB/certs

  7. --host=192.168.180.22 --background

检查CockroachDB是否正常启动

  1. /home/cockroach/CockroachDB/cockroach sql

    --port=26257 --host=192.168.180.22 -e "select 1"


7)启动节点192.168.180.23

  1. /home/cockroach/CockroachDB/cockroach start

  2. --port=26257 --http-port=8080

  3. --store=path=/ssd/CockroachDB/cockroach-data  

  4. --join=192.168.180.21:26257

  5. --join=192.168.180.22:26257

  6. --certs-dir=/home/cockroach/CockroachDB/certs

    --host=192.168.180.23 --background

检查CockroachDB是否正常启动

  1. /home/cockroach/CockroachDB/cockroach sql

  2. --port=26257 --host=192.168.180.23 -e "select 1"


至此,一个3节点3副本的集群搭建完成。



   集群重启  


1. 节点重启:单个节点重启可调用cockroach quit命令关闭cockroach进程,然后调用cockroach start 命令启动。
以节点192.168.180.21 为例:

1)关闭节点

  1. /home/cockroach/CockroachDB/cockroach quit

  2. --port=26257

  3. --certs-dir=/home/cockroach/CockroachDB/certs

  4. --host=192.168.180.21


2)重启节点

  1. /home/cockroach/CockroachDB/cockroach start

  2. --port=26257 --http-port=8080

  3. --store=path=/ssd1/CockroachDB/cockroach-data

  4. --join=192.168.180.21:26257

  5. --join=192.168.180.22:26257

  6. --certs-dir=/home/cockroach/CockroachDB/certs

  7. --host=192.168.180.21

  8. --background



2. 集群的重启:集群的重启:逐一关闭集群所有节点,再在所有节点上同时执行启动命令。与第一次搭建集群不同的是,所有节点的启动命令都必须带join参数:

1)集群的关闭方式:逐一关闭关闭节点192.168.180.21,192.168.180.22,192.168.180.23

2)集群的重启:同时在三个节点上运行各自启动命令,节点192.168.180.21启动命令如下:

  1. /home/cockroach/CockroachDB/cockroach start

  2. --port=26257 --http-port=8080

  3. --store=path=/ssd/CockroachDB/cockroach-data

  4. --certs-dir=/home/cockroach/CockroachDB/certs

  5. --host=192.168.180.21 --join=192.168.180.21:26257

  6. --join=192.168.180.22:26257 --background

其他节点启动方式同192.168.180.21。


  版本升级  


为了达到业务无感知的平滑升级和服务的稳定可用,CockroachDB支持滚动升级,即逐一升级每个节点的CockroachDB版本。对于CockroachDB集群来说,关闭单个节点不影响集群的可用性。

以上述集群为例,将原CockroachDB版本从v1.0.4升级至v1.0.5步骤如下:

1.关闭节点192.168.180.21

  1. /home/cockroach/CockroachDB/cockroach quit

  2. --port=26257

  3. --certs-dir=/home/cockroach/CockroachDB/certs

  4. --host=192.168.180.21


2.替换新版本CockroachDB,并重启

  1. /home/cockroach/CockroachDB/cockroach start

  2. --port=26257 --http-port=8080

  3. --store=path=/ssd1/CockroachDB/cockroach-data

  4. --certs-dir=/home/cockroach/CockroachDB/certs

  5. --host=192.168.180.21 --background



3.确认节点192.168.180.21已经正常启动后,节点192.168.180.22,192.168.180.23的cockroach替换过程同上,依次进行


  Trouble Shooting 


1. 查看集群正在执行的query

在CockroachDB使用过程中以可能会遇到慢查询,长事务等问题,目前CockroachDB还没有提供类似MySQL的show processlist功能,但crdb_internal库的node_queries表记录了该节点上正在执行的query信息。在节点192.168.180.21上查看query执行示例:

  1. /home/cockroach/CockroachDB/cockroach sql

  2. --port=26257 --host=192.168.180.21

  3. --certs-dir=/home/cockroach/CockroachDB/certs

图中显示query: select * from node_queries执行的起始时间,client端地址等信息。依据query的起始时间可以判断该查询是否是慢查询。


2. 查看事务执行时间
查看长事务需要打开trace信息,在CockroachDB启动前做如下设置:
1)设置环境变量COCKROACH_ENABLE_TRACING

  1. export COCKROACH_ENABLE_TRACING=true



2)设置cockroach内部变量setting server.remote_debugging.mode

  1. /home/cockroach/CockroachDB/cockroach sql

  2. --port=26257 --host=192.168.180.21

  3. --certs-dir=/home/cockroach/CockroachDB/certs

  4. -e " set cluster setting server.

  5. remote_debugging.mode = 'any' "


例如查看运行超过0.1s的事务:

进入页面https://192.168.180.21:8080/debug/requests?fam=tracing&b=2&exp=1

图中日志显示的事务如下,执行了0.26s(test表大小为121776行) :

  1. BEGIN TRANSACTION

  2. SELECT count(1) FROM test.test

  3. COMMIT TRANSACTION



3. 查看Range信息
当从日志中看到某些range出现大量Error或者Warning信息后,可以查看当前range的状态信息(看长事务需要打开trace信息),以集群14号range为例,在浏览器中输入https://192.168.180.21:8080/debug/range?id=14  :

图中显示了14号Range的所有副本分布信息,leader信息,租约信息等。





 关于我们:我们是百度DBA团队,团队有两位CockroachDB PMC Member, 目前受邀参与CockroachDB 社区的核心开发工作,此外团队还有一位Contributor,团队在积极推动NewSQL在百度内部以及外部的发展。除了NewSQL, 我们在MySQL, PostgreSQL, GreenPlum有多年的内核开发经验及实践经验,对数据库和大数据领域有疑问或者需求欢迎联系我们,同时欢迎有志青年加入我们!



....................  长按关注  ....................




文章转载自CockroachDB,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论