資料庫的高可用 及 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 邏輯庫,進行管理