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

CockroachDB应用接入指南

CockroachDB 2021-07-14
2848


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

数据库创建



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

节点列表

192.168.180.21:26257

192.168.180.22:26257

192.168.180.23:26257


安装目录

/home/cockroach/CockroachDB

证书目录

 /home/cockroach/CockroachDB/certs

版本信息

v1.0.4


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


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

$ cd home/cockroach/CockroachDB

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



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 增删改查的权限。


负载均衡




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


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

$ cd home/cockroach/CockroachDB

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

$ cat haproxy.cfg

global

maxconn 4096

defaults

mode tcp

# Timeout values should be configured for your specific use.

# See: https://cbonte.github.io/haproxy-dconv/1.8/configuration.html#4-timeout%20connect

timeout connect 10s

timeout client 1m

timeout server 1m

# TCP keep-alive on client side. Server already enables them.

option clitcpka

listen psql

bind :26257

mode tcp

balance roundrobin

server cockroach1 192.168.180.21:26257 check

server cockroach1 192.168.180.22:26257 check

server cockroach1 192.168.180.23:26257 check


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


本文在192.168.180.24上部署 HAProxy 进程,提供负载均衡服务:

1)配置 HAProxy 工作目录

$ mkdir home/haproxy/haproxy


2)启动 HAProxy

将配置文件 haproxy.cfg 放置在目录 /home/haproxy/haproxy 下,安装 HAProxy 后启动方式如下 :

$ haproxy -f haproxy.cfg -D


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

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


连接

 


连接集群所需信息如下:

库名

test

用户

tester

密码

testpasswd

入口

192.168.180.24: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.180.24: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.crtclient.tester.key。随后,DBA将证书ca.crtclient.tester.crt client.tester.key (三者缺一不可)交付业务,假定证书存放在目录 certs-tester 中,使用 cockroach 登录:

$ ./cockroach sql --user=tester --certs-dir=certs-tester --port=26257--host=192.168.180.24



2 ) psql 客户端

运行登录命令:

$ psql -h 192.168.180.24 -p 26257 -U tester -d test -W


按提示输入密码 testpasswd 即可登录。登录时可能会报错如下:

psql: SSL error: tlsv1 alert protocol version

ERROR: cleartext connections are not permitted


这是由于本地 openssl 或者 postgresql 版本太低导致,升级之后可以正常使用,推荐使用 CentOS 7 操作系统,避免上述问题。


3) Python 连接

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

$ pip install psycopg2

使用时可能遭遇psql客户端一样的问题,推荐使用 CentOS 7


Python连接数据库示例:

# Import the driver.

import psycopg2

# Connect to the "bank" database. 

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


conn = psycopg2.connect(database='test',user='tester',host='192.168.180.24'
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()





其他程序语言连接CockroachDB方法,请查看链接https://www.cockroachlabs.com/docs/stable/build-an-app-with-cockroachdb.html


CockroachDB SQL语法请参看链接https://www.cockroachlabs.com/docs/stable/sql-statements.html







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



关注我们  



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

评论