1. 程式人生 > >資料庫的高可用 及 Mycat的引入

資料庫的高可用 及 Mycat的引入

 (一)實現資料庫的讀寫分離

  1 業務需求

     在服務中,只配置主庫.如果遇到了高併發的現象,則主庫有宕機的風險,使用者大量的請求中,查詢的數量是最多的.如何進行優化呢??

  2 解決方案: 使用代理伺服器(Amoeba)

    Amoeba是一個以Mysql為底層的資料儲存,並對應用提供Mysql協議介面的proxy.它集中地響應用的請求,依據使用者事先設定的規則,將SQL請求傳送到特定的資料庫上執行.基於此可以實現負載均衡,讀寫分離,高可用性等需求.與MySql官方的MySql Proxy相比,作者強調的是amoeba配置的方便(基於XML的配置檔案),用SQLJEP語法書寫規則,比基於lua的指令碼的Mysql Proxy簡單.

  

  3 雙機熱備

  Master:A主要的作用向從庫B同步資料

  從庫B:向A主庫同步資料

  

  3.1呼叫流程

  正常情況下,主庫負責寫庫操作,從庫主要負責讀庫操作

  當主庫宕機時,通過某些技術手段可以實現資料庫的主從切換.這時從庫即充當主庫又充當從庫.

  運維人員將主庫修復完成後啟動.因為之前已經配置了雙擊熱備的形式.這時因為從庫已經運行了一段時間,其中的資料一定比主庫的多,這時從庫將資料同步給主庫,最終實現了資料的一致.

 


 

(二)Mycat的引入(遇到資料庫瓶頸,無法繼續優化sql,使用Mycat)

  1 Mycat是資料庫的分庫分表中介軟體,國內最活躍的,效能最好的開源軟體資料庫中介軟體!

  2 Mycat的特性

    ♦ 遵守Mysql原生協議,跨語言,跨平臺,跨資料庫的通用中介軟體代理

    ♦ 基於心跳的自動故障切換,支援讀寫分離,支援Mysql主從,以及galera cluster叢集

    ♦ 支援分散式事務

  3 資料庫的優化

    ♦優化SQL語句---原則

      a:能用單表不用關聯查詢.正常的資料庫設計需要滿足三正規化要求.

      b:使用關聯時儘可能提早確定資料.否則會進行大量的笛卡爾積操作.直接影響程式執行效能.

      c:儘可能根據主鍵查詢

    ♦建立索引

      對於經常查詢的資料,為其建立索引檔案

      a: 普通索引  INDEX (id)

      b: 唯一索引  UNIQUE INDEX unique_id(id ASC)

      c: 全文索引   FULLTEXT INDEX fulltext_name(name)

      d: 單列索引  INDEX single_name(name(20))       //索引長度為20

      e: 多列索引  INDEX multi(id,name(20))

      f: 空間索引   SPATIAL INDEX sp(space)

    ♦ 新增快取

      為經常查詢的資料,將資料新增到快取中,提高查詢效率

    ♦ 定期轉儲資料

      採用歷史表策略 將舊的資料儲存到歷史表中.當前表中只維護現在使用的資料

    ♦ 分庫分表

      因為資料庫瓶頸問題,無法以現在的優化策略,優化資料庫,這時需要將資料庫進行分庫分表操作.也就是將一個數據庫動態的拆分為多個數據庫.

   4 資料庫的垂直拆和水平拆

            根據不同的資料庫,將有關聯關係的資料表拆分到一個數據庫中,將沒有關聯關係的資料表拆分到不同的資料庫中.(根據業務拆分)

   

       將資料庫中的表資料拆分到多個數據庫中得表中

  

 


     

          Mycat 邏輯庫,進行管理