MySQL數據庫之讀寫分離

一、概述:

MySQL數據庫主從結構配置以後,正常情況下數據庫的所有讀寫操作全部都在主數據庫上面,從數據庫僅僅作爲數據備份使用,顯然無法有效的使用服務器資源,那麼實現讀寫分離的需求就不可避免。

二、拓撲圖說明:

MySQL002[1].png

如上圖所示,本文要實現的是讀MySQL數據庫的寫入操作(增刪改)等在Master服務器(192.168.4.10)上面實現,而對MySQL數據庫的讀取操作(查詢)等在Slave服務器(192.168.4.20)上面完成。

如果在程序員編程時創建兩個數據庫連接Connection,在程序中對數據庫的讀取操作使用一個數據庫Connection,而對數據庫的寫入操作使用另外一個數據庫Connection,也可以實現對數據庫的讀寫分離。但是顯然這種實現方式不夠靈活,因此一般不使用這種方式。

本文中將使用MaxScale軟件來實現MySQL數據庫的讀寫分離。MaxScale是由http://www.skysql.com/開發的一款MySQL數據庫中間件,支持高可用,負載均衡,具有良好的可擴展性,高性能的基於事件驅動的同時具有代理和管理功能的中間件。該軟件將部署在拓撲圖中的MySQL代理服務器(192.168.4.100)上,客戶機的訪問請求指向MySQL代理服務器,該服務器將把對數據庫的寫入操作指向到192.168.4.10,對數據庫的讀取操作指向到192.168.4.20。

三、配置說明:

1、MaxScale配置

(1)修改配置文件:

  [root@100 ~]# vim /etc/maxscale.cnf

      A、指定數據庫服務器
         [server1]
            type=server
            address=192.168.4.10        
            port=3306
            protocol=MySQLBackend

         [server2]
            type=server
            address=192.168.4.20
            port=3306
            protocol=MySQLBackend

      B、指定要監控的數據庫服務器
         [MySQL Monitor]
           type=monitor
           module=mysqlmon
           servers=server1,server2
           user=scalemon                #代理服務器監控服務連接數據庫服務器的用戶名(需要在數據庫服務器上面授權)
           passwd=123456                #代理服務器監控服務連接數據庫服務器的密碼

           monitor_interval=10000        //活躍檢查時間間隔,10000毫秒=10秒
      C、指定讀寫分離在哪些主機之間執行
         [Read-Write Service]
             type=service
             router=readwritesplit
             servers=server1,server2
             user=maxscale               #用於檢查用戶連接數據庫時用的授權用戶是否合法的用戶名(需要對mysql數據庫有select權限)
             passwd=123456               #用於檢查用戶連接數據庫時用的授權用戶是否合法的用戶名          

             max_slave_connections=100%
      D、定義管理服務和方式(不用改)
         [MaxAdmin Service]
             type=service
             router=cli
      E、只讀服務器配置選項(不用,全部註釋掉)
         [Read-Only Service]
             #type=service
             #router=readconnroute
             #servers=server1
             #user=myuser
             #passwd=mypwd
             #router_options=slave

             #[Read-Only Listener]
             #type=listener
             #service=Read-Only Service
             #protocol=MySQLClient
             #port=4008
      F、讀寫分離的監聽端口配置
         [Read-Write Listener]
             type=listener
             service=Read-Write Service
             protocol=MySQLClient
             port=4006                    //客戶端讀寫分離服務訪問端口
     G、管理服務的監聽端口配置
        [MaxAdmin Listener]
             type=listener
             service=MaxAdmin Service
             protocol=maxscaled
             socket=default
             port=4009                    //管理服務使用的端口

2、在主數據庫服務器添加授權
mysql > grant replication slave,replication client on . to scalemon@"%" identified by "123456";
mysql > grant select on mysql.* to maxscale@"%" identified by "123456";

3、在代理服務器上面啓動服務並檢查數據庫服務器狀態

(1)啓動服務:

    [root@100 ~]# maxscale --config=/etc/maxscale.cnf

(2)檢查狀態

    [root@100 ~]# maxadmin -uadmin -pmariadb -P4009
        MaxScale> list servers
        -------------------+-----------------+-------+-------------+--------------------
        Server             | Address         | Port  | Connections | Status              
        -------------------+-----------------+-------+-------------+--------------------
        server1            | 192.168.4.11    |  3306 |           0 | Master, Running
        server2            | 192.168.4.12    |  3306 |           0 | Slave, Running
        -------------------+-----------------+-------+-------------+-------------------- 

4、驗證測試

在192.168.4.120上使用授權用戶連接代理服務器(192.168.4.100:4006),在從數據庫服務器(192.168.4.20)上面Insert一些數據,在客戶端可以讀到,那麼說明客戶端讀數據時是在從數據庫(192.168.4.20);在192.168.4.120上使用授權用戶連接代理服務器(192.168.4.100:4006),Insert一些數據成功,在主從數據庫上面都可以看到,說明客戶端寫數據時是在主數據庫服務器(192.168.4.10)上面。       
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章