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- vim /etc/my.cnf
- # 需要同步的日誌的資料庫
- binlog-do-db= ty
- #不同步的二進位制資料庫,如果不設定可以將其註釋掉
- binlog-ignore-db=information_schema
- binlog-ignore-db=mysql
- binlog-ignore-db=personalsite
- binlog-ignore-db=test
- #以下引數可選:
- #binlog 格式
- binlog-format=ROW
- log-bin=mysql-master-bin
- #slave更新時是否記錄到日誌中;
- log-slave-updates=true
- #開啟半同步,需要另外安裝插來支援
- pl_semi_sync_master_enabled=ON
建立使用者用於主從同步的資料庫
從節點訪問主 節點需要安全驗證:
[java] view plain copy- grant replication slave,super,reload on *.* to slave1@192.168.50.111 identified by '123456';
- 使用者名稱:slave1
檢視主節點狀態
[java] view plain copy- mysql> show master status
- #在主庫上檢視已連線的slave主機
- mysql> show slave hosts;
- #檢視所有binlog日誌
- mysql> show binary logs;
- #檢視所有binlog 事件
- mysql> show binlog events in 'mysql-bin.000003' from 145 \G;
192.168.50.111(Slave)
vim /etc/my.cnf
[java] view plain copy- server-id = 2
- log-bin=mysql-slave-bin
- replicate-do-db=ty
- replicate-ignore-db=information_schema
- replicate-ignore-db=mysql
- replicate-ignore-db=personalsite
- replicate-ignore-db=test
slave 節點修改master 配置
[java] view plain copy- mysql>change master to master_host='192.168.50.110', master_user='slave1', master_password='123456'
- ,MASTER_AUTO_POSITION = 2887;
- #啟動slave
- mysql>start slave;
- mysql>stop slave;
- #檢視 slave 狀態
- show slave status\G;
- #跳過指定數量錯誤
- SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
- #檢視 relaylog 事件
- 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
- rpm -i Atlas-2.2.1.el6.x86_64.rpm
- 預設安裝目錄為:/usr/local/mysql-proxy
編輯Atlas配置檔案:
[java] view plain copy- vim /usr/local/mysql-proxy/test.cnf
- [mysql-proxy]
- #帶#號的為非必需的配置專案
- #管理介面的使用者名稱
- admin-username = root
- #管理介面的密碼
- admin-password = root
- #設定主庫和從庫的地址,其中主庫為寫庫,從庫為讀庫
- #主庫地址:Atlas後端連線的MySQL主庫的IP和埠,可設定多項,用逗號分隔
- proxy-backend-addresses = 192.168.50.110:3306
- #設定從庫的地址和埠
- proxy-read-only-backend-addresses= 192.168.50.111
- #若配置為主庫也分擔讀請求,並且設定權重為(主:從)=(1:3)
- #proxy-read-only-backend-addresses = 192.168.50.110:3306@1,,192.168.50.111@3
- #使用者名稱與其對應的加密過的MySQL密碼,密碼使用PREFIX/bin目錄下的加密程式encrypt加密,下行的user1和user2為示例,將其替換為你的MySQL的
- #使用者名稱和加密密碼!
- pwds = root:/iZxz+0GRoA=
- #設定Atlas的執行方式,設為true時為守護程序方式,設為false時為前臺方式,一般開發除錯時設為false,線上執行時設為true,true後面不能有空格。
- daemon = true
- #設定Atlas的執行方式,設為true時Atlas會啟動兩個程序,一個為monitor,一個為worker,monitor在worker意外退出後會自動將其重啟,
- #設為false時只有worker,沒有monitor,一般開發除錯時設為false,線上執行時設為true,true後面不能有空格。
- keepalive = true
- #工作執行緒數,對Atlas的效能有很大影響,可根據情況適當設定
- event-threads = 8
- #日誌級別,分為message、warning、critical、error、debug五個級別
- log-level = message
- #日誌存放的路徑
- log-path = /usr/local/mysql-proxy/log
- #SQL日誌的開關,可設定為OFF、ON、REALTIME,OFF代表不記錄SQL日誌,ON代表記錄SQL日誌,REALTIME代表記錄SQL日誌且實時寫入磁碟,預設為OFF
- sql-log = ON
- #慢日誌輸出設定。當設定了該引數時,則日誌只輸出執行時間超過sql-log-slow(單位:ms)的日誌記錄。不設定該引數則輸出全部日誌。
- #sql-log-slow = 10
- #例項名稱,用於同一臺機器上多個Atlas例項間的區分
- #instance = test
- #Atlas監聽的工作介面IP和埠,應用程式將連線這個地址,把Atlasd當做mysql-server,此處攜程3306埠
- proxy-address = 192.168.50.113:1234
- #Atlas監聽的管理介面IP和埠
- admin-address = 192.168.50.113:2345
- #分表設定,此例中person為庫名,mt為表名,id為分表字段,3為子表數量,可設定多項,以逗號分隔,若不分表則不需要設定該項
- #tables = person.mt.id.3
- #預設字符集,設定該項後客戶端不再需要執行SET NAMES語句
- #charset = utf8
- #允許連線Atlas的客戶端的IP,可以是精確IP,也可以是IP段,以逗號分隔,若不設定該項則允許所有IP連線,否則只允許列表中的IP連線
- #client-ips = 127.0.0.1, 192.168.1
- #Atlas前面掛接的LVS的物理網絡卡的IP(注意不是虛IP),若有LVS且設定了client-ips則此項必須設