1. 程式人生 > >Mysql 實現讀寫分離-Atlas中介軟體

Mysql 實現讀寫分離-Atlas中介軟體

Mysq主從同步原理:

Mysql 之間資料複製的基礎是二進位制日誌檔案(bin log file) Slave 資料庫作為slave通過一個 I/O執行緒與主伺服器保持通訊,並監控master的二進位制日誌檔案的變化,如果發現,master二進位制檔案發生變化,則會把變化複製到自己的日誌中,然後SQL執行緒會把相關的資料庫操作事件執行到自己的資料庫中,依次實現從資料庫和主資料庫的一致性,也就是實現了主從複製。

首先實現Mysql主從同步:

安裝配置:

192.168.50.110 Mysql  master
192.168.50.111 Mysql slave
192.168.50.112 Proxy:Atlas

Mysql的安裝(192.168.50.110、192.168.50.111)

安裝參考:https://blog.csdn.net/fd2025/article/details/80090262

一主多從配置:

192.168.50.110(master)下配置:

[java]  view plain  
copy
  1. vim /etc/my.cnf  
  2. # 需要同步的日誌的資料庫  
  3. binlog-do-db= ty   
  4. #不同步的二進位制資料庫,如果不設定可以將其註釋掉  
  5. binlog-ignore-db=information_schema  
  6. binlog-ignore-db=mysql  
  7. binlog-ignore-db=personalsite  
  8. binlog-ignore-db=test  
  9.   
  10. #以下引數可選:  
  11. #binlog 格式   
  12. binlog-format=ROW   
  13. log-bin=mysql-master-bin   
  14. #slave更新時是否記錄到日誌中;  
  15. log-slave-updates=true  
  16. #開啟半同步,需要另外安裝插來支援  
  17.  pl_semi_sync_master_enabled=ON  

建立使用者用於主從同步的資料庫

從節點訪問主 節點需要安全驗證:

[java]  view plain  copy
  1. grant replication slave,super,reload on *.* to slave1@192.168.50.111 identified by '123456';  
  2. 使用者名稱:slave1  

檢視主節點狀態

[java]  view plain  copy
  1. mysql> show master status   
  2. #在主庫上檢視已連線的slave主機  
  3. mysql> show slave hosts;  
  4. #檢視所有binlog日誌   
  5. mysql> show binary logs;  
  6. #檢視所有binlog 事件  
  7. mysql> show binlog events in 'mysql-bin.000003' from 145 \G;  

192.168.50.111(Slave) 

vim /etc/my.cnf

[java]  view plain  copy
  1. server-id = 2  
  2. log-bin=mysql-slave-bin  
  3. replicate-do-db=ty  
  4. replicate-ignore-db=information_schema  
  5. replicate-ignore-db=mysql  
  6. replicate-ignore-db=personalsite  
  7. replicate-ignore-db=test  

slave 節點修改master 配置

[java]  view plain  copy
  1. mysql>change master to master_host='192.168.50.110', master_user='slave1', master_password='123456'  
  2.  ,MASTER_AUTO_POSITION = 2887;  
Slave 相關操作 [java]  view plain  copy
  1. #啟動slave  
  2. mysql>start slave;  
  3. mysql>stop slave;  
  4. #檢視 slave 狀態  
  5. show slave status\G;  
  6. #跳過指定數量錯誤  
  7. SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;  
  8. #檢視 relaylog 事件  
  9. show relaylog events in 'localhost-relay-bin.000019'  


Atlas介紹 :

Atlas 是由 Qihoo 360公司Web平臺部基礎架構團隊開發維護的一個基於MySQL協議的資料中間層專案。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基礎上,修改了大量bug,添加了很多功能特性。目前該專案在360公司內部得到了廣泛應用,很多MySQL業務已經接入了Atlas平臺,每天承載的讀寫請求數達幾十億條。


原始碼Github:https://github.com/Qihoo360/Atlas

主要功能:

  • 讀寫分離
  • 從庫負載均衡
  • 自動分表
  • IP過濾
  • SQL語句黑白名單
  • DBA可平滑上下線DB
  • 自動摘除宕機的DB

使用場景:

       Atlas是一個位於前端應用與後端MySQL資料庫之間的中介軟體,它使得應用程式設計師無需再關心讀寫分離、分表等與MySQL相關的細節,可以專注於編寫業務邏輯,同時使得DBA的運維工作對前端應用透明,上下線DB前端應用無感知。

讀寫分離方案


安裝Atlas之前注意的事項:

  • Atlas只能安裝執行在64位的系統上
  • Centos 5.X安裝 Atlas-XX.el5.x86_64.rpm,Centos 6.X安裝Atlas-XX.el6.x86_64.rpm。
  • 後端mysql版本應大於5.1,建議使用Mysql 5.6

實現Mysql讀寫分離

Atlas的安裝:

下載地址:
https://github.com/Qihoo360/Atlas/releases/download/2.2.1/Atlas-2.2.1.el6.x86_64.rpm
 或者

https://download.csdn.net/download/fd2025/10375544

[java]  view plain  copy
  1. rpm -i  Atlas-2.2.1.el6.x86_64.rpm  
  2.   
  3. 預設安裝目錄為:/usr/local/mysql-proxy  

編輯Atlas配置檔案:

[java]  view plain  copy
  1. vim /usr/local/mysql-proxy/test.cnf  
[java]  view plain  copy
  1. [mysql-proxy]  
  2.   
  3. #帶#號的為非必需的配置專案  
  4.   
  5. #管理介面的使用者名稱  
  6. admin-username = root  
  7.   
  8. #管理介面的密碼  
  9. admin-password = root  
  10.   
  11. #設定主庫和從庫的地址,其中主庫為寫庫,從庫為讀庫  
  12. #主庫地址:Atlas後端連線的MySQL主庫的IP和埠,可設定多項,用逗號分隔  
  13. proxy-backend-addresses = 192.168.50.110:3306  
  14. #設定從庫的地址和埠  
  15. proxy-read-only-backend-addresses= 192.168.50.111  
  16.  #若配置為主庫也分擔讀請求,並且設定權重為(主:從)=(1:3)  
  17. #proxy-read-only-backend-addresses = 192.168.50.110:3306@1,,192.168.50.111@3  
  18.   
  19. #使用者名稱與其對應的加密過的MySQL密碼,密碼使用PREFIX/bin目錄下的加密程式encrypt加密,下行的user1和user2為示例,將其替換為你的MySQL的  
  20. #使用者名稱和加密密碼!  
  21. pwds = root:/iZxz+0GRoA=  
  22.   
  23. #設定Atlas的執行方式,設為true時為守護程序方式,設為false時為前臺方式,一般開發除錯時設為false,線上執行時設為true,true後面不能有空格。  
  24. daemon = true  
  25.   
  26. #設定Atlas的執行方式,設為true時Atlas會啟動兩個程序,一個為monitor,一個為worker,monitor在worker意外退出後會自動將其重啟,  
  27. #設為false時只有worker,沒有monitor,一般開發除錯時設為false,線上執行時設為true,true後面不能有空格。  
  28. keepalive = true  
  29.   
  30. #工作執行緒數,對Atlas的效能有很大影響,可根據情況適當設定  
  31. event-threads = 8  
  32.   
  33. #日誌級別,分為message、warning、critical、error、debug五個級別  
  34. log-level = message  
  35.   
  36. #日誌存放的路徑  
  37. log-path = /usr/local/mysql-proxy/log  
  38.   
  39. #SQL日誌的開關,可設定為OFF、ON、REALTIME,OFF代表不記錄SQL日誌,ON代表記錄SQL日誌,REALTIME代表記錄SQL日誌且實時寫入磁碟,預設為OFF  
  40. sql-log = ON  
  41.   
  42. #慢日誌輸出設定。當設定了該引數時,則日誌只輸出執行時間超過sql-log-slow(單位:ms)的日誌記錄。不設定該引數則輸出全部日誌。  
  43. #sql-log-slow = 10  
  44.   
  45. #例項名稱,用於同一臺機器上多個Atlas例項間的區分  
  46. #instance = test  
  47.   
  48. #Atlas監聽的工作介面IP和埠,應用程式將連線這個地址,把Atlasd當做mysql-server,此處攜程3306埠  
  49. proxy-address = 192.168.50.113:1234  
  50.   
  51. #Atlas監聽的管理介面IP和埠  
  52. admin-address = 192.168.50.113:2345  
  53.   
  54. #分表設定,此例中person為庫名,mt為表名,id為分表字段,3為子表數量,可設定多項,以逗號分隔,若不分表則不需要設定該項  
  55. #tables = person.mt.id.3  
  56.   
  57. #預設字符集,設定該項後客戶端不再需要執行SET NAMES語句  
  58. #charset = utf8  
  59.   
  60. #允許連線Atlas的客戶端的IP,可以是精確IP,也可以是IP段,以逗號分隔,若不設定該項則允許所有IP連線,否則只允許列表中的IP連線  
  61. #client-ips = 127.0.0.1192.168.1  
  62.   
  63. #Atlas前面掛接的LVS的物理網絡卡的IP(注意不是虛IP),若有LVS且設定了client-ips則此項必須設