MySQL中介軟體之ProxySQL(7):詳述ProxySQL的路由規

Bacer發表於2021-09-09

返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html

 


  • 會操作ProxySQL的Admin管理介面,可參考:

  • 已經配置好了後端節點、mysql_users等。可參考:

  • 如果想速成,可參考;

    本文涉及到的實驗環境如下:

    角色 主機IP server_id 資料狀態
    Proxysql 192.168.100.21 null
    Master 192.168.100.22 110 剛安裝的全新MySQL例項
    Slave1 192.168.100.23 120 剛安裝的全新MySQL例項
    Slave2 192.168.100.24 130 剛安裝的全新MySQL例項

    該實驗環境已經在前面的文章中搭建好,本文不再贅述一大堆的內容。環境的搭建請參考前面給出的1、2、3。

    的文章,MySQL Router實現讀寫分離的方式就是透過監聽不同埠實現的:一個埠負責讀操作,一個埠負責寫操作。這樣的路由邏輯非常簡單,配置起來也很方便。

    雖然基於埠實現讀寫分離配置起來非常簡單,但是缺點也很明顯:必須在前端app的程式碼中指定埠號碼。這意味著MySQL的一部分流量許可權被開發人員掌控了,換句話說,DBA無法全域性控制MySQL的流量。此外,修改埠號時,app的程式碼也必須做出相應的修改。

    雖說有缺點,但為了我這個ProxySQL系列文章的完整性,本文還是要簡單演示ProxySQL如何基於埠實現讀寫分離。

    首先修改ProxySQL監聽SQL流量的埠號,讓其監聽在不同埠上。

    admin> set mysql-interfaces='0.0.0.0:6033;0.0.0.0:6034';
    admin> save mysql variables to disk;

    然後重啟ProxySQL。

    [root@xuexi ~]# service proxysql stop[root@xuexi ~]# service proxysql start[root@xuexi ~]# netstat -tnlp | grep proxysqltcp  0  0 0.0.0.0:6032  0.0.0.0:*   LISTEN  27572/proxysql
    tcp  0  0 0.0.0.0:6033  0.0.0.0:*   LISTEN  27572/proxysql
    tcp  0  0 0.0.0.0:6034  0.0.0.0:*   LISTEN  27572/proxysql

    監聽到不同埠,再去修改mysql_query_rules表。這個表是ProxySQL的路由規則定製表,後文會非常詳細地解釋該表。

    例如,插入兩條規則,分別監聽在6033埠和6034埠,6033埠對應的hostgroup_id=10是負責寫的組,6034對應的hostgroup_id=20是負責讀的組。

    insert into mysql_query_rules(rule_id,active,proxy_port,destination_hostgroup,apply) 
    values(1,1,6033,10,1), (2,1,6034,20,1);load mysql query rules to runtime;
    save msyql query rules to disk;

    這樣就配置結束了,是否很簡單?

    其實除了基於埠進行分離,還可以基於監聽地址(修改欄位proxy_addr即可),甚至可以基於客戶端地址(修改欄位client_addr欄位即可,該用法可用於採集資料、資料分析等)。

    無論哪種路由方式,其實都是在修改mysql_query_rules表,所以下面先解釋下這個表。

    相關的設定,目前mirroring正處於實驗階段,所以不解釋。

  • error_msg:查詢將被阻塞,然後向客戶端返回error_msg指定的資訊。

  • sticky_conn:當前還未實現該功能。

  • multiplex:如果設定為0,將禁用multiplexing。如果設定為1,則啟用或重新啟用multiplexing,除非有其它條件(如使用者變數或事務)阻止啟用。如果設定為2,則只對當前查詢不禁用multiplexing。預設值為NULL,表示不會修改multiplexing的策略。

  • log:查詢將記錄日誌。

  • apply:當設定為1後,當匹配到該規則後,將立即應用該規則,不會再評估其它的規則(注意:應用之後,將不會評估mysql_query_rules_fast_routing中的規則)。

  • comment:註釋說明欄位,例如描述規則的意義。

  • 。本文介紹其中3個和路由、規則相關的表。

    https://www.cnblogs.com/f-ck-need-u/p/9300829.html


    來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2768/viewspace-2804495/,如需轉載,請註明出處,否則將追究法律責任。

    相關文章