oceanbase的在zone中的数据分布

oceanbase的社区版4.2.1.4
如果说我只有一个zone,但是我的zone里面有多台机器,对于一个真实的表的一行的数据,这个数据在这个zone是只能有一份吗,如果这台机器坏了,这份数据就没有了是吗

是的 单zone相当于是一个单机,可以看下这里的答案。 单张普通表的数据会打散吗?

明白,就是一条真实的数据在一个zone只会有一份数据,无论这个zone有多少台机器,那有关数据分布之类的这个有比较详细的文档参考可以发一下看看嘛

可以参考OceanBase分布式数据库-海量数据 笔笔算数

想问一下这样的设计理念是什么呢,一般设计来说,一个zone是一个可用区,对于具体的某一条数据来说,这个一般就是有多份的数据来实现高可用的,那云上的obcloud的一个可用区比如上海区就是对应实际会有多个zone的吧

还有个问题是既然这样的话,一个zone里面的机器的坏了,这个数据就没了,这个如何自动实现数据在同zone之间的不同机器的数据迁移呢

单个zone最多只能有一个副本,数据在同一个zone不同机器中间迁移是负载均衡的范围,多个是zone是来来做高可用的,不是同一个范畴。

那我的一个zone的机器的副本机器坏了,这个zone的这个副本怎么恢复过来呢

单副本时,要尽可能有备份和备库。传统集中式数据库也是这样。运维的容灾技术道理是相同的。否则,坏了就全没了。

备份可以是逻辑备份(obdumper导出)也可以是物理备份。

如果是一个非分区表,一个zone,就只有一个副本,那这个表就只会存在某一台服务器上。
如果是分区表,设置了多个unit(最大你服务器数量),那这个表可能会存在多台服务器上,因为OB是分区为最小粒度。

我是3zone3副本的时候怎么恢复那个坏zone的数据呢

要根据情况来看,如果没有超过永久下线server_permanent_offline_time的值,故障的zone恢复后会根据情况补齐clog,如果超过永久下线server_permanent_offline_time的值,故障的zone恢复后会同步全量的数据。

我怎么操作能主动恢复呢,等自动恢复时间比较长吧,有什么参考吗,目前版本4.2.1.4

明白,但本质上一个zone具体到某一条真实的数据就应该只有一份

是的。一个zone只有一份完整的数据。

没有明白需求是啥,是单副本转多副本,还是多副本zone故障恢复之后的副本补齐?补副本的东西是自动的,只需要把对应的zone的observer进程启动就行了。

是这样的,我是多zone,每个zone都有多台机器,如果一个zone的一台机器坏了,这个机器的数据不就是没了吗,我应该怎么操作才能手动恢复这个机器上的数据呢,就假设这台机器不能用了

如果机器故障无法修复的话,可以替换掉这个节点,OB会自动补齐副本的。

如果我机器替换好了,大概多久会开始自动修复呢,不能手动恢复吗

可以使用下列SQL查看补副本进度

SELECT TENANT_ID, JOB_ID, JOB_TYPE, JOB_STATUS, PROGRESS FROM oceanbase.DBA_OB_TENANT_JOBS WHERE JOB_TYPE = ‘ALTER_TENANT_LOCALITY’;

有停机窗口可以增大该值,增加副本迁移速度

可以调整ha_high_thread_score

show parameters like ‘%ha_high_thread_score%’;

alter system set ha_high_thread_score=50;

这个看怎么理解,把替换节点的增加副本操作看成手动修复也可以。OCP替换节点是自动的,黑屏下需要手动操作,副本同步的速度和网络及IO等因素有关。