【摘要】 云數(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秘症、LevelDB和RocksDB到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í)例中较木。
1.2 前提條件
- 部署遷移工具ssdb-port红符。
- 保證遷移工具ssdb-port、源端SSDB和目標(biāo)端GaussDB(for Redis)網(wǎng)絡(luò)互通伐债。
1.3 操作步驟
- 正確修改ssdb-port的配置文件conf预侯。
- 使用./ssdb-port ssdb_port.conf命令啟動(dòng)進(jìn)程,進(jìn)行數(shù)據(jù)遷移峰锁。
- 跟蹤遷移日志萎馅,評(píng)估遷移進(jìn)度,遷移完成后祖今,在高斯Redis實(shí)例上校驗(yàn)遷移數(shù)據(jù)的正確性和完備性校坑。
- 校驗(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 操作步驟
- 準(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ā)布