ob测试过程问题记录

1、安装部署、扩容、升级等部分较为顺利,主要完成:

(1)OB单副本安装测试

(2)OB三副本集群部署

(3)OBProxy安装测试,请求转发测试

(4)OCP2.4.3部署、并尝试手工纳管OB集群

(5)ODC部署和客户端工具部署

(6)OB群集升级验证

(7)集群在线弹性(扩容和缩容)验证

(8)租户资源管理(创建、扩容、缩容)验证

遇到的问题:

(1)新老版本ocp安装后,添加主机失败,需要清理浏览器缓存才能成功

(2)添加主机对于mariadb包有依赖,将mysql包卸载安装mariadb才能添加成功

(3)ocp的oracle租户界面没有【用户管理】

(4)oms的增量同步功能有点问题;oms全量迁移20g数据4小时(跟源端库的性能有关?)

(5)ocp英文版本有中文页面

(6)oms同步任务经常pending住,发现有些oms组件状态异常,需要重启oms docker或者此组件才能恢复

(7)ocp扩容集群(增加zone)后,rootservice_list未把新增的zone加进去,需要手动修改添加;删除zone后也不会更新rootservice_list,需要手动修改移除

(8)命令行进行备集群到新主集群的转换,ocp上新主集群还是显示备集群;新备集群显示备集群;导致ocp无法进行切主操作

(9)已经将某observer从集群中删除,ocp上主机信息【所属OB集群】仍显示属于这个ob集群,需要更新源库

obclient> update compute_host set status='AVAILABLE' where name='ob2';

Query OK, 1 row affected (0.00 sec)

obclient> delete from compute_host_service where host_id=1000011;

Query OK, 1 row affected (0.01 sec)

2、功能验证,发现oracle的大部分功能ob的oracle租户都可以实现,但少部分对oracle的支持不完善,主要完成:

(1)租户生命周期管理验证

(2)OB的连接(命令行、jdbc等)验证

(3)C程序连接OB验证

(4)OB的字符集的验证

(5)系统参数(全局、租户、zone)生效、日志输出验证

(6)资源健康监控(全局资源、租户资源等、性能等)验证

(7)OB的SQL(DDL/DML/DCL)验证

(8)大表在线的DDL验证,可以实现dml过程中对大表ddl操作

(9)OB表组(Hash/List/Range)、表分区(Hash/List/Range)、索引功能验证

(10)Oracle兼容性功能(触发器、视图、函数、dblink等)验证

遇到的问题:

(1)c程序连接ob的oci接口函数不完整,研发在进行中,升级obproxy到1.8.6暂时解决sql卡住问题

(2)ocp显示的性能数据只能保留1周,后端不确定是否有更长时间之前的性能数据

(3)profile、Role等不支持

(4)索引rebuild不支持

(5)dblink可以创建,但引用时报错"已验证触发器、视图、存储过程,待验证dblink、package

obclient> select * from DBLIBK_TEST.t1@mylink;

ERROR:

Unknown Error

obclient> select * from TEST.t1@mylink;

ORA-01861: literal does not match format string

"

(6)对无主键表添加主键不支持

obclient> alter table test_acid_a add primary key(id);

ORA-00600: internal error code, arguments: -4007, Not supported feature or function

obclient>

(7)批量插入只支持10000左右的数据,超过报错ORA-00600: internal error code, arguments: -6212, Statement is timeout),已通过升级obproxy解决

(8)分区表不支持分区交换exchange partition?

(9)dba_segments不包含所有表?

(10)查询gv$partition中不存在的租户报timeout

set session ob_query_timeout=1000000000;

obclient> select * from gv$partition where tenant_id='10001';

ERROR 4012 (25000): Statement is timeout

obclient> select tenant_id from  gv$partition group by tenant_id;

+-----------+

| tenant_id |

+-----------+

|         1 |

|      1003 |

+-----------+

2 rows in set (0.15 sec)

(11)

3、性能验证整体没问题,已完成

(1)benchmarksql对OB集群性能测试

(2)Jmeter简单测试OB

(3)OB集群启停时间验证

4、ob高可用测试符合paxos,能保证某个zone down时的高可用和快速恢复,已完成:

(1)OBserver三节点节点故障高可用验证

(2)LVS三副本负载均衡obproxy的验证

(3)管理节点(rootserver)、计算节点异常验证

(4)重建故障节点验证

(5)网卡、服务器、磁盘异常验证

(8)群集异常掉电故障模拟验证

遇到的问题:

(1)lvs配置有些问题

(2)集群断电测试:需要先手动mount nfs,保证nfs目录正常可用再起observer,否则日志备份失败;

发现被接管的集群的所有observer都恢复正常,ocp才能正确显示ob集群,否则会显示ob集群不可用;

mount万nfs后需要手动ALTER SYSTEM noarchivelog/archivelog重启日志备份进程;且obproxy若安装在断电的节点,需要手动起

集群重启之后不能直接进行增量备份,需要先进行全备(全备之前要进行合并),否则报错

2021-02-24 16:40:02.169 ERROR 55 --- [         task-9,4616ae5921df434e,1ec1d0662bc7] c.a.o.s.o.b.PhysicalBackupTaskService    : data backup pre-check failed, full data backup needed before incremental data backup

log archive status is interrupted,需要重启下log备份进程alter system noarchivelog/archivelog;  

5、ob的备份恢复测试,逻辑备份obdump有些问题,已经解决

(1)OB数据物理备份、恢复验证

(2)OB数据逻辑备份、恢复验证

(3)OB的回收站、闪回表、回滚表功能验证

遇到的问题:

(1)obdumper导出对象定义暂时由于ob版本问题搁置(已升级到2.2.76解决

(2)过期的备份不能自动删除,黑屏删除命令有问题

obclient> ALTER SYSTEM SET DELETE OBSOLETE;

ORA-00900: You have an error in your SQL syntax; check the manual that corresponds to your OceanBase version for the right syntax to use near 'DELETE OBSOLETE' at line 1

(3)备份策略问题--黑屏应该查询哪张表

6、测试ocp告警发送到钉钉已完成

7、分布式事务能力(原子性、一致性、隔离性等)验证

obclient> set session ob_query_timeout=1000000000;

Query OK, 0 rows affected (0.00 sec)

obclient> delimiter //

declare

obclient> declare

   -> i number;

   -> rand number;

   -> begin

   -> for i in 1..99999 loop

   -> update test_acid_a set col1=i where id=1;

   -> update test_acid_a set col1=i where id=2;

   -> update test_acid_a set col1=i where id=3;

   -> update test_acid_a set col1=i where id=4;

   -> update test_acid_a set col1=i where id=5;

   -> update test_acid_a set col1=i where id=6;

   -> update test_acid_a set col1=i where id=7;

   -> update test_acid_a set col1=i where id=8;

   -> update test_acid_a set col1=i where id=9;

   -> update test_acid_a set col1=i where id=10;

   -> update test_acid_a set col1=i where id=11;

   -> update test_acid_a set col1=i where id=12;

   -> select dbms_random.random into rand from dual;

   ->     if mod(rand,2)=1 then

   ->             commit;

   ->         else

   ->             rollback;

   ->         end if;

   -> end loop;

   -> end;

   -> //

ORA-00600: internal error code, arguments: -6212, Statement is timeout

obclient> delimiter ;

8、ob专家来宁交流问题记录

1、使用ob需要注意的点

(1)每个observer建议不超过5万分区(ob痛点,到3.1版本支持20万分区)

(2)ob不支持额外加主键(ob痛点),且create table as select * from 不会带主键,建议create相同表结构的表时直接create ,不建议主键多于4个字段

(3)ob的分区键一定要是主键的一部分(ob的痛点)

(4)ob的oci接口需要适配,蚂蚁建议浩鲸列出oci列表,跟进ob开发;ob建议jdbc流式读取

(5)ob初始化时就要指定足够的盘大小,后期不能扩磁盘(除非扩机器或者重建节点)

(6)dml操作时不写clog(较快),commit时才写clog并落盘(commit较慢),且clog为顺序io(wal);

(7)ob有保护机制,设置ob_trx_idle_timeout(默认为120s),如果事务长时间不commit,会自动回滚事务;建议跑批业务拆为多个短事务(间隔上千行)分批提交

(8)上线的oracle租户不多,蚂蚁建议使用oracle租户(mysql租户也不支持存储过程)

(9)浩鲸提出国际项目(尤其欧洲)对第三方软件(各种jar包)的合规性限制较大,需要蚂蚁确认下第三方软件的合规性问题

(10)ob_query_timeout默认是100s且不建议运维从集群层面调大,需要开发对长查询加上hint或者在session层面调整

(11)tablegroup订单表和订单子表建议选择分区数为数量较大的那个,避免分布式事务

(12)hash分区建议分区数不要太小(hash分区不能加分区)

(13)变化数据都存储在内存,白天都是随机读,不落盘,晚上基于基线meger随机写;合并之前如果断电,恢复时如果redo体量大,ob的策略是从其他副本全量拉数据

(14)oms同步最好让ob厂家来搭建oms,否则同步可能会有问题

(15)不太建议使用二级分区

(16)多副本默认只有主副本提供读写服务(除非指定弱一致性读,不太推荐)

(17)建议初始设置primary zone来避免分布式事务,建议unit=1

(18)建议全ssd(蚂蚁内部全flash卡),且要考虑clog直接落盘,需要配置高些(但ob的瓶颈不在io)

2、后期发展(ob3.x)

(1)高版本计算存储分离

(2)完善对于oracle租户的支持如dblink(ob-ob,ob-oracle的dblink)、分区交换等

3、零碎知识点

(1)tpcc测试:oracle租户,阿里云上,上千台主机,10%的分布式事务

(2)大部分副本所在的机房提供读写能力;跨城市最好远端城市为只读副本;备集群可以只要一个副本(省资源)、也可以多副本

(3)内存绝对隔离、cpu相对隔离,io不做隔离(ob的瓶颈不是io,是内存或cpu)

(4)转储相当于checkpoint;蚂蚁每天合并5、6小时,(合并之前如果断电,恢复时如果redo体量大,ob的策略是从其他副本全量拉数据);三副本如果在合并之前全部断电,只能等待应用redo

(5)paxos协议:commit要等最少两个副本返回成功(事务会有个事务超时时间120s,长事务或者大事务会导致自动回滚,);只读副本不参与决策(只读副本的observer的配置可以比其他observer低)

(6)主副本如果down掉,obproxy先去查down掉的主副本、发现不可用再去找其他的好的副本,时间会长些(obproxy的最大连接数8000)

(7)ob建议使用存储过程;ob insert可以values多个(可以跟mysql一致)

(8)还原点:restorepoint(中间表结构不能改变,只能查询那个还原点的数据,多一秒少一秒无法查询)

(9)手动同步sequence时最大值增加一些

(10)clog大小建议内存4倍

(11)sql审计对性能影响很小(旁路记录),蚂蚁内部也是开的

(12)ob的lsm tree没有碎片的概念;5c对应10个线程(50 c++线程);可以ise加速sas

你可能感兴趣的:(oceanbase)