華為云企業(yè)級(jí)Redis:從SSDB、LevelDB趟紊、RocksDB遷移到高斯Redis

【摘要】 云數(shù)據(jù)庫(kù)GaussDB(for Redis)作為華為云旗下企業(yè)級(jí)Redis氮双,致力于為客戶提供穩(wěn)定可靠、超高并發(fā)霎匈,且能夠極速?gòu)椥詳U(kuò)容的KV存儲(chǔ)服務(wù)戴差。
GaussDB(for Redis)是一款基于計(jì)算存儲(chǔ)分離架構(gòu),兼容Redis生態(tài)的云原生NoSQL數(shù)據(jù)庫(kù)铛嘱,基于共享存儲(chǔ)池的多副本強(qiáng)一致機(jī)制暖释,支持持久化存儲(chǔ)。在保障數(shù)據(jù)庫(kù)的高兼容墨吓、搞性價(jià)比球匕、高可靠、無(wú)損擴(kuò)容等特點(diǎn)的同時(shí)帖烘,GaussDB(for Redis)團(tuán)隊(duì)針對(duì)不同的數(shù)據(jù)庫(kù)產(chǎn)品亮曹,為用戶提供了多種數(shù)據(jù)遷移方案,本期將詳細(xì)介紹SSDB秘症、LevelDBRocksDB到GaussDB(for Redis)的遷移照卦。

1 SSDB到GaussDB(for Redis)的遷移

    SSDB是一款使用C/C++語(yǔ)言開(kāi)發(fā)的高性能NoSQL數(shù)據(jù)庫(kù),和Redis具有相似的API乡摹,支持KV役耕,list,map(hash)聪廉,zset(sorted set)蹄葱,qlist(隊(duì)列)等數(shù)據(jù)結(jié)構(gòu),因此得到了廣泛的應(yīng)用锄列。SSDB是一個(gè)持久化的KV存儲(chǔ)系統(tǒng)图云,底層使用leveldb作為存儲(chǔ)引擎。其業(yè)務(wù)直接與LevelDB交互邻邮,Compaction等操作會(huì)對(duì)業(yè)務(wù)讀寫造成直接的影響竣况。 GaussDB(for Redis)是一款兼容Redis生態(tài)的云原生NoSQL數(shù)據(jù)庫(kù),基于共享存儲(chǔ)池的多副本強(qiáng)一致機(jī)制筒严,以保證數(shù)據(jù)的安全性和可靠性丹泉。GaussDB(for Redis)使用RocksDB作為存儲(chǔ)引擎情萤,其性能與leveldb相比有了很大的提升, 并解決了leveldb主動(dòng)限制寫的問(wèn)題,同時(shí)實(shí)現(xiàn)了冷熱分離摹恨,減小了存儲(chǔ)層的操作對(duì)性能造成的影響筋岛。

1.1 遷移原理

    ssdb-port作為源端SSDB數(shù)據(jù)庫(kù)的主節(jié)點(diǎn)的從節(jié)點(diǎn)(replica)運(yùn)行,通過(guò)主從復(fù)制的方式進(jìn)行數(shù)據(jù)遷移晒哄。將獲取到的數(shù)據(jù)解析睁宰、轉(zhuǎn)換為Redis支持的格式,并發(fā)送到配置文件中指定的Redis實(shí)例寝凌,遷移過(guò)程如下圖所示柒傻。全量同步完成后,SSDB中新增的數(shù)據(jù)也會(huì)同步到Redis實(shí)例中较木。
file

1.2 前提條件

  • 部署遷移工具ssdb-port红符。
  • 保證遷移工具ssdb-port、源端SSDB和目標(biāo)端GaussDB(for Redis)網(wǎng)絡(luò)互通伐债。

1.3 操作步驟

  1. 正確修改ssdb-port的配置文件conf预侯。
  2. 使用./ssdb-port ssdb_port.conf命令啟動(dòng)進(jìn)程,進(jìn)行數(shù)據(jù)遷移峰锁。
  3. 跟蹤遷移日志萎馅,評(píng)估遷移進(jìn)度,遷移完成后祖今,在高斯Redis實(shí)例上校驗(yàn)遷移數(shù)據(jù)的正確性和完備性校坑。
  4. 校驗(yàn)完成后將業(yè)務(wù)切到GaussDB (for Redis)

1.4 使用須知

  • ssdb-port作為SSDB主節(jié)點(diǎn)的從節(jié)點(diǎn),只讀取全量和增量數(shù)據(jù)千诬,無(wú)數(shù)據(jù)受損風(fēng)險(xiǎn)耍目。
  • 由于在源端使用ssdb-port遷移工具,源端SSDB性能會(huì)受到一定的影響徐绑。
  • 全量遷移和增量遷移可以不停服邪驮,數(shù)據(jù)全部遷入GaussDB(for Redis)后需要短暫停服。

1.5 遷移性能參考

  • 環(huán)境:源端SSDB和ssdb-port同時(shí)部署在華為云4U16GB的彈性云服務(wù)器上傲茄,目標(biāo)端為8U16GB毅访,3節(jié)點(diǎn)GaussDB(for Redis)實(shí)例。
  • 預(yù)置數(shù)據(jù):使用memtier_benchmark工具預(yù)置100GB數(shù)據(jù)盘榨。
  • 遷移性能:約3000qps喻粹。

2 LevelDB到GaussDB(for Redis)的遷移

    LevelDB是一個(gè)開(kāi)源的持久化KV單機(jī)數(shù)據(jù)庫(kù)引擎,具有很高的隨機(jī)寫草巡,順序讀/寫性能守呜,適合應(yīng)用在寫多讀少的場(chǎng)景。其內(nèi)部沒(méi)有設(shè)計(jì)成C/S網(wǎng)絡(luò)結(jié)構(gòu),使用時(shí)必須和服務(wù)部署在同一臺(tái)服務(wù)器查乒,對(duì)于服務(wù)的部署弥喉、使用有較大的限制。相比于在LevelDB基礎(chǔ)上開(kāi)發(fā)的RocksDB,  LevelDB存在較多缺點(diǎn)玛迄,如無(wú)法很好的使用多核服務(wù)器的計(jì)算性能由境,無(wú)法支撐TB級(jí)數(shù)據(jù)存儲(chǔ),不支持從HDFS讀取數(shù)據(jù)等蓖议。

    GaussDB(for Redis)采用RocksDB作為存儲(chǔ)引擎虏杰,兼容Redis協(xié)議,具有豐富的數(shù)據(jù)類型拒担,可以滿足LevelDB的使用需求嘹屯。同時(shí)GaussDB(for Redis)對(duì)RocksDB進(jìn)行深度定制攻询,實(shí)現(xiàn)秒級(jí)分裂彈性擴(kuò)容从撼,擴(kuò)縮容無(wú)需搬遷數(shù)據(jù),快速而平滑钧栖,為L(zhǎng)evelDB業(yè)務(wù)轉(zhuǎn)到Redis生態(tài)提供了便利低零。

2.1 遷移原理

    使用自研遷移工具leveldb-port,和LevelDB部署在相同機(jī)器上拯杠,準(zhǔn)備好配置文件掏婶,啟動(dòng)遷移即可自動(dòng)完成全量與增量的遷移。全量遷移對(duì)LevelDB數(shù)據(jù)進(jìn)行快照潭陪,然后掃描整個(gè)數(shù)據(jù)庫(kù)雄妥,將數(shù)據(jù)打包成GaussDB(for Redis)識(shí)別的格式,發(fā)送到GaussDB(for Redis) 依溯,具有很高的遷移效率老厌。增量遷移解析LevelDB的wal文件,將LevelDB的操作解析出來(lái)黎炉,然后對(duì)其中的key進(jìn)行分片枝秤,多線程進(jìn)行發(fā)送。

2.2 操作步驟

  1. 準(zhǔn)備工作:
  • 將 leveldb-port 部署在 leveldb 所在服務(wù)器上慷嗜,確保與高斯 Redis 網(wǎng)絡(luò)打通淀弹。
  • 確保目標(biāo)端GaussDB (for Redis) 實(shí)例已清空。
  • 修改配置文件庆械。

2. 執(zhí)行命令./leveldb-port ./leveldb-port.conf薇溃。

3. 跟蹤日志,判斷遷移狀態(tài):

  • 全量遷移完成缭乘,會(huì)打印"Full migrate finished"沐序;
  • 增量遷移定時(shí)打印尚未完成的 wal 文件數(shù)及尚未發(fā)送出去的 kv 數(shù)。

4. 數(shù)據(jù)驗(yàn)證:對(duì) LevelDB 進(jìn)行抽樣驗(yàn)證,確保GaussDB (for Redis) 加載數(shù)據(jù)正確薄啥。

5. 服務(wù)切換:當(dāng)增量遷移進(jìn)入尾聲時(shí)辕羽,將服務(wù)切換到GaussDB (for Redis)。

2.3 使用須知

  • 遷移工具需要部署在源端垄惧,對(duì)性能有一定消耗刁愿,可通過(guò)修改配置文件進(jìn)行一定的控制。
  • 遷移過(guò)程讀取LevelDB的源數(shù)據(jù)文件到逊,只讀操作铣口,理論上不會(huì)有數(shù)據(jù)受損風(fēng)險(xiǎn)。
  • 遷移過(guò)程不需要停服觉壶。
  • 若遷移過(guò)程出現(xiàn)故障脑题,需要清理GaussDB(for Redis)實(shí)例,重新啟動(dòng)遷移铜靶。

3 RocksDB到GaussDB(for Redis)的遷移

    RocksDB是FaceBook基于LevelDB開(kāi)發(fā)的一個(gè)持久化KV單機(jī)數(shù)據(jù)庫(kù)引擎叔遂,具有強(qiáng)大的順序讀寫及隨機(jī)寫性能。相對(duì)于LevelDB争剿,RocksDB做了許多優(yōu)化已艰,性能有了很大提升, 而且解決了LevelDB主動(dòng)限制寫的問(wèn)題蚕苇。作為一個(gè)數(shù)據(jù)庫(kù)引擎哩掺,RocksDB沒(méi)有設(shè)計(jì)成C/S網(wǎng)絡(luò)結(jié)構(gòu),直接使用需要和服務(wù)部署在同一臺(tái)服務(wù)器涩笤,對(duì)于服務(wù)的部署嚼吞、使用有較大的限制。

    GaussDB(for Redis)采用RocksDB作為存儲(chǔ)引擎蹬碧,兼容Redis協(xié)議具有豐富的數(shù)據(jù)類型舱禽,可以滿足RocksDB的使用需求。同時(shí)GaussDB(for Redis)對(duì)RocksDB進(jìn)行深度定制锰茉,實(shí)現(xiàn)秒級(jí)分裂彈性擴(kuò)容呢蔫,擴(kuò)縮容無(wú)需搬遷數(shù)據(jù),快速而平滑飒筑,為RocksDB業(yè)務(wù)轉(zhuǎn)到Redis生態(tài)提供了便利片吊。

3.1 遷移原理

    使用自研遷移工具rocksdb-port,和RocksDB部署在相同機(jī)器上协屡,準(zhǔn)備好配置文件俏脊,啟動(dòng)遷移即可自動(dòng)完成全量與增量的遷移。全量遷移對(duì)RocksDB數(shù)據(jù)進(jìn)行快照肤晓,然后掃描整個(gè)數(shù)據(jù)庫(kù)爷贫,將數(shù)據(jù)打包成GaussDB(for Redis)識(shí)別的格式认然,發(fā)送到GaussDB(for Redis),具有很高的遷移效率漫萄。增量遷移解析RocksDB的wal文件卷员,將RocksDB的操作解析出來(lái),然后對(duì)其中的key進(jìn)行分片腾务,多線程進(jìn)行發(fā)送毕骡。

3.2 前提條件

  • 部署遷移工具pika-port
  • 確保源端Pika實(shí)例、pika-port和目標(biāo)端GaussDB(for Redis)實(shí)例網(wǎng)絡(luò)互通岩瘦。

3.3 操作步驟

1. 準(zhǔn)備工作:

  • 將 rocksdb-port 部署在 rocksdb 同服務(wù)器上未巫,確保與高斯 Redis 網(wǎng)絡(luò)打通。
  • 確保目標(biāo)端GaussDB (for Redis) 實(shí)例已清空启昧。
  • 修改配置文件叙凡。

2. 啟動(dòng)遷移:執(zhí)行命令./rocksdb-port ./rocksdb-port.conf

3. 跟蹤日志,判斷遷移狀態(tài):

  • 全量遷移完成密末,會(huì)打印"Full migrate finished"握爷;
  • 增量遷移定時(shí)打印尚未解析的 wal 文件數(shù)及尚未發(fā)送出去的 kv 數(shù)。

4. 數(shù)據(jù)驗(yàn)證:對(duì) RocksDB 進(jìn)行抽樣驗(yàn)證苏遥,確保 GaussDB (for Redis) 加載數(shù)據(jù)正確饼拍。

5. 服務(wù)切換:當(dāng)增量遷移進(jìn)入尾聲時(shí)赡模,將服務(wù)切換到 GaussDB (for Redis) 田炭。

3.4 使用須知

  • 遷移工具需要部署在源端,對(duì)性能有一定消耗漓柑,可通過(guò)修改配置文件進(jìn)行一定的控制教硫。
  • 遷移過(guò)程讀取RocksDB的源數(shù)據(jù)文件,只讀操作辆布,理論上不會(huì)有數(shù)據(jù)受損風(fēng)險(xiǎn)瞬矩。
  • 遷移過(guò)程不需要停服。
  • 若遷移過(guò)程出現(xiàn)故障锋玲,需要清理GaussDB(for Redis)實(shí)例景用,重新啟動(dòng)遷移。

4 結(jié)語(yǔ)

    高斯 Redis 在社區(qū)版 Redis 的基礎(chǔ)上惭蹂,結(jié)合華為自研強(qiáng)一致存儲(chǔ)DFV Pool伞插,具有強(qiáng)一致、秒擴(kuò)容盾碗、超可用媚污、低成本等優(yōu)勢(shì),保證了計(jì)數(shù)的準(zhǔn)確性廷雅、可靠性耗美。

本文由博客群發(fā)一文多發(fā)等運(yùn)營(yíng)工具平臺(tái) OpenWrite 發(fā)布

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末京髓,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子商架,更是在濱河造成了極大的恐慌堰怨,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛇摸,死亡現(xiàn)場(chǎng)離奇詭異诚些,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)皇型,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門诬烹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人弃鸦,你說(shuō)我怎么就攤上這事绞吁。” “怎么了唬格?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵家破,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我购岗,道長(zhǎng)汰聋,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任喊积,我火速辦了婚禮烹困,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘乾吻。我一直安慰自己髓梅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布绎签。 她就那樣靜靜地躺著枯饿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪诡必。 梳的紋絲不亂的頭發(fā)上奢方,一...
    開(kāi)封第一講書(shū)人閱讀 51,590評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音爸舒,去河邊找鬼蟋字。 笑死,一個(gè)胖子當(dāng)著我的面吹牛碳抄,可吹牛的內(nèi)容都是我干的愉老。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼剖效,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼嫉入!你這毒婦竟也來(lái)了焰盗?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤咒林,失蹤者是張志新(化名)和其女友劉穎熬拒,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體垫竞,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡澎粟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了欢瞪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片活烙。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖遣鼓,靈堂內(nèi)的尸體忽然破棺而出啸盏,到底是詐尸還是另有隱情,我是刑警寧澤骑祟,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布回懦,位于F島的核電站,受9級(jí)特大地震影響次企,放射性物質(zhì)發(fā)生泄漏怯晕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一缸棵、第九天 我趴在偏房一處隱蔽的房頂上張望舟茶。 院中可真熱鬧,春花似錦蛉谜、人聲如沸稚晚。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至鸳劳,卻和暖如春狰贯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背赏廓。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工涵紊, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人幔摸。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓摸柄,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親既忆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子驱负,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容