【 TiDB 使用环境】生产环境
【 TiDB 版本】7.5.0
【遇到的问题:本来只有一个TIKV节点 store_id=1 ,后面扩容了4个TIKV 节点,扩容后发现。 store_id=1 上面的所有所有 region 都是单副本,其他都是3副本,而且 大部分的region都集中在store_id=1上面。请问这是为啥,要怎么去解决这个呢
我理解,如果你在最开始部署的时候,只部署了一个tikv节点,那就不会存在follower,只会有个单副本,即使PD参数观察是副本数=3
是的呢,那要怎么处理呢 ,手动去添加副本吗?
可以先找个测试环境验证一下,模拟一下场景,试试可不可以通过缩容扩容的方式,将有问题这个store 1 先下掉,然后数据自动调度到其他store,然后再扩容回来能不能解决问题
试了下不掉,因为上面的region是单副本 ,下一直报错[2024/10/25 12:26:12.508 +08:00] [INFO] [peer.rs:5489] [“failed to propose”] [err=“EpochNotMatch current epoch of region 15309 is conf_ver: 2 version: 242, but you sent conf_ver: 1 version: 242”] [message=“header { region_id: 15309 peer { id: 15310 store_id: 1 } region_epoch { conf_ver: 1 version: 242 } } admin_request { cmd_type: ChangePeerV2 change_peer_v2 { changes { change_type: AddLearnerNode peer { id: 31297651274 store_id: 75003 role: Learner } } } }”] [peer_id=15310] [region_id=15309] [thread_id=0x5]
[2024/10/25 12:26:12.508 +08:00] [INFO] [pd.rs:1620] [“try to change peer”] [changes=“[peer { id: 31287713205 store_id: 75003 role: Learner } change_type: AddLearnerNode]”] [region_id=15089] [thread_id=0x5]
是因为只有一个副本 leader 转移不了吧
正常来说, 如果配置了 3 副本,即使启动的时候只有一台 TiKV,扩容之后,PD 也会自动将副本补到 3。
而这个日志中的错误,正是 PD 在尝试补副本(AddLearnerNode),但是失败了。
从日志看,失败的原因是 PD 中的 region 元信息不是最新的(conf_ver 不对,TiKV 中是 2,但 PD 是 1),因此被 TiKV 拒绝。
因此,问题可能出在 PD 的数据有问题,或者 TiKV 的心跳上报有问题。
那这种要怎么解决呢
你的每个 tikv label怎么配置的?
select store_id,address,label from information_schema.tikv_store_status
你就这3台主机吗? 在100上先扩一个tikv
是啊 三台机器,有个问题是100上面内存有点吃紧 。然后是线上环境
你说的1个节点 只有1副本,其他的是3副本这个怎么确定的。 你看下你说的1副本的找个region id 然后pd-ctl region xxx 看看具体的信息
还有就是 你那4个tikv的磁盘剩余空间是否充足?
就是只有 100上面的region 都是一个副本,其他机器上面是3副本。原来只有 是单机部署 只有100上面有一个TIKV,后面100内存有点吃紧 就开了2台扩容了4个TIKV ,想把100上面的 TIKV下掉,但是因为是100上面的region是单副本,下线一直报错
[2024/10/25 12:26:12.508 +08:00] [INFO] [peer.rs:5489] [“failed to propose”] [err=“EpochNotMatch current epoch of region 15309 is conf_ver: 2 version: 242, but you sent conf_ver: 1 version: 242”] [message=“header { region_id: 15309 peer { id: 15310 store_id: 1 } region_epoch { conf_ver: 1 version: 242 } } admin_request { cmd_type: ChangePeerV2 change_peer_v2 { changes { change_type: AddLearnerNode peer { id: 31297651274 store_id: 75003 role: Learner } } } }”] [peer_id=15310] [region_id=15309] [thread_id=0x5]
[2024/10/25 12:26:12.508 +08:00] [INFO] [pd.rs:1620] [“try to change peer”] [changes=“[peer { id: 31287713205 store_id: 75003 role: Learner } change_type: AddLearnerNode]”] [region_id=15089] [thread_id=0x5]
下不了线
重设下副本数试试,比如先
set config pd replication.max-replicas
=1;
再
set config pd replication.max-replicas
=3;
pd-ctl config show 看看
查过了max-replicas就是 3