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存放于安装目录中:
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
2)使用cockroach cert create-ca命令生成CA证书ca.crt和私钥文件ca.key,在192.168.180.21上运行命令:
cd /home/cockroach/CockroachDB
./cockroach cert create-ca --certs-dir=certs
--ca-key=certs/ca.key
--allow-ca-key-reuse --overwrite
3)使用cockroach cert create-client命令生成root用户证书client.root.crt和私钥client.root.key,用于客户端以证书方式访问CockroachDB,在192.168.180.21上运行命令:
cd /home/cockroach/CockroachDB
./cockroach cert create-client root
--certs-dir=certs
--ca-key=certs/ca.key
--overwrite
将/home/cockroach/CockroachDB/certs下的所有文件推送至其他节点的证书目录
4)使用cockroach cert create-node命令创建节点证书node.crt和私钥文件node.key,以192.168.180.21为例,证书生成方式:
cd /home/cockroach/CockroachDB
./cockroach cert create-node 192.168.180.21
--certs-dir=certs
--ca-key=certs/ca.key
--overwrite
同理192.168.180.22,192.168.180.23生成各自的节点证书和私钥
5) 启动节点192.168.180.21
home/cockroach/CockroachDB/cockroach start
--port=26257 --http-port=8080
--store=path=/ssd/CockroachDB/cockroach-data
--certs-dir=/home/cockroach/CockroachDB/certs
--host=192.168.180.21 --background
检查CockroachDB是否正常启动
/home/cockroach/CockroachDB/cockroach sql
--port=26257 --host=192.168.180.22 -e "select 1"
6) 启动节点192.168.180.22
/home/cockroach/CockroachDB/cockroach start
--port=26257 --http-port=8080
--store=path=/ssd/CockroachDB/cockroach-data
--join=192.168.180.21:26257
--join=192.168.180.22:26257
--certs-dir=/home/cockroach/CockroachDB/certs
--host=192.168.180.22 --background
检查CockroachDB是否正常启动
/home/cockroach/CockroachDB/cockroach sql
--port=26257 --host=192.168.180.22 -e "select 1"
7)启动节点192.168.180.23
/home/cockroach/CockroachDB/cockroach start
--port=26257 --http-port=8080
--store=path=/ssd/CockroachDB/cockroach-data
--join=192.168.180.21:26257
--join=192.168.180.22:26257
--certs-dir=/home/cockroach/CockroachDB/certs
--host=192.168.180.23 --background
检查CockroachDB是否正常启动
/home/cockroach/CockroachDB/cockroach sql
--port=26257 --host=192.168.180.23 -e "select 1"
至此,一个3节点3副本的集群搭建完成。
集群重启
1. 节点重启:单个节点重启可调用cockroach quit命令关闭cockroach进程,然后调用cockroach start 命令启动。
以节点192.168.180.21 为例:
1)关闭节点
/home/cockroach/CockroachDB/cockroach quit
--port=26257
--certs-dir=/home/cockroach/CockroachDB/certs
--host=192.168.180.21
2)重启节点
/home/cockroach/CockroachDB/cockroach start
--port=26257 --http-port=8080
--store=path=/ssd1/CockroachDB/cockroach-data
--join=192.168.180.21:26257
--join=192.168.180.22:26257
--certs-dir=/home/cockroach/CockroachDB/certs
--host=192.168.180.21
--background
2. 集群的重启:集群的重启:逐一关闭集群所有节点,再在所有节点上同时执行启动命令。与第一次搭建集群不同的是,所有节点的启动命令都必须带join参数:
1)集群的关闭方式:逐一关闭关闭节点192.168.180.21,192.168.180.22,192.168.180.23
2)集群的重启:同时在三个节点上运行各自启动命令,节点192.168.180.21启动命令如下:
/home/cockroach/CockroachDB/cockroach start
--port=26257 --http-port=8080
--store=path=/ssd/CockroachDB/cockroach-data
--certs-dir=/home/cockroach/CockroachDB/certs
--host=192.168.180.21 --join=192.168.180.21:26257
--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
/home/cockroach/CockroachDB/cockroach quit
--port=26257
--certs-dir=/home/cockroach/CockroachDB/certs
--host=192.168.180.21
2.替换新版本CockroachDB,并重启
/home/cockroach/CockroachDB/cockroach start
--port=26257 --http-port=8080
--store=path=/ssd1/CockroachDB/cockroach-data
--certs-dir=/home/cockroach/CockroachDB/certs
--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执行示例:
/home/cockroach/CockroachDB/cockroach sql
--port=26257 --host=192.168.180.21
--certs-dir=/home/cockroach/CockroachDB/certs
图中显示query: select * from node_queries执行的起始时间,client端地址等信息。依据query的起始时间可以判断该查询是否是慢查询。
2. 查看事务执行时间
查看长事务需要打开trace信息,在CockroachDB启动前做如下设置:
1)设置环境变量COCKROACH_ENABLE_TRACING
export COCKROACH_ENABLE_TRACING=true
2)设置cockroach内部变量setting server.remote_debugging.mode
/home/cockroach/CockroachDB/cockroach sql
--port=26257 --host=192.168.180.21
--certs-dir=/home/cockroach/CockroachDB/certs
-e " set cluster setting server.
remote_debugging.mode = 'any' "
例如查看运行超过0.1s的事务:
进入页面https://192.168.180.21:8080/debug/requests?fam=tracing&b=2&exp=1
图中日志显示的事务如下,执行了0.26s(test表大小为121776行) :
BEGIN TRANSACTION
SELECT count(1) FROM test.test
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有多年的内核开发经验及实践经验,对数据库和大数据领域有疑问或者需求欢迎联系我们,同时欢迎有志青年加入我们!
.................... 长按关注 ....................