$1, Raid和Cache Memory

通常,出於二個目標:安全和性能,我們在生產環境的服務器上會設置Raid功能。最常見的場景是,我們會由於安全性的考慮將磁盤設置成Raid 1 或Raid 5、Raid6等模式保障在一塊或多塊硬盤故障時數據不丟失。或者是由於Dis IO性能上的考慮將硬盤設置成Raid 0或Raid 10來擴展有限的IO。

無論DELL/HP/IBM等服務器廠商,都會OEM一些Raid控制器在實現Raid功能,而為了保障和提升讀寫性能,Raid控制卡裏都會內置128MB 至 1GB不等的Cache Memory,而我們對磁盤的讀和寫操作都會通過事先在Cache Memory中Hit或緩存,這樣一來就可以大大提高了實際IO性能。

OS也認為只要讀或寫到Cache Memory以後即算操作成功,而Cache Memory中的數據如何Flush到物理磁盤中的Policy控制則由Raid控制器來解決。這種通過寫入Cache Memory的Policy我們稱為WriteBack,而如果不通過Cache Memory直接寫入磁盤的Policy我們稱為WriteThrough。

任何一條數據寫入Memory和寫入磁盤的性能差別之巨大,不用比較都可想像得到是天壤之別。特別是當我們遇到MySQL等數據庫或其他IO要求壓力非常大的環境,這是我們實際生產環境中不得不要考慮的因素。

$2, BBU,TBBU在實際應用中的問題和運維

什麼是BBU/TBBU呢?其實BBU就是Raid卡中的一個電池備用模塊,因為之前我們說到在Raid的環境下很多情況下數據都是通過Cache Memory和磁盤交換的,而Memory本身並無法保障數據持久性,萬一電源中斷,而數據沒來得及flush到物理磁盤上,就會造成數據丟失的悲劇。為此硬件廠商提供了BBU和TBBU,其中包含了一塊鋰電池來保障萬一電源中斷的情況下,Cache Memory中的數據不至於丟失,直至電源恢復。TBBU的不同區別是Cache Memory和電池是做成一個模塊,以防止Raid控制器如果硬件故障的時候,在更換Raid控制卡過程中可以不更換TBBU及其中的Cache Memory,防止這一過程中的數據不丟失。

就是這麼樣的一個模塊,如圖:

           正是由於使用電池做為持續Memory是數據的可靠性,而存在一個尷尬的隱患。以目前的技術水平,電池是不可以長期不充放電的,否則會造成電池損壞而無法起到保護數據的特性。所以Raid卡廠商在設計BBU/TBBU中加入了一個自動充放電的維護過程,每過一段時間(通常是數個月左右)會自動對電池放電,然後再自動充電,以保證電池的可用性。

而在電池放電的時候,出於數據安全性的考慮,Cache Policy默認從WriteBack改成WriteThrough。這段時間會持續數小時或更久,IO性能會因此大幅下降,如果正好這個時間你有數據庫或其他大量IO壓力的服務,性能會急劇下降,如果系統沒有足夠的Capacity的話,嚴重的話會導致服務可用性的賁潰。

為了防止出現這種情況,通常業內大家會使用各種想法:

a) 給系統留出足夠的Capacity,即使WriteThrough的時候也可以保障服務的性能是可接受的

b) 自動或半自動的地設定在系統負載最低的時候提前去觸發電池的充放電過程

c) 將Cache Policy設置為CachedBadBBU,也就是即使在充放電過程中,還是使用寫入Cache的WriteBack,而不是默認的WriteThrough,這存在的風險是這一過程中的服務器電源中斷會造成數據丟失,這不是一個最安全的選擇,但如果業務上可以接受這個風險,如果Data Center的供電足夠安全,如果服務器有冗餘的電源的話,未必不是一個好的選擇。

d) 當A服務器發生這一情況時能自動或半自動地切換到Backup的節點上,必竟二臺服務器同時發生這一自動維護過程是不太可能的,但同一批次的服務器是有可能的,並且這可以從時間和過程中去人工調節。

e) 從軟件、業務程序上來保障對數據持久性或一致性的取捨。

目前國內大家常用的DELL和HP服務器多數都已經集成了LSI公司的Raid控制器,以上的這些狀態和Policy的調整在Linux中都可以通過其MegaCLI工具包操作:

$3, ZMCP,CacheCade技術的原理和應用

單從硬件運維角度來看,BBU和TBBU帶來的Cache Policy問題如果在幾百臺或上千臺服務器環境下維護將會是一個非常繁瑣的過程,除非從軟件上來對安全性和數據一致性的取捨。

所以新的一代的Raid控制器出現了另一種選擇。其中Adaptec公司提供了ZMCP模塊,而LSI公司提供了CacheCade的軟件支持。

ZMCP就是Zero-Maintenance Cache Protection的意思,在支持ZMCP的Raid控制器上加裝一個ZMCP模塊將不再依賴電池對Cache Memory的保護,而是通過SLC的Flash NAND和電容來保證在電力中斷時數據的可靠性:

而LSI的CacheCade是一個軟件的License,可以支持通過SSD來持久化Cache Memory,而不是通過不能持久化的Memory。優點是可以讓Cache Memory更大,並缺點也顯而易見。

從性能上的測試來看明顯ZMCP會占有優勢,但同時也是成本上的劣勢。而且無論是哪種新的技術都暫時性地會帶來相對BBU/TBBU技術的成本增加,出於成本上的考慮,所以目前大部分DELL/HP服務器依舊會OEM原有的方案。

但是從更專業的業務環境下去定制的服務器上,在軟件、性能、硬件等方面做更合適自己的取舎將是給每個人更自由的選擇範圍。在此希望我在實踐和看到的information希望能給到大家有益的幫助。

$4, 引用和參考資料

  • Dell™ PowerEdge™ 可扩充 RAID 控制器 5/i 和 5/E 用户指南
    ftp://ftp.dell.com/Manuals/all-products/esuprt_ser_stor_net/esuprt_dell_adapters/poweredge-rc-5i_User's%20Guide_zh-cn.pdf
  • Dell h700 adaptor vs integrated 的分別
    http://www.hkepc.com/forum/viewthread.php?tid=1681179
  • 零维护缓存保护 Zero-Maintenance Cache Protection
    http://www.adaptec.com/nr/pdfs/cn-ZMCP_wp.pdf
  • LSI® MegaRAID® CacheCade™ Pro 2.0 Read/Write Caching Software
    http://www.lsi.com/downloads/Public/Advanced%20Software/LSI%20MegaRAID%20CacheCade%20Software/CacheCadePro2_PB.pdf

原文发布时间为:2014-01-22

本文来自云栖社区合作伙伴“Linux中国”

淺談Raid Cache Memory上應用的問題和實踐相关推荐

  1. jQuery 在 IE 上 clone checkbox 的問題。

    前陣子在處理客戶更改版面的需求時,為了偷懶,結果發現了一個 jQuery 在 IE 上 clone 元素的問題. 先簡單說明一下例子: 如上圖所示,我希望在按下「複製」按鈕後,藍色區塊中的 check ...

  2. android webview fragment,android studio中Fragment使用webview返回上一頁的問題

    在Fragment中使用了騰訊的X5 webview,雖然好用,但是在Fragment中傳遞消息困難,想要返回上一頁,還得各種消息傳遞什么的,麻煩.可是在Fragment中又不能使用onKeyDown ...

  3. delphi每次mysql密码BDE_关于DELPHI中BDE连接不上ORACLE数据库的問題

    Delphi连接Oracle数据库的三种方式 Oracle是以高级结构化查询语言(SQL)为基础的大型关系数据库,是目前最流行的客户/服务器(CLIENT/SERVER)体系结构的数据库之一,目前被广 ...

  4. [修練營ASP.NET]淺談多層式架構 (Multi Tiers)

    從需求談起 我們舉個小例子來理解一般的方式與多層的方式有何不同 假設:我需要顯示最近三個月內,所有營業員的銷售金額成績排名 一般的做法: 在一個畫面中,拉個GridView,一個SqlDataSouc ...

  5. 修練營ASP.NET]淺談多層式架構 (Multi Tiers)

    從需求談起 我們舉個小例子來理解一般的方式與多層的方式有何不同 假設:我需要顯示最近三個月內,所有營業員的銷售金額成績排名 一般的做法: 在一個畫面中,拉個GridView,一個SqlDataSouc ...

  6. 淺談 Java VM 發展

    標題:淺談 Java VM 發展 作者:Jim Huang (黃敬群) 版權宣告:允許在保留作者.出處,以及本宣告的前提下,以任何人類可讀之形式           自由散佈 最後更新:Apr 16, ...

  7. Cache Memory技术示例

    Cache Memory技术示例 为什么需要cache?如何判断一个数据在cache中是否命中?cache的种类有哪些,区别是什么? 为什么需要cache memory 先思考第一个问题:程序是如何运 ...

  8. 《浅谈Cache Memory》 学习-第一章

    序 近些年,我在阅读一些和处理器相关的论文与书籍,有很多些体会,留下了若干文字.其中还是有一片领域,我一直不愿意书写,这片领域是处理器系统中的Cache Memory.我最后决定能够写下一段文字,不仅 ...

  9. 《浅谈Cache Memory》 学习-第四章

    Cache的层次结构 我第一次接触存储器瓶颈这个话题是在上世纪九十年代,距今已接近二十年.至今这个问题非但没有缓和的趋势,却愈演愈烈,进一步发展为Memory Wall.在这些问题没有得到解决之前,片 ...

最新文章

  1. 数组扩容 java_java 实现数组扩容与缩容案例
  2. 【前沿技术】Facebook 硬件负责人,带摄像头的智能眼镜将在 10 年内成为常态
  3. 3、基于多播、安全认证的corosync集群(VIP、Httpd、Filesystem)
  4. Spring基于注解的AOP配置
  5. leetcode 349. 两个数组的交集 两种方案,c语言实现
  6. 阿里云实时数仓Hologres年度发布,解读数仓新趋势
  7. 元气骑士如何获得机器人成就皮肤_元气骑士:9大英雄特典皮肤2技能特效优化,“颜控”玩家有福了...
  8. IBM GTS部门或有重大调整,最快本周见分晓
  9. Joseph UVA 1452 Jump
  10. 北大青鸟linux运维,北大青鸟幸福IT学院:Linux运维学习路线,实用Linux教程,推荐学习收藏...
  11. PSIFT:Pore Scale-invariant feature transform;毛孔尺度不变特征点
  12. ubuntu 8000端口被占用
  13. 微商城分销系统的怎么选择_有没有免费开源支持多端的_OctShop
  14. PS 2019 Mac版 自学入门系列(十)—— 自定义黑白
  15. Python自学笔记——基础篇
  16. 【数据结构】哈希表——线性探测法、链地址法、查找成功、查找不成功的平均长度
  17. OK6410A 开发板 (八) 6 linux-5.11 OK6410A 详细解析 从 u-boot 的 theKernel 到 linux的 start_kernel
  18. 吃透Chisel语言.32.Chisel进阶之硬件生成器(一)——Chisel中的参数化
  19. js websocket同步等待_javascript – 如何等待WebSocket的readyState更改
  20. 对Android APK文件反编译查看其源码

热门文章

  1. xmlWriter以UTF-8格式写xml问题
  2. Oracle: 数字前面自动补0几种方式
  3. UVA - 673 (括号的匹配)
  4. pycharm远程开发项目
  5. linux iptables 详解
  6. 1月12日,HTML学习笔记2
  7. 50个Android开发人员必备UI效果源码[转载]
  8. JQ之赋值方法,new的区别
  9. sftp取代ftp的之后的权限设置
  10. python pexpect 模块