【SOP 系列 14】OceanBase 集群单台机器故障后处理方法

模拟故障

集群对应的 obd yaml 附件: test999.yaml

test999.zip (1.6 KB)

kill observer 进程 、删除所有 OceanBase 的文件,模拟机器故障。

重建操作系统 IP 未变化

处理方法

1、新建替换后节点的 yaml 附件: zone2.yaml

zone2.zip (1.3 KB)

说明

该附件中的 IP 正常应该为替换后节点的 IP,这里仅是模拟,所以 IP 仍然为 199

2、部署第一步创建的节点

obd cluster deploy add_zone2 -c zone2.yaml

3、备份 obd 部署 test999 对应的 config.yaml 文件

image

4、修改 config.yaml 文件

修改故障节点的 IP 为新替换后的机器 IP,本次模拟测试,IP 没有变化。

5、obd cluster start test999

注意这里 start 的是 test999 而非 add_zone2

6、确认状态

select * from __all_rootservice_event_history order by gmt_create desc limit 5

select * from __all_server;

select * from __all_virtual_replica_task;

新机器 IP 变化

处理方法

1、删除对应的 observer 节点(报错)

报错:ERROR 4624 (HY000): machine resource ‘zone2’ is not enough to hold a new unit

2、修改租户 locality

select unit_id,unit_config_id,unit_config_name,resource_pool_id,resource_pool_name,zone,tenant_id,tenant_name,svr_ip,svr_port from gv$unit;

select * from gv$tenant ;

alter tenant sys locality='F@zone1,F@zone3';

select * from __all_rootservice_job where sql_text like '%alter tenant sys locality%' and gmt_create > '2022-09-19 17:30:00' \G

alter tenant test1 locality='F@zone1,F@zone3';

select * from __all_rootservice_job where sql_text like '%alter tenant test1 locality%' and gmt_create > '2022-09-19 17:50:00' \G

3、修改租户的 resource_pool_list

select * from __all_resource_pool;

由于 sys 租户的 resource pool 是复用的,需要 split 拆分成每个 zone 对应一个

alter resource pool sys_pool split into ('pool_sys_zone1','pool_sys_zone2','pool_sys_zone3') on ('zone1','zone2','zone3');

alter tenant sys resource_pool_list=('pool_sys_zone1','pool_sys_zone3');

alter tenant test1 resource_pool_list=('p1_zone1','p1_zone3');

4、删除 resouce pool

drop resource pool if exists pool_sys_zone2;

drop resource pool if exists p1_zone2;

5、删除对应的 observer 节点(成功)

alter system delete server '172.30.199.199:12882' zone 'zone2';

6、新建替换机器节点的 yaml 附件

zone2.zip (1.3 KB)

7、部署上一步创建的节点

obd cluster deploy add_zone2 -c zone2.yaml

8、obd cluster start test999

9、添加 server

alter system add server '172.30.199.199:12882' zone 'zone2';

10、租户添加副本

10.1 查看 unit

select * from __all_unit_config;

10.2 创建资源池

create resource pool pool_sys_zone2 unit 'sys_unit_config',unit_num=1,zone_list=('zone2');

create resource pool p1_zone2 unit 'u1_zone2',unit_num=1,zone_list=('zone2');

10.3 修改租户 resource_pool_list

alter tenant sys resource_pool_list=('pool_sys_zone1','pool_sys_zone2','pool_sys_zone3');

alter tenant test1 resource_pool_list=('p1_zone1','p1_zone2','p1_zone3');

10.4 修改租户 locality

alter system set server_data_copy_in_concurrency=10;

alter system set server_data_copy_out_concurrency=10;

alter tenant sys locality='F@zone1,F@zone2,F@zone3';

select * from __all_virtual_replica_task;

select * from __all_rootservice_job;

alter tenant test1 locality='F@zone1,F@zone2,F@zone3';

select * from __all_virtual_replica_task;

select * from __all_rootservice_job;

2 个赞

怎么强制删除呢

执行delete server的时候会做如下检查,如果不满足会报错退出。

  • 检查被delete的server上所有的partition,是否有足够多的F副本、paxos副本等信息。

  • 预检查该server上unit是否能够迁移到同zone其他的server上,查看其他机器上是否有充足的资源来存放该server上的unit。

这里的模拟场景就是1-1-1,即单个zone下只有一台observer,节点故障后,不满足将上面的unit迁移到同zone 其他observer上。

1 个赞