你以為的MongoDB副本集的高可用是真的高可用了嗎?


  很久沒來更新博客,自感是一個只會搬磚的勞工,總搞些MySQL相關的數據庫實在無聊,且時不時遇到些不講道理的Dev吧,真的是心累至極,有種想回頭我也去干開發的沖動,當個需求者有話語權要風得風,要雨得雨多帥。以上純屬個人小目標,萬一哪天實現了呢,豈不美滋滋,從此走上人生巔峰,頓覺做技術不再那么枯燥了。

       最近接觸了另一種當下比較流行的MongoDB數據庫,不覺又get了一項新技能,可以與人“侃侃而談”了。談點兒個人感受吧,MongoDB是一個非常不錯的文檔型數據庫,一些覺得MySQL數據庫存儲json文檔維護成本高可以放到MongoDB;不借助其他第三方工具實現高可用和分片功能,這類似與MySQL的MHA、MMM,實現了高可用的故障切換,保障了服務可用;另一大特性分片可以實現數據的分部均衡,大數據量的時候通過路由實現了服務器的負載均衡,這個功能實現了網易前段時間開源的Cetus的功能,但自帶的工具兼容性會好一些,維護起來也方便。

        我剛接觸MongoDB也覺得這種數據庫開發者很仁義,不僅提供了一個新型的場景數據庫,還想到了服務高可用,甚至延伸到了另一個階段數據量上來了,服務器單集群或者機器性能不足的問題。可是真當遇到了,你真的會以為高可用就能高可用了嗎?如果你告訴我MongoDB自帶的投票機制可以,那待我分享下最近的兩次慘痛經歷,你還會相信絕對嗎?

        MongoDB的OOM問題:MongoDB是最近才交付給DB運維的數據庫,之前一直由op進行維護,可以講公司以及集團內部熟悉MongoDB的人幾乎沒有,so配置文件很粗糙,對於內存沒有做限制。終於有一天一個復用的MongoDB集群不堪忍受爆發了,大致是datavisor的任務多個進程,單進程占用了12G內存,MongoDB也沒有做內存限制,半夜3點、6點分別出現OOM宕機事故。可氣的是半夜宕機呀,誰能忍受。宕了一台也就算了,集群另一台也因為同樣的問題GG了,然后服務不可用。告警出現disaster級別,領導各種指導,一頓忙活(限制MongoDB內存,讓出資源給datavisor使用)終於解決了這個連續兩天集群宕機的故障。(MongoDB是一種較吃內存的數據,按照官方文檔的意思大概是物理內存的一半減少一個G就是MongoDB占用的內存,但是呢經過我的test發現事實並不是這樣)。

        不要問我為什么MongoDB的集群OOM問題能查兩天,出現三次集群宕機的低級事故,下面談下當今最火的數據倉庫給各位DBA帶來的暴擊傷害。

       MongoDB的網絡限速處理:如果你的公司恰好有數據倉庫部門,業務數據量大或者抽取策略不合理,那么我覺得你有必要考慮下MongoDB的網絡限速,否則容易將核心業務交換機流量打滿,單個抽取的服務器網卡流量打滿,被抽取的MongoDB機器出現故障切換后二次沒得切換出現集群崩塌的局面。

        以上兩點淺嘗輒止,簡短分析下,不詳細贅述了,說多了又該講講那些我anscript批量動網卡承擔的風險,加班加點排查問題,差點兒一覺醒來鍋從天降。總歸這些還是值得,讓我覺得高可用有時候並不能真的高可用,出現崩塌的時候又該何去何從,這是個問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM