分庫分布的幾件小事(三)可以動態(tài)擴容縮容的分庫分表方案

1.擴容與縮容

這個是你必須面對的一個事兒限煞,就是你已經(jīng)弄好分庫分表方案了撮抓,然后一堆庫和表都建好了棋电,基于分庫分表中間件的代碼開發(fā)啥的都好了振劳,測試都ok了昭伸,數(shù)據(jù)能均勻分布到各個庫和各個表里去,而且接著你還通過雙寫的方案咔嚓一下上了系統(tǒng)澎迎,已經(jīng)直接基于分庫分表方案在搞了庐杨。

那么現(xiàn)在問題來了选调,你現(xiàn)在這些庫和表又支撐不住了,要繼續(xù)擴容咋辦灵份?這個可能就是說你的每個庫的容量又快滿了仁堪,或者是你的表數(shù)據(jù)量又太大了,也可能是你每個庫的寫并發(fā)太高了填渠,你得繼續(xù)擴容弦聂。

縮容就是現(xiàn)在業(yè)務不景氣了,數(shù)據(jù)量減少氛什,并發(fā)量下降莺葫,那么不能讓他占著太多的數(shù)據(jù)庫啊,肯定要進行縮容枪眉。

2.停機擴容

原理
這個方案就跟停機遷移一樣捺檬,步驟幾乎一致,唯一的一點就是那個導數(shù)的工具贸铜,是把現(xiàn)有庫表的數(shù)據(jù)抽出來慢慢倒入到新的庫和表里去堡纬。但是最好別這么玩兒,有點不太靠譜蒿秦,因為既然分庫分表就說明數(shù)據(jù)量實在是太大了烤镐,可能多達幾億條,甚至幾十億棍鳖,你這么玩兒炮叶,可能會出問題。

從單庫單表遷移到分庫分表的時候渡处,數(shù)據(jù)量并不是很大悴灵,單表最大也就兩三千萬。寫個工具骂蓖,多弄幾臺機器并行跑积瞒,1小時數(shù)據(jù)就導完了

如果經(jīng)過分庫分表之后,那么數(shù)據(jù)量肯定會非常大登下,那么這種方案的耗時會太長茫孔。

3.優(yōu)雅設計擴容縮容

優(yōu)雅的設計擴容縮容的意思就是 進行擴容縮容的代價要小,遷移數(shù)據(jù)要快被芳。

可以采用邏輯分庫分表的方式來代替物理分庫分表的方式缰贝,要擴容縮容時,只需要將邏輯上的數(shù)據(jù)庫畔濒、表改為物理上的數(shù)據(jù)庫剩晴、表。

第一次進行分庫分表時就多分幾個庫,一個實踐是利用32 * 32來分庫分表赞弥,即分為32個庫毅整,每個庫32張表,一共就是1024張表绽左,根據(jù)某個id先根據(jù)先根據(jù)數(shù)據(jù)庫數(shù)量32取模路由到庫悼嫉,再根據(jù)一個庫的表數(shù)量32取模路由到表里面。

剛開始的時候拼窥,這個庫可能就是邏輯庫戏蔑,建在一個mysql服務上面,比如一個mysql服務器建了16個數(shù)據(jù)庫鲁纠。

如果后面要進行拆分总棵,就是不斷的在庫和mysql實例之間遷移就行了。將mysql服務器的庫搬到另外的一個服務器上面去改含,比如每個服務器創(chuàng)建8個庫情龄,這樣就由兩臺mysql服務器變成了4臺mysql服務器。我們系統(tǒng)只需要配置一下新增的兩臺服務器即可候味。

比如說最多可以擴展到32個數(shù)據(jù)庫服務器,每個數(shù)據(jù)庫服務器是一個庫隔心。如果還是不夠白群?最多可以擴展到1024個數(shù)據(jù)庫服務器,每個數(shù)據(jù)庫服務器上面一個庫一個表硬霍。因為最多是1024個表么帜慢。

這么搞,是不用自己寫代碼做數(shù)據(jù)遷移的唯卖,都交給dba來搞好了粱玲,但是dba確實是需要做一些庫表遷移的工作,但是總比你自己寫代碼拜轨,抽數(shù)據(jù)導數(shù)據(jù)來的效率高得多了抽减。

哪怕是要減少庫的數(shù)量,也很簡單橄碾,其實說白了就是按倍數(shù)縮容就可以了卵沉,然后修改一下路由規(guī)則。

分庫分表路由規(guī)則
對庫可以進行根據(jù)庫的數(shù)量取模決定庫的路由法牲。
對表可以先根據(jù)表的數(shù)量進行整除史汗,然后將結果再對表的數(shù)量進行取模,這樣可以跟均勻的分布拒垃。

過程
1停撞、設定好幾臺數(shù)據(jù)庫服務器,每臺服務器上幾個庫悼瓮,每個庫多少個表戈毒,推薦是32庫 * 32表艰猬,對于大部分公司來說,可能幾年都夠了

2副硅、路由的規(guī)則姥宝,orderId 模 32 = 庫,orderId / 32 模 32 = 表

3恐疲、擴容的時候腊满,申請增加更多的數(shù)據(jù)庫服務器,裝好mysql培己,倍數(shù)擴容碳蛋,4臺服務器,擴到8臺服務器省咨,16臺服務器

4肃弟、由dba負責將原先數(shù)據(jù)庫服務器的庫,遷移到新的數(shù)據(jù)庫服務器上去零蓉,很多工具笤受,庫遷移,比較便捷

5敌蜂、我們這邊就是修改一下配置箩兽,調整遷移的庫所在數(shù)據(jù)庫服務器的地址

6、重新發(fā)布系統(tǒng)章喉,上線汗贫,原先的路由規(guī)則變都不用變,直接可以基于2倍的數(shù)據(jù)庫服務器的資源秸脱,繼續(xù)進行線上系統(tǒng)的提供服務

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末落包,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子摊唇,更是在濱河造成了極大的恐慌咐蝇,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件巷查,死亡現(xiàn)場離奇詭異嘹害,居然都是意外死亡,警方通過查閱死者的電腦和手機吮便,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門笔呀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人髓需,你說我怎么就攤上這事许师。” “怎么了?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵微渠,是天一觀的道長搭幻。 經(jīng)常有香客問我,道長逞盆,這世上最難降的妖魔是什么檀蹋? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮云芦,結果婚禮上俯逾,老公的妹妹穿的比我還像新娘。我一直安慰自己舅逸,他們只是感情好桌肴,可當我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著琉历,像睡著了一般坠七。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上旗笔,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天彪置,我揣著相機與錄音,去河邊找鬼蝇恶。 笑死拳魁,一個胖子當著我的面吹牛,可吹牛的內容都是我干的艘包。 我是一名探鬼主播的猛,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼耀盗,長吁一口氣:“原來是場噩夢啊……” “哼想虎!你這毒婦竟也來了?” 一聲冷哼從身側響起叛拷,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤舌厨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后忿薇,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體裙椭,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年署浩,在試婚紗的時候發(fā)現(xiàn)自己被綠了揉燃。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡筋栋,死狀恐怖炊汤,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤抢腐,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布姑曙,位于F島的核電站,受9級特大地震影響迈倍,放射性物質發(fā)生泄漏伤靠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一啼染、第九天 我趴在偏房一處隱蔽的房頂上張望宴合。 院中可真熱鬧,春花似錦提完、人聲如沸形纺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逐样。三九已至,卻和暖如春打肝,著一層夾襖步出監(jiān)牢的瞬間脂新,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工粗梭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留争便,地道東北人。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓断医,卻偏偏與公主長得像滞乙,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鉴嗤,可洞房花燭夜當晚...
    茶點故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內容