Atlas讀寫分離總體架構(gòu)
????????數(shù)據(jù)庫讀寫分離通過實時(根據(jù)具體情況稍有延遲,一般都是毫秒級的)主從同步備份提岔,通過冗余的方式保護了系統(tǒng)數(shù)據(jù)仙蛉。提高了系統(tǒng)的負載能力,主庫寫數(shù)據(jù)從庫讀數(shù)據(jù)碱蒙,提高了系統(tǒng)的性能荠瘪。
? ? ? ?讀寫分離的前提是保證主從庫的數(shù)據(jù)同步復制,針對MySQL赛惩,MariaDB的主從同步前面已經(jīng)介紹過了哀墓,網(wǎng)上也有很多教程,這里就不再重復了喷兼。讀寫分離的的實現(xiàn)基本上分為2種:第一種是通過應用系統(tǒng)的代碼來實現(xiàn)篮绰,比如我們可以在spring中配置2個數(shù)據(jù)源,一個寫的數(shù)據(jù)源和一個讀的數(shù)據(jù)源季惯。由應用系統(tǒng)來決定使用哪個數(shù)據(jù)源訪問數(shù)據(jù)庫吠各。主庫和從庫對于應用程序來說不是透明的,主從庫在線上切換的時候勉抓,需要修改配置文件贾漏,并重新部署啟動。但是這種直連的方式效率比較高藕筋。第二種是通過代理的方式纵散,主從庫對于應用程序是透明的,應用系統(tǒng)只需要和數(shù)據(jù)庫代理建立連接隐圾,然后代理通過分析發(fā)給它的sql語句再決定在主庫或從庫上執(zhí)行伍掀。代理的方式屏蔽的DB層的細節(jié),而且線上切換不需要修改應用代碼翎承,只是這種代理的方式相對直連硕盹,在效率上略低一點符匾,是可以接受的叨咖。
? ? ? ?MySQL的代理最常見的是mysql-proxy、cobar、mycat甸各、Atlas等垛贤。mysql-proxy是一個輕量的中間代理。cobar是阿里提供的一個中間件趣倾,已經(jīng)停止更新聘惦。mycat的前身就是cobar,活躍度比較高儒恋。Atlas奇虎360的一個開源中間代理善绎,是在mysql-proxy 0.8.2的基礎(chǔ)上進行了優(yōu)化,增加一些新的功能特性诫尽。360內(nèi)部使用Atlas運行的MySQL業(yè)務禀酱,每天承載的讀寫請求數(shù)達幾十億條。這篇總結(jié)主要來說一下Atlas讀寫分離的實現(xiàn)牧嫉。
Atlas安裝配置
Atlas的安裝和配置都很簡單剂跟,具體可以參見官網(wǎng)的教程:https://github.com/Qihoo360/Atlas/wiki
安裝完成后在安裝目下修改Atlas的配置文件(/usr/local/mysql-proxy/conf/test.cnf):
#管理接口的用戶名
admin-username = user
#管理接口的密碼
admin-password = pwd
#Atlas后端連接的MySQL主庫的IP和端口,可設(shè)置多項酣藻,用逗號分隔
proxy-backend-addresses = 192.168.1.56:3306? (我的主庫IP和端口號)
#Atlas后端連接的MySQL從庫的IP和端口曹洽,@后面的數(shù)字代表權(quán)重,用來作負載均衡辽剧,若省略則默認為1送淆,可設(shè)置多項,用逗號分隔
proxy-read-only-backend-addresses = 192.168.1.55:3306@1? ?(我的從庫IP和端口號)
#用戶名與其對應的加密過的MySQL密碼怕轿,密碼使用PREFIX/bin目錄下的加密程序encrypt加密坊夫,下行的user1和user2為示例,將其替換為你的MySQL的用戶名和加密密碼撤卢!
pwds = root:DAJnl8cVzy8=
(注意:這邊的用戶名密碼主庫和從庫需要完全保持一致环凿,而且需要保證這個用戶允許atlas的主機IP遠程訪問)
#Atlas監(jiān)聽的工作接口IP和端口
proxy-address = 0.0.0.0:1234
#Atlas監(jiān)聽的管理接口IP和端口
admin-address = 0.0.0.0:2345
運行Atlas
安裝配置完成后就可以運行Atlas了,進入/usr/local/mysql-proxy/bin目錄運行命令:
?./mysql-proxyd test start放吩,啟動Atlas智听。
./mysql-proxyd test restart,重啟Atlas渡紫。
?./mysql-proxyd test stop到推,停止Atlas。
(注意命令中的test是Atlas的實例名稱惕澎,默認是test莉测。而且這個名字要和配置文件名test.cnf保持一致)
啟動完成后可以運行mysql -h127.0.0.1 -P2345 -uuser -ppwd,進入后執(zhí)行:select * from help;查看管理DB的各類命令唧喉。
運行mysql -h127.0.0.1 -P1234 -u用戶名 -p密碼捣卤,測試一下讀寫分離是否可用忍抽。可以寫一條數(shù)據(jù)董朝,看看是否同步到從庫中鸠项。然后把主庫stop,看看是否只能查詢不能新增修改子姜。也可在配置文件中開啟sql日志來查看讀寫分離是否正常運行祟绊。
(注意:如果主庫宕機,Atlas的做法是從庫依然提供讀操作哥捕,只是不能寫入數(shù)據(jù)牧抽。這時候如果主庫恢復上線,Atlas監(jiān)測到會重新連接遥赚,系統(tǒng)又恢復了讀寫分離阎姥。mycat采取2種方案,一種是主庫不可用鸽捻,從庫也不可用呼巴,另外一種是主庫不可用,從庫依然可用御蒲。不管哪種方式都不能保證數(shù)據(jù)庫的高可用衣赶,因為在主庫宕機到恢復上線這段時間,要么只能查詢數(shù)據(jù)厚满,要么什么都做不了府瞄。當然也又實現(xiàn)數(shù)據(jù)高可用的方案,那就是Galera Cluster碘箍,就是集成了Galera插件的MySQL集群遵馆。由于我能力有限就不說了,后面如果搞明白了丰榴,再分享心得货邓。)
常見問題
如果無法連接Atlas的管理接口或者工作接口
1)查看一下atlas是否正常運行:ps -ef | grep mysql-proxy
2)檢查是否已經(jīng)關(guān)閉了防火墻:service iptables status
3)配置文件中pwds的用戶名密碼是否正確,用戶是否允許對應IP遠程訪問四濒。
至此换况,關(guān)于Atlas的讀寫分離的學習總結(jié)就分享完成了。