数据切分——Atlas读写分离Mysql集群的搭建
? ? ? ? 關于數據切分的原理可以參見博客:
????????http://blog.csdn.net/jhq0113/article/details/44226789
???????
??????? 關于Atlas的介紹可以參見博客:
????????http://blog.csdn.net/jhq0113/article/details/44239823
???????????????? Atlas源代碼用C語言編寫,它對于Web Server相當于是DB,相對于DB相當于是Client,如果把Atlas的邏輯放到Web Server程序里去處理,這樣會大大增加Web Server程序的復雜度,同時Web Server和DB之間的耦合度也相當高,因為只要DB增加/減少服務,Web Server就有可能要發生代碼改變,若代碼不改變,就得通過中間關系表與心跳機制來維護Server之間的關系,這樣會帶來性能的損耗,而Atlas是架設在Web Server與DB之間的一個中間件,Web Server與DB之間的耦合關系放到了Atlas來處理,既做到了靈活也保留了性能,這也是Atlas存在的價值。
??????? Atlas支持表的水平切分,支持讀寫分離,對數據實時性要求較高的項目可以在select語句前增加/*master*/強制讀主庫,主從MySql數據庫之間數據的同步需要自己配置,主從MySql數據庫數據主從復制的配置方法參見博客:
????????http://blog.csdn.net/jhq0113/article/details/44263367
?????????
??????? 1.安裝
?????????注意:只能安裝在64位的Linux操作系統上,CentOS官方建議rpm安裝方式
?????????獲取地址:https://github.com/Qihoo360/Atlas/releases
???????? 目前最新的版本為:
????????? Atlas-2.2.1.el5.x86_64.rpm??????????????????????CentOS 5.*? 版本
??????????Atlas-2.2.1.el6.x86_64.rpm??????????????????????CentOS 6.*? 版本
??????????
???????? 我的環境是CentOS 6.6 Basic Server x86_64
??????????
???????? 安裝命令:
???????? [root@jhq0229 src]# rpm -i Atlas-2.2.1.el6.x86_64.rpm
?????????
???????? 安裝位置:
???????? /usr/local/mysql-proxy
???????? 配置文件:
???????? /usr/local/mysql-proxy/conf/test.cnf
????????
???????? 重要配置文件詳解:
?????? ??(1)線程數
???????? event-threads項設置,過小無法充分發揮多核CPU的性能,過大造成不必要的線程切換開銷,推薦設置為CPU的核數。
????? (2)最小空閑連接數(2.x以上版本不需要該項,1.x版本需要)
???????? min-idle-connections項設置,過小則在高并發下會有報錯,過大雖然不報錯但在測試時不容易看出讀寫分離效果,推薦設置為比客戶端的并發峰值稍大,詳見《配置參數詳解》。上面的配置范例是針對Atlas 2.X版本,沒有該選項。對于Atlas 1.X版本的配置文件,需要加入該配置選項
????? (3)Atlas的工作端口
???????? proxy-address項配置,例如proxy-address = 0.0.0.0:1234代表客戶端應該使用1234這個端口連接Atlas來發送SQL請求。
???? (4)Atlas的管理端口
???????? admin-address項配置,例如admin-address = 0.0.0.0:2345代表DBA應該使用2345這個端口連接Atlas來執行運維管理操作。
??? (5)管理接口的用戶名和密碼
??????? admin-username項和admin-password項設置,這兩項是用來進入Atlas的管理界面的,與后端連接的MySQL沒有關系,所以可以任意設置,不需要MySQL在配置上做任何改動。
?? (6)日志級別
??????? 以log-level項配置,分為message、warning、critical、error、debug五個級別。
?? (7)日志路徑
?????? 以log-path項配置,如log-path = /usr/local/mysql-proxy/log。
?? (8)主庫的IP和端口
?????? proxy-backend-addresses = 192.168.0.12:3306
?? (9)從庫的IP和端口,@后面的數字代表權重,用來作負載均衡,若省略則默認為1,可設置多項,用逗號分隔。如果想讓主庫也能分擔讀請求的話,只需要將主庫信息加入到下面的配置項中。
?????? proxy-read-only-backend-addresses = 192.168.0.13:3306,192.168.0.14:3306
?? (10)用戶名與其對應的加密過的MySQL密碼,密碼使用PREFIX/bin目錄下的加密程序encrypt加密,用戶名與密碼之間用冒號分隔。主從數據庫上需要先創建該用戶并設置密碼(用戶名和密碼在主從數據庫上要一致)。比如用戶名為myuser,密碼為mypwd,執行./encrypt mypwd結果為HJBoxfRsjeI=。如果有多個用戶用逗號分隔即可。則設置如下行所示:
????? pwds = myuser: HJBoxfRsjeI=,myuser2:HJBoxfRsjeI=
?(11)分表設置,此例中person為庫名,mt為表名,id為分表字段,3為子表數量,可設置多項,以逗號分隔,若不分表則不需要設置該項,子表需要事先建好,子表名稱為表名_數字,數字范圍為[0,子表數-1],如本例里,子表名稱為mt_0、mt_1、mt_2??? tables = person.mt.id.3
?? 我的配置:
???
[plain]?view plain?copy ?print?
從以上配置可以清楚看到:
主庫:192.168.1.18:3306
從庫:192.168.1.16:3306??? 權重為1
注意:主從復制需要自行配置。
?
Atlas Proxy的ip和端口為:192.168.1.18:8060
主從復制的用戶和密碼為:mastt???? 123456,以上的pwds的密碼是經過加密處理的
若用Navicat登陸,就用Atlas Proxy的ip和端口,用戶名和密碼用主從復制的,主從復制的賬戶需要設置可以在Navicat上登陸。
分表配置項:
[plain]?view plain?copy ?print?
我的主從庫名稱是orders,里有三張表,分別是my_orders_0,my_orders_1,my_orders_2,按year字段進行分表,雖然分了2015張表,但是你的數據庫里不一定有這么多張表,這里的2015只是取模的一個基數,按照此規律去找到相應的表,例如year=2015,數據請求會發送到my_orders_0表。
編寫簡單Atlas的啟動腳本:
[root@jhq0229 ~]# vim /etc/init.d/atlas
內容如下:
[plain]?view plain?copy ?print?
授權并加入開機啟動
[root@jhq0229 ~]# chmod +x /etc/init.d/atlas
[root@jhq0229 ~]# chkconfig atlas on
啟動atlas服務
[root@jhq0229 ~]# service atlas start
2.功能測試:
1).利用mastt用戶123456密碼Navicat登陸到192.168.1.18:8060查看數據庫表,開始數據庫中沒有數據。
表結構如下:
[sql]?view plain?copy ?print?
插入數據
[sql]?view plain?copy ?print?
此時我們會看到my_orders_0,1,2表中分別有一條數據,15年的在0表,16年在1表,17年的在2表。
查詢測試,如果不指定表的全名,查詢時需要year字段作為where條件,否則不會通過,測試結果如下圖:
???????
讀寫分離測試,為了達到測試效果,我們在從庫的my_orders_0表手動添加一條數據,語句如下:
[sql]?view plain?copy ?print?
此時,主庫的0表只有一條數據,從表里有兩條數據,如果我們執行查詢語句
SELECT * FROM my_orders WHERE `year`=2015出現一條結果,則都的是主庫,若出現兩條則為從庫,結果如下圖:
????????
證明已經讀的是從庫。
測試強制讀主庫,若執行語句/*master*/ SELECT * FROM my_orders WHERE `year`=2015有兩條記錄則讀的是從庫,如果是一條記錄都的是主庫,測試結果只有周潤發一條記錄。
至此,Atlas的配置完畢,如果將Atlas與Mysql表的分區聯合使用可以大大提高大數據的處理能力,希望可以幫助到你。
轉載于:https://www.cnblogs.com/duyinqiang/p/5696356.html
總結
以上是生活随笔為你收集整理的数据切分——Atlas读写分离Mysql集群的搭建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux中socket的理解---4
- 下一篇: 安装完成后在命令行运行bash时报错0x