MySQL讀寫分離-架構


MySQL讀寫分離-架構

簡介

對於很多大型網站(pv值百萬、千萬)來說,在所處理的業務中,其中有70%的業務是查詢(select)相關的業務操作(新聞網站,插入一條新聞。查詢操作),剩下的則是寫(insert、update、delete,只要能對MySQL的數據造成更改的操作都叫寫操作)操作。在使用負載均衡集群之后,可以很大程度的提升網站的整體性能,但是最終的數據處理的壓力還是會落到MySQL數據庫上,所有很有必要使用一些技術來提升MySQL的負載能力。(讀寫分離)

寫專門交給寫服務器處理(一般網站來說寫是比較少的 讀寫比 4:1) 那么需要把讀的任務分配多台服務器來完成的架構,就叫做讀寫分離。

實現方式

第一種:php程序上自己做邏輯判斷,寫php代碼的時候,自己在程序上做邏輯判讀寫匹配。select,insert、update、delete做正則匹配,根據結果選擇寫服務器(主服務器)。如果是select操作則選擇讀服務器(從服務器器) mysql_connect('讀寫的區分')

第二種:MySQL- Proxy是實現"讀寫分離(Read/Write Splitting)"的一個軟件(MySQL官方提供 ,也叫中間件),基本的原理是讓主數據庫處理寫操作(insert、update、delete),而從數據庫處理查詢操作(select)。而數據庫的一致性則通過主從復制來實現。所以說主從復制是讀寫分離的基礎

注意:MySQL-proxy它能實現讀寫語句的區分主要依靠的是內部一個lua腳本(能實現讀寫語句的判斷)。

注意:如果只在主服務器(寫服務器)上完成數據的寫操作話;這個時候從服務器上沒有執行寫操作,是沒有數據的。這個時候需要使用另外一個技術來實現主從服務器的數據一致性,這個技術叫做 主從復制技術。所以說主從復制是讀寫分離的基礎。

 

也可以從官方下載。

下載地址:http://mirrors.sohu.com/mysql/MySQL-Proxy/

 

如何查看Linux下c庫的版本?

注意通用二進制包需要c庫版本一致,或者操作系統的c庫比安裝包高

# uname -a (unix name --all)

拓撲結構-架構圖

一主兩從

 

MySQL-proxy 負載均衡的軟件(讀寫分離實現)

 

使用三台服務器搭建環境

  1. 一台主(寫)服務器
    1. 192.168.57.92
    2. 這台主服務器還運行一個讀寫分離的軟件 mysql-proxy
  2. 二台從(讀)服務器
    1. 192.168.57.26
    2. 192.168.57.37

     

    注意事項

  3. 防火牆的關閉

     

  4. selinux關閉

    selinux永久關閉

  5. root賬戶必須有遠程登錄的權限

  6. MySQL的版本需要為 5.5 及以上

    主從復制搭建

  7. 先配置主服務器
  8. 然后在配置從服務器

     

    主服務操作

    1. 主服務上的配置

  9. 在主服務上添加一個授權的賬戶,使得到時候從服務器可以使用該賬號來完成數據的獲取

    # GRANT REPLICATION SLAVE ON *.* TO repuser@"192.168.%.%" IDENTIFIED BY 'admin88';

    添加了一個 repuser的用戶,密碼為admin88 可以在 192.168.這個網段完成數據的復制。

    查看

     

  10. 在主服務器上使用 show master status 查看主服務上現在正在使用的bin日志文件和記錄的位置。(bin日志文件默認在MySQL的data目錄)

     

     

    從服務器的配置

  11. 修改從服務器的配置文件

  12. 使用在主服務器上的授權賬號去連接主服務器,等待主服務器的數據的寫入后,通知獲取

    # CHANGE MASTER TO

    MASTER_HOST='192.168.57.92', MASTER_USER='repuser',

    MASTER_PASSWORD='admin88',

    MASTER_LOG_FILE='master-bin.000002',

    MASTER_LOG_POS=107;

    使用上面的語句連接主服務器后,使用

    # show slave status\G

  13. 開啟從服務器

    命令:

  14. stop slave 可以停止 從服務器
  15. reset slave 清空從服務器的規則
  16. start slave 啟動從服務器
  17. show slave status 查看從服務器狀態
  18. show master status 查看主服務器狀態

     

     

    讀寫分離搭建

    mac的前世今生

    https://yunpan.cn/cY4gQ6sXWaTXd 訪問密碼 7a0b

     

    下載mysql-proxy

    http://mirrors.sohu.com/mysql/MySQL-Proxy/

     

  19. mysql-proxy上傳

  20. 解壓操作

    #tar -zxvf mysql-proxy-0.8.4-linux-rhel5-x86-32bit.tar.gz -C /usr/local/

  21. 為mysql-proxy創建一個符號鏈接

     

  22. 添加一個mysql-proxy用戶

    # useradd mysql-proxy

     

  23. 命令查看

     

    6. 在下面路徑創建一個admin.lua腳本

    參照

     

    7. 服務啟動

    #

    ./mysql-proxy --daemon --log-level=debug

    --log-file=/var/log/mysql-proxy.log

    --plugins='proxy'

    讀寫分離腳本

    --proxy-lua-script='/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua'

    寫服務器

    --proxy-backend-addresses='192.168.57.92:3306'

    讀服務器

    --proxy-read-only-backend-addresses='192.168.57.29:3306'

    --proxy-read-only-backend-addresses='192.168.57.37:3306'

    --plugins='admin'

    --admin-username='admin'

    --admin-password='admin88' --admin-lua-script='/usr/local/mysql-proxy/share/doc/mysql-proxy/admin.lua'

     

    相關參數

    MySQL讀寫分離的監控

    mysql-proxy提供一個端口用來監控MySQL讀寫的實現

    使用的默認端口是 4041

    1. 使用下面的命令連接mysql-proxy的4041端口

    # mysql -uadmin -padmin88 -h 192.168.57.92 --port 4041

  24. 使用下面的命令查看讀寫服務器的狀態

    # select * from backends;

  25. 如果效果不明顯,可以修改下面的文件參數

     

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM