最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

從實(shí)戰(zhàn)出發(fā)使用RedisShake進(jìn)行Redis數(shù)據(jù)在線+離線模式遷移指南

2023-01-07 17:04 作者:要寵你上天  | 我要投稿

RedisShake基本介紹

RedisShake是基于redis-port基礎(chǔ)上進(jìn)行改進(jìn)的是一款開源的Redis遷移工具,支持Cluster集群的在線遷移與離線遷移(備份文件導(dǎo)入)。數(shù)據(jù)可平滑遷移,當(dāng)部署在其他云廠商Redis服務(wù)上的Cluster集群數(shù)據(jù),由于SYNC、PSYNC命令被云廠商禁用,無法在線遷移時(shí),可以選擇離線遷移。

RedisShake使用背景

RedisShake是一個用于在兩個Redis實(shí)例之間同步數(shù)據(jù)的工具,滿足非常靈活的同步與遷移需求。Redis實(shí)例之間的關(guān)系其中可能存在(standalone->standalone),(standalone->Cluster),(Cluster->Cluster)等。目前,比較常用的一個數(shù)據(jù)遷移工具是Redis-Shake ,這是阿里云Redis和MongoDB團(tuán)隊(duì)開發(fā)的一個用于 Redis 數(shù)據(jù)同步的工具。

RedisShake功能說明

RedisShake主要是支持Redis的RDB文件的解析、恢復(fù)、備份、同步四個功能:

  • 恢復(fù)(restore):將 RDB 文件恢復(fù)到目標(biāo)Redis數(shù)據(jù)庫。

  • 備份(dump):將源 Redis 的全量數(shù)據(jù)通過RDB文件備份起來。

  • 解析(decode):讀取 RDB 文件,并以 JSON 格式解析存儲。

  • 同步(sync):支持源redis和目的redis的數(shù)據(jù)同步,支持全量和增量數(shù)據(jù)的遷移,支持從云下到阿里云云上的同步,也支持云下到云下不同環(huán)境的同步,支持單節(jié)點(diǎn)、主從版、集群版之間的互相同步。

  • 同步(rump):支持源 Redis 和目的 Redis 的數(shù)據(jù)同步,僅支持全量遷移。采用scan和restore命令進(jìn)行遷移,支持不同云廠商不同redis版本的遷移。

注意:如果源端是集群版,可以啟動一個RedisShake,從不同的db結(jié)點(diǎn)進(jìn)行拉取,同時(shí)源端不能開啟move slot功能;對于目的端,如果是集群版,寫入可以是1個或者多個db結(jié)點(diǎn)。

Redis-Shake特性概覽

  • 高性能:全量同步階段并發(fā)執(zhí)行,增量同步階段異步執(zhí)行,能夠達(dá)到毫秒級別延遲(取決于網(wǎng)絡(luò)延遲)。同時(shí),我們還對大key同步進(jìn)行分批拉取,優(yōu)化同步性能。

  • 在 Redis 5.0、Redis 6.0 和 Redis 7.0 上測試

  • 支持使用lua自定義過濾規(guī)則

  • 支持大實(shí)例遷移

  • 支持restore模式和sync模式

  • 支持阿里云 Redis 和 ElastiCache

  • 監(jiān)控體系:用戶可以通過我們提供的restful拉取metric來對redis-shake進(jìn)行實(shí)時(shí)監(jiān)控:curl 127.0.0.1:9320/metric。

  • 數(shù)據(jù)校驗(yàn):如何校驗(yàn)同步的正確性?可以采用我們開源的redis-full-check。

  • 支持版本:支持2.8-5.0版本的同步,此外還支持codis,支持云下到云上,云上到云上,云上到云下(阿里云目前支持主從版),其他云到阿里云等鏈路,幫助用戶靈活構(gòu)建混合云場景。

  • 斷點(diǎn)續(xù)傳。支持?jǐn)嚅_后按offset恢復(fù),降低因主備切換、網(wǎng)絡(luò)抖動造成鏈路斷開重新同步拉取全量的性能影響。

RedisShake執(zhí)行過程

  1. 啟動Redis-shake進(jìn)程,這個進(jìn)程模擬了一個 Redis 實(shí)例,Redis-shake的基本原理就是模擬一個Slave從節(jié)點(diǎn)加入源Redis集群,然后進(jìn)行增量的拉?。ㄍㄟ^psync命令)。

  2. Redis-shake進(jìn)程和數(shù)據(jù)遷出的源實(shí)例進(jìn)行數(shù)據(jù)的全量拉取同步,并回放,這個過程和 Redis 主從實(shí)例的全量同步是類似的。如下圖所示。

詳細(xì)分析上述同步原理

  1. 源Redis服務(wù)實(shí)例相當(dāng)于主庫,Redis-shake相當(dāng)于從庫,它會發(fā)送psync指令給源Redis服務(wù)實(shí)例。

  2. 源Redis實(shí)例先把RDB文件傳輸給 Redis-shake ,Redis-shake 會把RDB文件發(fā)送給目的實(shí)例。

  3. 源實(shí)例會再把增量命令發(fā)送給 Redis-shake ,Redis-shake負(fù)責(zé)把這些增量命令再同步給目的實(shí)例。

如果源端是集群模式,只需要啟動一個redis-shake進(jìn)行拉取,同時(shí)不能開啟源端的move slot操作。如果目的端是集群模式,可以寫入到一個結(jié)點(diǎn),然后再進(jìn)行slot的遷移,當(dāng)然也可以多對多寫入。

目前,redis-shake到目的端采用單鏈路實(shí)現(xiàn),對于正常情況下,這不會成為瓶頸,但對于極端情況,qps比較大的時(shí)候,此部分性能可能成為瓶頸,后續(xù)我們可能會計(jì)劃對此進(jìn)行優(yōu)化。另外,redis-shake到目的端的數(shù)據(jù)同步采用異步的方式,讀寫分離在2個線程操作,降低因?yàn)榫W(wǎng)絡(luò)時(shí)延帶來的同步性能下降。

Redis-Shake安裝使用

主要有兩種方式:下載Release版本的可執(zhí)行二進(jìn)制包、下載源碼文件進(jìn)行編譯操作這兩種方式。

下載Release版本的可執(zhí)行二進(jìn)制包

Download from Release

點(diǎn)擊下載就可以進(jìn)行直接使用Redis-Shake服務(wù)。

下載源碼文件進(jìn)行編譯操作

除了直接下載可執(zhí)行包之外,還可以下載源碼之后,可以進(jìn)行運(yùn)行build.sh文件執(zhí)行進(jìn)行編譯源碼,生成可執(zhí)行包。可以根據(jù)上面的下載中source code進(jìn)行下載。

或者可以針對于Git進(jìn)行clone源碼倉庫,如下所示。


運(yùn)行Redis-Shake服務(wù)

首先如果需要進(jìn)行同步和重放,則需要進(jìn)行編輯sync.toml文件以及編輯restore.toml.

  • redis-shake 支持三種數(shù)據(jù)遷移模式:sync、restore 和 scan:

  • 快速開始:數(shù)據(jù)遷移(使用 sync 模式)

  • 快速開始:從dump.rdb恢復(fù)數(shù)據(jù)(使用 restore 模式)

  • 快速開始:數(shù)據(jù)遷移(使用 scan 模式)

  • 使用 filters 做數(shù)據(jù)清洗

  • 運(yùn)行日志

  • 運(yùn)行監(jiān)控

啟動同步sync運(yùn)行機(jī)制

我們打開或者編輯sync.toml

當(dāng)我們編輯sync.toml文件之后,可以進(jìn)行配置我們實(shí)際情況下的source源redis實(shí)例以及target目標(biāo)redis實(shí)例。之后可以配置對應(yīng)的cpu和相關(guān)性能的配置。下面針對于配置進(jìn)行相關(guān)的配置介紹


Redis單機(jī)實(shí)例同步到Redis單機(jī)實(shí)例

修改sync.toml,改為如下配置。


啟動 redis-shake:

Redis單機(jī)實(shí)例同步到Redis集群實(shí)例

修改 sync.toml,改為如下配置:


啟動 redis-shake:


Redis集群實(shí)例同步到Redis集群實(shí)例

方法1:手動起多個 redis-shake

集群C有四個節(jié)點(diǎn):

  • 192.168.0.1:6379

  • 192.168.0.2:6379

  • 192.168.0.3:6379

  • 192.168.0.4:6379

把4個節(jié)點(diǎn)當(dāng)成4個單機(jī)實(shí)例,參照單機(jī)到集群 部署 4 個 redis-shake 進(jìn)行數(shù)據(jù)同步。不要在同一個目錄啟動多個 redis-shake,因?yàn)?redis-shake 會在本地存儲臨時(shí)文件,多個 redis-shake 之間的臨時(shí)文件會干擾,正確做法是建立多個目錄。

方法2:借助 cluster_helper.py 啟動

腳本cluster_helper.py可以方便啟動多個redis-shake從集群遷移數(shù)據(jù),效果等同于方法1。

源端有多少個分片,cluster_helper.py 就會起多少個 redis-shake 進(jìn)程,所以如果源端分片數(shù)較多的時(shí)候,需要評估當(dāng)前機(jī)器是否可以承擔(dān)這么多進(jìn)程。

cluster_helper.py 異常退出的時(shí)候,可能沒有正常退出 redis-shake 進(jìn)程,需要 ps aux | grep redis-shake 檢查。

每個 redis-shake 進(jìn)程的執(zhí)行日志記錄在 RedisShake/cluster_helper/data/xxxxx 中,反饋問題請?zhí)峁┫嚓P(guān)日志。


Python 需要 python3.6 及以上版本,安裝 Python依賴:

配置

修改 sync.toml:

運(yùn)行


  • 參數(shù) 1 是 redis-shake 可執(zhí)行程序的路徑

  • 參數(shù) 2 是配置文件路徑


從實(shí)戰(zhàn)出發(fā)使用RedisShake進(jìn)行Redis數(shù)據(jù)在線+離線模式遷移指南的評論 (共 條)

分享到微博請遵守國家法律
上蔡县| 白银市| 龙泉市| 如东县| 保亭| 阜新市| 喜德县| 桦南县| 桦川县| 应用必备| 光山县| 定结县| 南皮县| 上高县| 鹤峰县| 江都市| 博白县| 宁强县| 丹棱县| 吉木乃县| 凤凰县| 龙山县| 莱西市| 马龙县| 罗平县| 长葛市| 云安县| 辛集市| 友谊县| 唐河县| 栾城县| 潼关县| 汉川市| 鹤山市| 秦安县| 平和县| 遂溪县| 定日县| 凤阳县| 吴江市| 泾川县|