mysql 第十七篇文章~mycat的讀寫分離

來源:互聯網
上載者:User

標籤:讀寫分離   als   從庫   通過   password   添加   一個   服務   自動   

一 簡介 今天咱們來聊聊mycat的一個功能 讀寫分離
二 前沿: mycat的核心功能之一,讀寫分離的測試

   1讀寫分離的需求
     1 將業務的讀需求定向到從庫去查詢,減輕主庫壓力
     2 將業務的特殊讀需求定向到主庫去查詢
   2 讀寫分離要考慮的問題
    1 當從庫出現問題時踢出有問題的從庫(從庫down機或者複製停止)
    2 當從庫出現延遲時踢出有問題的從庫(單個從庫延遲),但是當從庫正常時,從庫節點從新提供讀服務
    3 當所有提供讀取的從節點的從庫出現問題時,查詢指向主庫,當從庫恢複正常時,從庫節點從新提供讀服務
四 測試與配置
   一 環境配置 與初步測試
   1 修改schemal.xml設定檔
      在<writeHost>標籤內添加
      <readHost host="readM1" url="1.1.1.2:3306" user="mycat" password="mycat"> </readHost>
      <heartbeat>show slave status</heartbeat> 監控主從服務
   2 登入管理服務連接埠9066
      reload @@config 重新載入設定檔
   3 登入執行服務連接埠8086
     1 解析資料查詢語句
      explain select * from people
      | DATA_NODE | SQL |
      | db1 | SELECT * FROM people LIMIT 100 |
      | db2 | SELECT * FROM people LIMIT 100 |
     在這裡我們也可以發現 我們搜全表資料 自動加上了limit 100
    2 執行查詢語句並查詢日誌
      1 select * from people
      2 過濾相關日誌可發現以下內容
         threadId=28911, charset=utf8, txIsolation=3, autocommit=true, attachment=db1{SELECT *
         FROM people
         WHERE id > 151
         LIMIT 100}, respHandler=SingleNodeHandler [node=db1{SELECT *
         FROM people
         WHERE id > 151
         LIMIT 100}, packetId=17], host=1.1.1.2, port=3306, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]
     3 select操作解析到從庫,證明讀寫分離完成
二 類比故障1
    1 從庫stop slave
    2 觀察mycat日誌
       觀察日誌發現 found MySQL master/slave Replication err !!
    3 執行查詢並過濾相關日誌
       threadId=28911, charset=utf8, txIsolation=3, autocommit=true, attachment=db1{SELECT *
       FROM people
       WHERE id > 151
       LIMIT 100}, respHandler=SingleNodeHandler [node=db1{SELECT *
       FROM people
       WHERE id > 151
        LIMIT 100}, packetId=17], host=1.1.1.1, port=3306, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]
       這裡變成了主庫IP,查詢成功
    4 從庫 start slave
    5 再次執行查詢並過濾日誌,發現slave繼續提供讀操作
三 類比故障2
   1 從庫stop slave
   2 從庫設定延時庫
   3 從庫start slave
   4 觀察mycat日誌
    觀察日誌發現 found MySQL master/slave Replication delay !!
   5 執行查詢並過濾相關日誌
   threadId=28911, charset=utf8, txIsolation=3, autocommit=true, attachment=db1{SELECT *
   FROM people
   WHERE id > 151
   LIMIT 100}, respHandler=SingleNodeHandler [node=db1{SELECT *
   FROM people
   WHERE id > 151
   LIMIT 100}, packetId=17], host=1.1.1.1, port=3306, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]
   這裡變成了主庫IP,查詢成功
   6 將從庫恢複正常
   7 再次執行查詢並過濾日誌,發現slave繼續提供讀操作
四 特殊需求
  需求說明:一些sql需要強制走主庫
  範例說明: /*#mycat:db_type=master*/ select * from people 根據註解選擇資料來源
  具體說明:從mycat 1.6開始,對於一些特殊的sql語句,採用註解實現,這裡的例子僅僅是一個簡單的單表查詢,複雜語句並未做測試
五 總結
通過測試我們可以發現,mycat完美的支援了讀寫需求的完全功能,通過註解可以實現特殊的sql查詢需求,當然這隻是測試,僅供參考哦

這就是今天的成果

mysql 第十七篇文章~mycat的讀寫分離

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.