在自動化模式中應用運行MySQL
大?。?/span>0.8 MB 人氣: 2017-10-12 需要積分:1
標簽:MySQL(25720)
自動化模式(Autopilot Pattern)是一種設計應用與基礎架構的方式,旨在推動應用系統(tǒng)中的各個組件自動化。組成應用的每個容器都有自己的生命周期,我們將這些生命周期的行為封裝到了應用的容器中,而沒有依賴外部架構。下文將講述我們是如何借助這種模式,部署和運行其中一種常被認為難以在Docker容器中運行的復雜、有狀態(tài)的應用:MySQL。
運行MySQL
我們從常見的MySQL部署開始:從主節(jié)點到副本節(jié)點執(zhí)行異步復制。客戶端查詢副本節(jié)點,或對主節(jié)點執(zhí)行寫入操作。這個架構會引發(fā)一些關于服務發(fā)現(xiàn)和拓撲結構的問題:
副本節(jié)點如何知道在哪兒能找到主節(jié)點?主節(jié)點如何告知副本節(jié)點從哪兒開始執(zhí)行復制?客戶端如何知道在哪兒找到節(jié)點,哪些節(jié)點接受寫入操作?
在執(zhí)行部署后,我們還有一系列疑問:
我們怎樣進行備份?如何主節(jié)點出現(xiàn)故障,如何對副本節(jié)點進行升級來進行替換?在故障轉移期間,其他的副本節(jié)點怎樣知道在哪兒能找到新的主節(jié)點?客戶端如何知道我們執(zhí)行了故障轉移?
當然,其中一些問題已經有了現(xiàn)成的答案。配置管理工具經常會負責應用中架構的配置工作,但如果運行時應用拓撲出現(xiàn)變更,配置管理工具是無法回應的。數(shù)據(jù)庫即服務(DBaaS)負責執(zhí)行管理工作,不過如今大多的配置已不再控制范圍內,成本也更為高昂。
對應用來說,還有一個選擇就是執(zhí)行自動化運行。在這種模式下,要對應用模式執(zhí)行優(yōu)化,代表著要讓應用知道如何適應整個系統(tǒng):啟動、關閉、縮放、發(fā)現(xiàn)和恢復。最大限度地減少人為干涉,意味著錯誤更少,有更多的時間花在更重要的業(yè)務上。
很明顯我們沒打算重寫MySQL,因此需要找出辦法為現(xiàn)有的應用提供這個功能,而我們選擇了Containerbuddy。
架構
我們需要利用這些組件部署MySQL:
MySQL:我們使用了MySQL5.6(Percona Server),使用XtraBackup運行熱快照備份;
Consul:用來協(xié)調復制與故障轉移工作;
Manta:Joyent的對象存儲系統(tǒng),為存儲MySQL快照備份提供安全經久的服務;
Containerbuddy:包含在我們的MySQL容器中,負責編配bootstrap behavior,通過onStart、health、onChange處理器,調用Consul中存儲的key和checks協(xié)調復制的工作。
triton-mysql.py:Containerbuddy在執(zhí)行MySQL編配的繁重任務時會調用到的小型Python應用。
所有代碼與配置都能在GitHub中找到。
架構圖
當開始新的MySQL節(jié)點時,Containerbuddy的onStart處理器會調用triton-mysql.py。Containerbuddy會fork Percona Server并等待,同時運行onStart、health、onChange處理器。結果就是類似這樣在MySQL容器中的進程樹:
root@993acf351cd9:/# ps axo uid,pid,ppid,stime,cmdUID PID PPID STIME CMD root 1019:02/bin/containerbuddy mysql 94119:02|_ mysqld --console --gtid-mode=ON.。.root 107119:04|_ python /bin/triton-mysql.py healthroot 109119:04| |_ /usr/bin/innobackupex --no-timestamp.。.root 120119:06|_ python /bin/triton-mysql.py healthroot 121119:06|_ mysql -u repl -p.。.
自組裝
由于我們只用了幾個Docker鏡像,無需使用單獨的調度器來管理發(fā)現(xiàn)與引導服務,簡單地使用下面的命令就可以運行堆棧:
docker-composeup -d
出現(xiàn)的第一個節(jié)點會登錄Consul發(fā)現(xiàn)服務,嘗試并查找主節(jié)點。如果第一個節(jié)點發(fā)現(xiàn)主節(jié)點還不存在,則將自身作為主節(jié)點,并初始化數(shù)據(jù)庫。使用Consul會話通過atomic鎖寫入密碼,這樣就會有一個且僅有一個節(jié)點成為主節(jié)點。
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%
下載地址
在自動化模式中應用運行MySQL下載
相關電子資料下載
- 常用于緩存處理的機制總結 如何避免緩存雪崩問題? 24
- SpringBoot物理線程、虛擬線程、Webflux性能比較 37
- mysql經典面試題及答案 63
- 聊聊即將到來的MySQL5.7停服事件 179
- 基于Prometheus開源的完整監(jiān)控解決方案 25
- 基于控制臺的通訊錄管理系統(tǒng)功能介紹 59
- 什么是數(shù)據(jù)庫?除了MySQL還有哪些數(shù)據(jù)庫? 36
- 超好用的開源IP地址管理系統(tǒng),告別傳統(tǒng)Excel統(tǒng)計方式! 146
- Innodb中的Btree實現(xiàn)(一)·引言&insert篇 65
- 怎么查看MySQL語句有沒有用到索引 190