閱讀本文前建議先閱讀云梯跨機房方案介紹,了解云梯跨機房項目背景,難點以及解決方案。本文重點介紹下跨機房
測試的整體解決方案
測試用例管理:http://kelude.taobao.net/testsuites?project_id=12202
數據安全性測試
數據安全簡單的說就是不能丟數據,跨機房后集群規模到達近萬臺,數據存儲到達數百PB,如何確保數據安全是一個很大的挑戰
在跨機房的情況下,我們通過(Sange、Slive、DFSIO)模擬線上比例的各種混合性操作,通過NN的FSCK, CN的 CrossCheck工具定位異常數據如CORRUPT,一直處于BEING WRITTEN無法關閉的文件,跨機房失敗的文件
數據安全性測試里需要考慮的一種重要場景是NN和DN重啟,在實際的升級過程中,在集群重啟前各業務線并沒有停止讀寫數據,重啟后數據的一致性和可恢復性非常重要;在實際的跨機房測試中我們曾發現一個因為重啟后狀態不一致導致無法加載EDITLOG從而使NN無法啟動的BUG,如果這種問題發生到線上,后果不堪設想
性能測試的關鍵點是如何建立性能基準,對線上性能進行準確評估,跨機房測試性能基準工具主要包括:
DFSIO: HDFS I/O(讀寫) 性能基準
Slive: 主要模擬線上各種RPC,在每個TASK發起混合型RPC操作,并可以指定文件和block大小,該工具可以同時測試NN和DN的性能;
Sange: 主要模擬線上各種RPC操作壓力,在每個TASK啟動大量Thread進行混合性RPC操作 ,對NN產生壓力,進而評估NN RPC 處理能力;SANGE工具不能指定文件和Block大小,會產生大量小文件,比SLIVE對NN可以產生更大的RPC壓力
Terasort:MapReduce 數據排序能力基準
Gridmix :Gridmix和Rumen結合可以模擬和生產作業相應的負載,更真實的模擬生產環境
SmallJobBench:通過創建大量sleep job到不同group來測試jobtracker性能
SubmitJobBench:通過每個map啟動(-nThreads)個線程,每個線程順序提交(-nTasks)個作業, 每個線程有自己的獨立賬號,來模擬線上多賬號并行度2K情況下JTProxy性能
跨機房性能主要對比場景:
主要針對上述場景進行性能對比和評估包括NN帶寬,內存,CPU load, NN RPC 指標, NN 各個operation的吞吐量(opsper second)和平均執行時間, NN同步editlog性能指標,跨機房帶寬流量,跨機房復制速率,跨機房副本刪除速率,CROSSFSCK時間
跨機房測試還有很重要的一點是要保證計算一定優先從本機房讀數據,除非本機房沒有數據才會跨機房讀;實際測試中TERASORT跨機房讀對比本機房讀性能會有32%左右的下降,而且對帶寬也是很大的浪費。
重要性能指標參考:
1. cpu_user 2. cpu_wio 3. mem_free 4. bytes_in 5. bytes_out 6. load_five 7. total-iops 8. total-ReadBytes 9. total-WriteBytes 10. dfs.namenode.Syncs_avg_time 11. dfs.namenode.Syncs_num_ops 12. dfs.namenode.Transactions_num_ops 13. rpc.metrics.RpcProcessingTime_avg_time 14. rpc.metrics.RpcQueueTime_avg_time 15. rpc.metrics.RpcProcessingTime_num_ops 16. rpc.metrics.delayedCallsQueueLen 17. rpc.metrics.RpcQueueTime_num_ops 18. rpc.metrics.addBlock_num_ops 19. rpc.metrics.append_num_ops 20. rpc.metrics.create_num_ops 21. rpc.metrics.delete_num_ops 22. rpc.metrics.getFileInfo_num_ops 23. rpc.metrics.getListing_num_ops 24. rpc.metrics.listCorruptFileBlocks_num_ops 25. rpc.metrics.mkdirs_num_ops 26. rpc.metrics.rename_num_ops 27. rpc.metrics.RpcProcessingTime_num_ops 28. rpc.metrics.RpcQueueTime_num_ops 29. rpc.metrics.blockReport_num_ops 30. rpc.metrics.blockReceivedAndDeleted_num_ops 31. rpc.metrics.sendHeartbeat_num_ops 32. rpc.metrics.rollEditLog_num_ops 33. rpc.metrics.getBlockLocationsHA_num_ops 34. rpc.metrics.getBlockLocations_num_ops |
壓力測試
壓力測試和性能測試關系緊密,壓力測試更側重于在線上最大壓力的情況下系統是否可以正常工作,性能測試則側重于新上線的版本是否有性能下降問題,主要是基于基準進行性能對比
壓力測試比較難的一點是如何在小規模的測試集群模擬線上真實的壓力,基本思路是 啟動MR程序, 每個Task啟動多個Thread,在每個thread進行大量模擬操作,NN和DN壓力測試我們可以用到SANGE和Slive,JTPROXY壓力測試可以用到SubmitJobBench,JT壓力測試可以用到SmallJobBench和GurgleClient(TaskTracker模擬器)
跨機房壓力測試主要是評估crossnode的自身壓力和crossnode對namenode、datanode的壓力影響;crossnode對namenode壓力主要體現在RPC的請求,對datanode的壓力目前主要體現在帶寬和磁盤上
數據準備:利用SLIVE工具產生跟線上一樣數量的Block和文件數
跨機房壓力主要場景:
穩定性測試
構建BI仿真實驗室,模擬整個云梯跨機房項目變更流程,運行BI線一日的作業,查看作業運行情況和做數據產出對比,驗證跨機房后數據的正確性和業務線運行時間是否受影響
總結
整個項目過程中,測試人員共發現有效bug 100多個,其中5個bug嚴重影響性能,10個bug可能導致丟數據,4個bug會導致服務不可用
本文主要是跨機房的測試整體介紹,整個跨機房測試是一個非常復雜的過程,可能大家覺得不是很過癮,后續會進行跨機房測試經典BUG和工具分享,敬請期待