1. 程式人生 > 實用技巧 >《MySQL資料庫》MySQL讀寫分離(Atlas)

《MySQL資料庫》MySQL讀寫分離(Atlas)

前言

Atlas是360團隊弄出來的一套基於MySQL-Proxy基礎之上的代理,修改了MySQL-Proxy的一些BUG,並且優化了一些東西。Atlas的功能是實現了MySQL的讀寫分離技術。

環境搭建

環境說明:MySQL5.7.22版本。 GTID主從環境(一主兩從)。

官網下載Atlas:https://github.com/Qihoo360/Atlas/releases 百度網盤連結:https://pan.baidu.com/s/1rcFP1S_S_ceiAZQjCWfh9w 提取碼: erm9

linux環境安裝

1. 上傳下載好的Atlas軟體到linux系統。

2. 執行下面命令進行安裝:

rpm -
ivh Atlas-2.2.1.el6.x86_64.rpm

安裝完成,設定配置檔案:

配置檔案的預設路徑為:/usr/local/mysql-proxy/conf/test.cnf

[mysql-proxy]

#帶#號的為非必需的配置專案

#管理介面的使用者名稱
admin-username = user

#管理介面的密碼
admin-password = pwd

#Atlas後端連線的MySQL主庫的IP和埠,可設定多項,用逗號分隔
proxy-backend-addresses = 47.105.72.111:3306

#Atlas後端連線的MySQL從庫的IP和埠,@後面的數字代表權重
,用來作負載均衡,若省略則預設為1,可設定多項,用逗號分隔 #proxy-read-only-backend-addresses = 127.0.0.1:3305@1 #使用者名稱與其對應的加密過的MySQL密碼,密碼使用PREFIX/bin目錄下的加密程式encrypt加密,下行的user1和user2為示例,將其替換為你的MySQL的使用者名稱和加密密碼! pwds = user1:+jKsgB3YAG8=, user2:GS+tr4TPgqc= #設定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 = OFF #慢日誌輸出設定。當設定了該引數時,則日誌只輸出執行時間超過sql-log-slow(單位:ms)的日誌記錄。不設定該引數則輸出全部日誌。 #sql-log-slow = 10 #例項名稱,用於同一臺機器上多個Atlas例項間的區分 #instance = test #Atlas監聽的工作介面IP和埠 proxy-address = 0.0.0.0:1234 #Atlas監聽的管理介面IP和埠 admin-address = 0.0.0.0: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則此項必須設定,否則可以不設定 #lvs-ips = 192.168.1.1

通過命令對密碼進行加密後設置到配置檔案中

/usr/local/mysql-proxy/bin/encrypt root

#Atlas後端連線的MySQL主庫的IP和埠,可設定多項,用逗號分隔
proxy-backend-addresses = 47.105.72.111:3306

#Atlas後端連線的MySQL從庫的IP和埠,@後面的數字代表權重,用來作負載均衡,若省略則預設為1,可設定多項,用逗號分隔
#proxy-read-only-backend-addresses = 127.0.0.1:3305@1

#使用者名稱與其對應的加密過的MySQL密碼,密碼使用PREFIX/bin目錄下的加密程式encrypt加密,下行的user1和user2為示例,將其替換為你的MySQL的使用者名稱和加密密碼!
pwds = user1:+jKsgB3YAG8=, user2:GS+tr4TPgqc=

常用配置就這三個,其他大家按需要配置,配置完成後,啟動Atlas

/usr/local/mysql-proxy/bin/mysql-proxyd test start   -- 啟動命令,test是配置檔案的名稱, start,stop,restart 分別為啟動,停止,重啟

啟動成功,測試讀寫分離情況:

mysql -uroot -proot -h 127.0.0.1 -P1234      -- 通過命令連線埠換成Atlas的埠。

查詢server_id,看看是否查詢的從庫資料。

寫操作測試,通過開啟事務查詢server_id;

到這裡為止,讀寫分離已經部署完成。

下面介紹一寫其他功能:通過管理員使用者登入:

mysql -uuser -ppwd -h 127.0.0.1 -P2345
select * from help;     -- 檢視幫助

查詢節點狀態:

服務上下線:

SET ONLINE/OFFLINE $backend_id      -- 設定上下線服務
ADD MASTER/SLAVE $backend         -- 增加主/從節點
REMOVE BACKEND $backend_id        -- 刪除節點

使用者資訊:

SELECT * FROM pwds     -- 查詢使用者資訊
ADD PWD $pwd           -- 新增使用者,add PWD 使用者名稱:密碼(這裡密碼不需要加密) 
ADD ENPWD $pwd         -- 新增使用者,add ENPWD 使用者名稱:密碼(這裡密碼需要加密)
REMOVE PWD $pwd        -- 刪除使用者,REMOVE PWD 使用者名稱

以上設定是可以直接臨時生效的,如果需要永久生效執行下面命令:

SAVE CONFIG            -- 臨時設定的配置,加入到配置檔案永久生效。

原理

原理圖:

Atlas 原理也相對簡單,就是中間增加一個節點對不同的讀寫操作進行分離。

總結

Atlas 一個簡單的讀寫分離工具,適合中小型企業使用。