CockroachDB集群搭建和配置

CockroachDB集群搭建和配置

下载

  • 上crdb官网https://www.cockroachlabs.com/docs/releases/v2.0.5.html 找二进制包

    Production releases是已经GA的版本,Testing是最新的测试版本。

  • 选一个版本下载二进制包或者源码包:

    wget -q https://binaries.cockroachdb.com/cockroach-v2.1.0-beta.20180827.linux-amd64.tgz

    这个是目前最新8.27放出来的测试版本

  • 二进制包解压后直接可用。

集群搭建

  • 初始化集群。初始化集群有两种方法,一种是先启动一个节点不带--join参数,这样就会自动初始化一个单节点新集群,命令示例:

    ./cockroach start --insecure --host= --port=26257 --http-port=10166  --store=/ssd/fee/crdb/data  --log-dir=/ssd/fee/crdb/log --max-offset=100ms --max-sql-memory=.25 --cache=.25

    --port指定与其他节点以及client通信的端口,--http-port给监控工具Admin UI用,--store指定一个RocksDB实例的路径,一个store最好单独一个硬盘,一台机器可以启动多个store,一台机器上的多个store中不会有两个相同的副本存在, --max-offset指定集群最大的物理时间偏移,需要经过测试来确定最佳值,后两个flag前者指定分给所有session的内存总和,越大支持的并发度越高,后者指定RocksDB的cache大小。

    一种是初始化集群的节点ip和端口写在--join里面,命令示例:

    ./cockroach start  --join=:26257,:26257,:26257 

    然后同时启动这几个节点,并用命令:

    ./cockroach init  --host=

    两种初始化方式没有区别。

  • 后续的节点用--join指定集群中已有的任何节点(即最开始初始的节点宕掉也没关系)的地址即可加入集群。

  • 其他启动节点时的参数:--advertise-host作用跟tidb的那个差不多;--attrs指定节点特性,主要是跟Replication zones配合用的,可以根据这些特性来区分数据存放位置,示例:--attrs=ram:64gb说明该机器内存64;--certs-dir指定SSL证书地址,相关的内容业务迁移那个文档里面说了;--insecure非安全模式启动集群,即不用指定前面的TSL证书,一般测试时用;--locality指定节点地理位置,也是和Replication zone配合使用的;--max-disk-temp-storage超出内存的存入硬盘的最大临时空间大小。更详细的信息可以这里看:https://www.cockroachlabs.com/docs/stable/start-a-node.html

  • 负载均衡。一般来讲推荐使用HAProxy,安装好后,使用cockroach gen haproxy生成配置文件:

./cockroach gen haproxy  --host=
--port=26257

  deamon和nbproc主要是设置后台启动的进程数,并发高的时候一般八进程,httpchk跟check port用 来做节点健康检查,这个check port就是节点的http-port

​ 然后启动负载均衡:

./haproxy -f crdb.cfg &
  • 前面说的session内存和rocksdb cache分配,建议都是25%,可以根据实际情况测试决定用多少。

  • 文件描述符。最好不设限制,最低2w。1.5w给store使用,5k给网络使用。

集群参数配置

  • 这些参数配置更改需谨慎,更多细节看crdb优化文档和https://www.cockroachlabs.com/docs/stable/cluster-settings.html。需要注意的是改变这些参数不需要重启集群,直接在某个客户端使用SQL语句即可,但是由于gossip传播需要一定时间,所以不会立即生效(其实最多几秒就生效了)。SQL示例:

SHOW ALL CLUSTER SETTINGS; #显示所有集群配置
SET CLUSTER SETTING =?;  #设置某个集群配置

sql.trace.log_statement_execute,是否在log中记录执行的query,默认关闭,打开对性能稍有影响。

server.remote_debugging.mode,是否开启远程debug模式,这个主要是给Admin UI用的,里面有个debug页面,有线程,内存等很多底层细节信息。默认local即只能本地Admin UI用,设为any可以远程访问。

sql.distsql.temp_storage.workmem,分布式查询一个processor能够使用的最大内存,默认64M,对于大表join等不够用,会把多出的数据写入硬盘,但是调太大可能会爆内存,可以在需要join时调大,然后做完后设回去。

sql.distsql.merge_joins.enabled,默认开启,在需要时会使用merge join。

kv.snapshot_rebalance.max_rate,kv.snapshot_recovery.max_rate,这两个分别是平衡副本和恢复副本的速度,默认分别是2M/s和8M/s,调大可以加快恢复速度。

kv.bulk_io_write.max_rate,块写入的限速,默认8EB/s。这个最好设个合理的上限,不然可能会因为硬盘写入问题crash。

  • 还有两个重要的参数配置就是GC(garbage collection)历史数据回收的时间界限ttlseconds以及副本数量,这两个都是在Replication zone的默认配置文件default.yml中设置。

客户端连接

命令示例:

./cockroach sql --insecure --host= --port=26257 

--insecure模式则需要指定TSL证书地址,更多选项如指定连接服务器后执行语句--execute等选项的细节:https://www.cockroachlabs.com/docs/v2.1/use-the-built-in-sql-client.html。

停止节点

注意停止某个节点与下线某个节点不是一个概念,停止节点,该节点仍然是集群的组成部分,停止节点server.time_until_store_dead时间后集群认为该节点宕机会转移原本在该节点的副本数据,但该节点地址等信息仍然记录在集群中,如果该节点的数据没有丢失,那么重新加入节点后仍然作为原来宕机那个节点的身份,但如果数据丢失,那么即使该节点以同样的ip和端口加入集群,也会被认为是一个新节点,而原来宕机的那个节点身份依然存在集群中。

指令示例:

./cockroach quit --insecure --host= --port=26257

当停止的节点数量大于一般的副本数量时,整个集群就不可正常工作了,当仍然在运行中,直到所有节点被停止。

下线节点

下线(decommission)节点指令运行后会立即转移节点该节点数据,但要注意的是只有在有足够的节点数量来分布副本,比如三个节点且有三个副本,那么这时是不能下线节点的,因为没有更多的节点来承担转移的副本。集群比较大时下线是一个比较久的操作。节点下线后他的信息仍然存储在集群中,但是该节点不能再重新加入集群,除非使用recommission重新注册该节点。

  • 下线一个活着的节点:

./cockroach quit --decommission --insecure --host= --port=26257
  • 下线一个宕机的节点:

./cockroach node decommission 4 --wait=live --insecure --host= --port=26257

--wait=live指定仅需在集群活着的节点间确认下线信息即可,不设置会一直卡死在宕机节点确认这步直到timeout。4指的是节点的序号,可以在Admin UI找到或者通过cockroach node查看。

  • 重新上线节点:

./cockroach node recommission 4 --insecure --host= --port=26257

上线后重启节点即可。

你可能感兴趣的:(cockroachdb)