ob测试过程问题记录
1、安裝部署、擴(kuò)容、升級等部分較為順利,主要完成:
(1)OB單副本安裝測試
(2)OB三副本集群部署
(3)OBProxy安裝測試,請求轉(zhuǎn)發(fā)測試
(4)OCP2.4.3部署、并嘗試手工納管OB集群
(5)ODC部署和客戶端工具部署
(6)OB群集升級驗證
(7)集群在線彈性(擴(kuò)容和縮容)驗證
(8)租戶資源管理(創(chuàng)建、擴(kuò)容、縮容)驗證
遇到的問題:
(1)新老版本ocp安裝后,添加主機失敗,需要清理瀏覽器緩存才能成功
(2)添加主機對于mariadb包有依賴,將mysql包卸載安裝mariadb才能添加成功
(3)ocp的oracle租戶界面沒有【用戶管理】
(4)oms的增量同步功能有點問題;oms全量遷移20g數(shù)據(jù)4小時(跟源端庫的性能有關(guān)?)
(5)ocp英文版本有中文頁面
(6)oms同步任務(wù)經(jīng)常pending住,發(fā)現(xiàn)有些oms組件狀態(tài)異常,需要重啟oms docker或者此組件才能恢復(fù)
(7)ocp擴(kuò)容集群(增加zone)后,rootservice_list未把新增的zone加進(jìn)去,需要手動修改添加;刪除zone后也不會更新rootservice_list,需要手動修改移除
(8)命令行進(jìn)行備集群到新主集群的轉(zhuǎn)換,ocp上新主集群還是顯示備集群;新備集群顯示備集群;導(dǎo)致ocp無法進(jìn)行切主操作
(9)已經(jīng)將某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、功能驗證,發(fā)現(xiàn)oracle的大部分功能ob的oracle租戶都可以實現(xiàn),但少部分對oracle的支持不完善,主要完成:
(1)租戶生命周期管理驗證
(2)OB的連接(命令行、jdbc等)驗證
(3)C程序連接OB驗證
(4)OB的字符集的驗證
(5)系統(tǒng)參數(shù)(全局、租戶、zone)生效、日志輸出驗證
(6)資源健康監(jiān)控(全局資源、租戶資源等、性能等)驗證
(7)OB的SQL(DDL/DML/DCL)驗證
(8)大表在線的DDL驗證,可以實現(xiàn)dml過程中對大表ddl操作
(9)OB表組(Hash/List/Range)、表分區(qū)(Hash/List/Range)、索引功能驗證
(10)Oracle兼容性功能(觸發(fā)器、視圖、函數(shù)、dblink等)驗證
遇到的問題:
(1)c程序連接ob的oci接口函數(shù)不完整,研發(fā)在進(jìn)行中,升級obproxy到1.8.6暫時解決sql卡住問題
(2)ocp顯示的性能數(shù)據(jù)只能保留1周,后端不確定是否有更長時間之前的性能數(shù)據(jù)
(3)profile、Role等不支持
(4)索引rebuild不支持
(5)dblink可以創(chuàng)建,但引用時報錯"已驗證觸發(fā)器、視圖、存儲過程,待驗證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左右的數(shù)據(jù),超過報錯ORA-00600: internal error code, arguments: -6212, Statement is timeout),已通過升級obproxy解決
(8)分區(qū)表不支持分區(qū)交換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時的高可用和快速恢復(fù),已完成:
(1)OBserver三節(jié)點節(jié)點故障高可用驗證
(2)LVS三副本負(fù)載均衡obproxy的驗證
(3)管理節(jié)點(rootserver)、計算節(jié)點異常驗證
(4)重建故障節(jié)點驗證
(5)網(wǎng)卡、服務(wù)器、磁盤異常驗證
(8)群集異常掉電故障模擬驗證
遇到的問題:
(1)lvs配置有些問題
(2)集群斷電測試:需要先手動mount nfs,保證nfs目錄正常可用再起observer,否則日志備份失敗;
發(fā)現(xiàn)被接管的集群的所有observer都恢復(fù)正常,ocp才能正確顯示ob集群,否則會顯示ob集群不可用;
mount萬nfs后需要手動ALTER SYSTEM noarchivelog/archivelog重啟日志備份進(jìn)程;且obproxy若安裝在斷電的節(jié)點,需要手動起
集群重啟之后不能直接進(jìn)行增量備份,需要先進(jìn)行全備(全備之前要進(jìn)行合并),否則報錯
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備份進(jìn)程alter system noarchivelog/archivelog; ?
5、ob的備份恢復(fù)測試,邏輯備份obdump有些問題,已經(jīng)解決
(1)OB數(shù)據(jù)物理備份、恢復(fù)驗證
(2)OB數(shù)據(jù)邏輯備份、恢復(fù)驗證
(3)OB的回收站、閃回表、回滾表功能驗證
遇到的問題:
(1)obdumper導(dǎo)出對象定義暫時由于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)備份策略問題--黑屏應(yīng)該查詢哪張表
6、測試ocp告警發(fā)送到釘釘已完成
7、分布式事務(wù)能力(原子性、一致性、隔離性等)驗證
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萬分區(qū)(ob痛點,到3.1版本支持20萬分區(qū))
(2)ob不支持額外加主鍵(ob痛點),且create table as select * from 不會帶主鍵,建議create相同表結(jié)構(gòu)的表時直接create ,不建議主鍵多于4個字段
(3)ob的分區(qū)鍵一定要是主鍵的一部分(ob的痛點)
(4)ob的oci接口需要適配,螞蟻建議浩鯨列出oci列表,跟進(jìn)ob開發(fā);ob建議jdbc流式讀取
(5)ob初始化時就要指定足夠的盤大小,后期不能擴(kuò)磁盤(除非擴(kuò)機器或者重建節(jié)點)
(6)dml操作時不寫clog(較快),commit時才寫clog并落盤(commit較慢),且clog為順序io(wal);
(7)ob有保護(hù)機制,設(shè)置ob_trx_idle_timeout(默認(rèn)為120s),如果事務(wù)長時間不commit,會自動回滾事務(wù);建議跑批業(yè)務(wù)拆為多個短事務(wù)(間隔上千行)分批提交
(8)上線的oracle租戶不多,螞蟻建議使用oracle租戶(mysql租戶也不支持存儲過程)
(9)浩鯨提出國際項目(尤其歐洲)對第三方軟件(各種jar包)的合規(guī)性限制較大,需要螞蟻確認(rèn)下第三方軟件的合規(guī)性問題
(10)ob_query_timeout默認(rèn)是100s且不建議運維從集群層面調(diào)大,需要開發(fā)對長查詢加上hint或者在session層面調(diào)整
(11)tablegroup訂單表和訂單子表建議選擇分區(qū)數(shù)為數(shù)量較大的那個,避免分布式事務(wù)
(12)hash分區(qū)建議分區(qū)數(shù)不要太小(hash分區(qū)不能加分區(qū))
(13)變化數(shù)據(jù)都存儲在內(nèi)存,白天都是隨機讀,不落盤,晚上基于基線meger隨機寫;合并之前如果斷電,恢復(fù)時如果redo體量大,ob的策略是從其他副本全量拉數(shù)據(jù)
(14)oms同步最好讓ob廠家來搭建oms,否則同步可能會有問題
(15)不太建議使用二級分區(qū)
(16)多副本默認(rèn)只有主副本提供讀寫服務(wù)(除非指定弱一致性讀,不太推薦)
(17)建議初始設(shè)置primary zone來避免分布式事務(wù),建議unit=1
(18)建議全ssd(螞蟻內(nèi)部全flash卡),且要考慮clog直接落盤,需要配置高些(但ob的瓶頸不在io)
2、后期發(fā)展(ob3.x)
(1)高版本計算存儲分離
(2)完善對于oracle租戶的支持如dblink(ob-ob,ob-oracle的dblink)、分區(qū)交換等
3、零碎知識點
(1)tpcc測試:oracle租戶,阿里云上,上千臺主機,10%的分布式事務(wù)
(2)大部分副本所在的機房提供讀寫能力;跨城市最好遠(yuǎn)端城市為只讀副本;備集群可以只要一個副本(省資源)、也可以多副本
(3)內(nèi)存絕對隔離、cpu相對隔離,io不做隔離(ob的瓶頸不是io,是內(nèi)存或cpu)
(4)轉(zhuǎn)儲相當(dāng)于checkpoint;螞蟻每天合并5、6小時,(合并之前如果斷電,恢復(fù)時如果redo體量大,ob的策略是從其他副本全量拉數(shù)據(jù));三副本如果在合并之前全部斷電,只能等待應(yīng)用redo
(5)paxos協(xié)議:commit要等最少兩個副本返回成功(事務(wù)會有個事務(wù)超時時間120s,長事務(wù)或者大事務(wù)會導(dǎo)致自動回滾,);只讀副本不參與決策(只讀副本的observer的配置可以比其他observer低)
(6)主副本如果down掉,obproxy先去查down掉的主副本、發(fā)現(xiàn)不可用再去找其他的好的副本,時間會長些(obproxy的最大連接數(shù)8000)
(7)ob建議使用存儲過程;ob insert可以values多個(可以跟mysql一致)
(8)還原點:restorepoint(中間表結(jié)構(gòu)不能改變,只能查詢那個還原點的數(shù)據(jù),多一秒少一秒無法查詢)
(9)手動同步sequence時最大值增加一些
(10)clog大小建議內(nèi)存4倍
(11)sql審計對性能影響很小(旁路記錄),螞蟻內(nèi)部也是開的
(12)ob的lsm tree沒有碎片的概念;5c對應(yīng)10個線程(50 c++線程);可以ise加速sas
總結(jié)
以上是生活随笔為你收集整理的ob测试过程问题记录的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Java开发】Java实现黑客帝国代码
- 下一篇: 逆向游乐园第五关