今天我編譯mysql部署項(xiàng)目時(shí)育灸,和一個(gè)同事聊了一下天驰后,他提到了一個(gè)mysql多個(gè)實(shí)例号坡,監(jiān)聽(tīng)多個(gè)端口的場(chǎng)景懊烤,我當(dāng)時(shí)并不清楚mysql這種用法的,一直以為是用集群的方案來(lái)做宽堆,后來(lái)經(jīng)過(guò)查找資料和和他的探討腌紧,了解一下這種mysql多實(shí)例模式,發(fā)現(xiàn)這種模式也有一定適用的場(chǎng)景畜隶。下面來(lái)介紹一下這種mysql多實(shí)例
簡(jiǎn)介
mysql多實(shí)例壁肋,簡(jiǎn)單理解就是在一臺(tái)服務(wù)器上逮光,mysql服務(wù)開啟多個(gè)不同的端口(如3306、3307)墩划,運(yùn)行多個(gè)服務(wù)進(jìn)程涕刚。這些 mysql 服務(wù)進(jìn)程通過(guò)不同的 socket來(lái)監(jiān)聽(tīng)不同的數(shù)據(jù)端口,進(jìn)而互不干涉的提供各自的服務(wù)乙帮。
在同一臺(tái)服務(wù)器上杜漠,mysql 多實(shí)例會(huì)去共用一套 mysql 應(yīng)用程序,因此你在部署 mysql 的時(shí)候只需要部署一次 mysql程序即可察净,無(wú)需多次部署驾茴。但是,mysql多實(shí)例之間會(huì)各自使用不同的 my.cnf 配置文件氢卡、啟動(dòng)程序和數(shù)據(jù)文件锈至。在提供服務(wù)方面,mysql多實(shí)例在邏輯上看起來(lái)是各自獨(dú)立译秦,互不干涉的峡捡,并且多個(gè)實(shí)例之間是根據(jù)配置文件的設(shè)定值,來(lái)獲取相關(guān)服務(wù)器的硬件資源筑悴。
-
下面用一個(gè)比喻们拙,來(lái)幫助大家理解 mysql 多實(shí)例的本質(zhì)。
mysql 多實(shí)例相當(dāng)于合租房阁吝,合租房里面有多個(gè)租客砚婆,每個(gè)租客都租有一個(gè)臥室,這個(gè)臥室就相當(dāng)于我們的 mysql 的一個(gè)實(shí)例突勇。整個(gè)合租房就相當(dāng)于一臺(tái)服務(wù)器装盯。合租房里面的洗衣機(jī)、衛(wèi)生間甲馋、陽(yáng)臺(tái)就相當(dāng)于我們服務(wù)器上的各種硬件資源埂奈,比如CPU、MEM摔刁、DISK等挥转,這些東西都是公共資源海蔽,大家共用的共屈。
另外,多實(shí)例并不僅僅是 mysql才有党窜,其實(shí)我們?nèi)粘_\(yùn)維中碰到的很多服務(wù)都可以部署使用多實(shí)例拗引,并且在生產(chǎn)環(huán)境中也非常熱衷去使用,甚至在門戶網(wǎng)站應(yīng)用也很廣泛幌衣,例如nginx多實(shí)例矾削、apache多實(shí)例壤玫、redis多實(shí)例等等。
既然大家都去用 mysql 多實(shí)例這種技術(shù)哼凯,那么mysql 多實(shí)例都能為企業(yè)帶來(lái)什么或者說(shuō)有什么優(yōu)缺點(diǎn)呢欲间?
優(yōu)點(diǎn)
-
1、有效利用服務(wù)器資源
當(dāng)單個(gè)服務(wù)器資源過(guò)剩時(shí)断部,可以充分利用剩余的資源來(lái)提供更多的服務(wù)
-
2猎贴、節(jié)約服務(wù)器資源
當(dāng)公司資金緊張,但數(shù)據(jù)庫(kù)又需要數(shù)據(jù)庫(kù)之間各自提供服務(wù)時(shí)蝴光,并且還想使用主從同步等技術(shù)她渴,此時(shí)多實(shí)例就再好不過(guò)了
-
3、方便后期架構(gòu)擴(kuò)展
當(dāng)公司的某個(gè)項(xiàng)目才啟動(dòng)時(shí)蔑祟,啟動(dòng)初期并不一定有很大的用戶量趁耗,因此可以先用一組物理數(shù)據(jù)庫(kù)服務(wù)器,在上面部署多個(gè)實(shí)例疆虚,方便后續(xù)架構(gòu)擴(kuò)展苛败、遷移
缺點(diǎn)
-
1、資源互相搶占問(wèn)題
當(dāng)某個(gè)服務(wù)實(shí)例并發(fā)很高或者有慢查詢時(shí)径簿,整個(gè)實(shí)例會(huì)消耗更多的內(nèi)存著拭、CPU和IO資源,這將導(dǎo)致服務(wù)器上的其它實(shí)例提供服務(wù)的質(zhì)量下降牍帚。這就比如說(shuō)合租房的各個(gè)租客儡遮,每當(dāng)早晨上班時(shí),都會(huì)洗漱暗赶,此時(shí)衛(wèi)生間的占用率就大鄙币,各個(gè)租客總會(huì)發(fā)生等待。
應(yīng)用場(chǎng)景
1蹂随、當(dāng)一個(gè)公司業(yè)務(wù)訪問(wèn)量不太大十嘿,又想節(jié)儉成本,并且還希望不同業(yè)務(wù)的數(shù)據(jù)庫(kù)服務(wù)能夠各自盡量獨(dú)立岳锁,提供服務(wù)能夠互相不受影響绩衷。
另外還需要應(yīng)用主從同步等技術(shù)來(lái)提供數(shù)據(jù)庫(kù)備份或讀寫分離服務(wù),以及方便后期業(yè)務(wù)量增大時(shí)激率,數(shù)據(jù)庫(kù)架構(gòu)的擴(kuò)展和遷移咳燕。此時(shí),Mysql 多實(shí)例就再好不過(guò)了乒躺。比如招盲,我們可以通過(guò)在 3 臺(tái)服務(wù)器部署 6-9 個(gè)實(shí)例,然后交叉做主從同步備份及讀寫分離嘉冒,來(lái)實(shí)現(xiàn) 6-9 臺(tái)服務(wù)器才能夠達(dá)到的效果2曹货、公司業(yè)務(wù)訪問(wèn)量不是太大的時(shí)候咆繁,服務(wù)器的資源基本都是過(guò)剩狀態(tài)。此時(shí)就很適合 mysql 多實(shí)例的應(yīng)用顶籽。如果對(duì) SQL語(yǔ)句 優(yōu)化做的比較好玩般,mysql 多實(shí)例 是一個(gè)很值得去使用的技術(shù)。即使后期業(yè)務(wù)并發(fā)很大礼饱,只要合理分配好系統(tǒng)資源壤短,也不會(huì)有太大的問(wèn)題
3、為了規(guī)避 mysql 對(duì) SMP 架構(gòu)不支持的缺陷慨仿,我們可以使用 mysql 多實(shí)例綁定處理器的辦法(NUMA處理器必須支持久脯,不過(guò)現(xiàn)在大部分處理器都支持的)將不同的數(shù)據(jù)庫(kù)分配到不同的實(shí)例上提供數(shù)據(jù)服務(wù);
4镰吆、傳統(tǒng)游戲行業(yè)的 MMO/MMORPG以及Web Game帘撰,會(huì)將每個(gè)服都對(duì)應(yīng)一個(gè)數(shù)據(jù)庫(kù),而且可能經(jīng)常要做很多數(shù)據(jù)查詢和數(shù)據(jù)訂正工作万皿。此時(shí)摧找,為了減少維護(hù)而出錯(cuò)的概率,我們也可以采用多實(shí)例的部署方式牢硅,按區(qū)的概念來(lái)分配數(shù)據(jù)庫(kù)蹬耘,這樣可以減少數(shù)據(jù)庫(kù)的損壞的概率。
Mysql多實(shí)例實(shí)現(xiàn)的3種方式
mysql 多實(shí)例常規(guī)來(lái)講减余,有三種方案可以實(shí)現(xiàn)综苔,這三種方案各有利弊,如下:
-
1位岔、基于多配置文件
通過(guò)使用多個(gè)配置文件來(lái)啟動(dòng)不同的進(jìn)程如筛,以此來(lái)實(shí)現(xiàn)多實(shí)例(ps:這個(gè)比較常用)。
優(yōu)點(diǎn):邏輯簡(jiǎn)單抒抬,配置簡(jiǎn)單
缺點(diǎn):管理起來(lái)不方便
-
2杨刨、基于mysqld_multi
通過(guò)官方自帶的 mysqld_multi 工具,使用單獨(dú)配置文件來(lái)實(shí)現(xiàn)多實(shí)例
優(yōu)點(diǎn): 便于集中管理管理
缺點(diǎn): 不方便針對(duì)每個(gè)實(shí)例配置進(jìn)行定制
-
3擦剑、基于IM
使用 MySQL 實(shí)例管理器(MYSQLMANAGER)妖胀,這個(gè)方法好像比較好不過(guò)也有點(diǎn)復(fù)雜
優(yōu)點(diǎn):便于集中管理
缺點(diǎn):耦合度高。IM一掛惠勒,實(shí)例全掛赚抡, 不方便針對(duì)每個(gè)實(shí)例配置進(jìn)行定制