新人入坑,求答疑

  • 【TiDB 版本】:v3.0.1
  • 【问题描述】: 1.raft协议应该是应用在tikv节点之上,那么pd的max_replica参数的意义是为了进一步提高数据的可靠性吗?比如填2就是6副本(2副本*raft3节点)的意思吗?

2.集群信息如下,我们需要大量导入数据,语句为: insert into x values() on duplcate key update y=y+1,z=z|value(z),唯一索引有4列,总8列。insert批量100个,观察qps达到1k左右时,在kv的面板里看到有写请求被堆积了(实际上这个堆ops堆积很低,对比360里的这篇分享https://www.v2ex.com/t/627238),但此时qps也降到0,持续时间超过10分钟。不敢断定tidb在干什么,担心用于生产环境出故障。

  1. 查看官网参数说明 https://pingcap.com/docs-cn/stable/reference/configuration/pd-server/configuration-file/#max-replicas
  2. 你们的表有没有id自增或者时间类的顺序写入列? 上传一下建表语句

1.我是有看过说明的,但这个副本数具体是什么意思呢?肯定不是raft group的副本概念,因为我设成1,tikv也是可以启动的。是不是可以理解为一个kv本来只在一个raft group里,也就是有三副本。pd的这个表示有几个raftgroup,也就是总的一个key value实际存储了 max_replica * raft副本(比如3) 份?

2.之前有,后面都删了。数据格式有时间,但主维度是用户,每个用户的时间分的很散,大概有3个月甚至1年以上。

CREATE TABLE x_action_x (

uid bigint(20) unsigned NOT NULL,

xdata char(64) NOT NULL DEFAULT ‘’,

xid bigint(20) unsigned NOT NULL,

xs bigint(10) unsigned NOT NULL DEFAULT ‘0’,

xa tinyint(10) unsigned NOT NULL DEFAULT ‘0’,

xc int(20) unsigned NOT NULL DEFAULT ‘0’,

add_ts datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,

flag int(20) unsigned NOT NULL DEFAULT ‘0’,

exact_ts datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (uid,xid,xdata,xa,add_ts,flag),

KEY uid_action_ts (uid,xa,add_ts),

KEY ts_action (add_ts,xa)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

补充下配置: TIDB 4节点,32核,64G,机械盘 PD 3节点 和TIDB复用 TIKV 7节点 32核 64G ssd

关于副本的问题,可以看下这篇博客 https://pingcap.com/blog-cn/tidb-internal-1/

仔细又看了下,region是按照raft协议复制,那为什么我把副本数[通过pd-ctl]设定=1,还是有效呢? tikv针对<3的副本配置做了什么吗?比如2退化主从,1退化单机?

1 副本宕机的话,直接就不可用了。如果是 2 副本的话,宕掉 1 个,剩余 1 副本既不能选举又不能提供服务。也是有问题的。

thx,我明白了,也就是复制就是基于raft做的。 可能我上次自测配1副本,但3节点都有数据是因为均衡的原因。

另外这个qps停顿可能是什么原因呢?

测试的话,试试最新版本 3.0.7,3.0.1 版本应该是还没有修复 QPS 掉底的问题。

这个已经准备用于生产环境了。 如果是因为数据迁移导致短暂的阻写,我觉得是可以接受的。

:+1::+1::+1: