Redis——版本升级&数据迁移
前言
最近在做中間件升級(jí)工作,發(fā)現(xiàn)服務(wù)器redis版本較低3.2.3,為了更好利用redis新特性,于是打算把redis升級(jí)到新版本6.0.9。
注意:redis 偶數(shù)為穩(wěn)定版本,奇數(shù)為開發(fā)版本。下面是升級(jí)版本的兩種方法:
線上平滑升級(jí)
離線手動(dòng)升級(jí)
線上平滑升級(jí)
為了能夠降低服務(wù)中斷時(shí)間對(duì)應(yīng)用產(chǎn)生的影響,我們首先在另外一臺(tái)服務(wù)器上,配置要升級(jí)服務(wù)器的從庫(kù),做為“替身”,然后做如下步驟。
配置好從庫(kù)“替身”,執(zhí)行命令:slaveof 10.xxx.xxx.xxx 6379 同步數(shù)據(jù),需要等待一段時(shí)間主庫(kù)把數(shù)據(jù)同步到從庫(kù),這期間可以使用info replication查看對(duì)比slave和master offset 復(fù)制偏移量。
讓替身slave成為線上機(jī)器,同步完成后,將slave-read-only 設(shè)置為no。
將線上流量引入到slave上, 此時(shí)slave成為線上機(jī)器,查看線上機(jī)器的QPS,直至為0。
趁此時(shí),卸載線上的舊Redis,然后安裝新版本的Redis。
新版本的Redis作為slave同步線上Redis的數(shù)據(jù),同步完成后同樣將slave-read-only設(shè)置為no, 然后將線上流量引回來,此時(shí)查看剛才的替身Redis的QPS為0即可。
在這個(gè)過程中,查看redis請(qǐng)求的QPS最好的方法就是通過monitor來實(shí)現(xiàn):
redis-cli -h 127.0.0.1 -p 6379 monitor | cut -d "." -f1 | uniq -c
可以通過ss -anp | grep redis:port命令 查看連接情況:
ss -anp | grep .7777
然后可以通過ps aux命令查看具體是什么命令在連接redis:
ps aux|grep 22982
離線手動(dòng)升級(jí)
離線手動(dòng)升級(jí)Redis,采用以下方案進(jìn)行,這也是我在生產(chǎn)環(huán)境使用的方案。
在新的三臺(tái)服務(wù)器上安裝部署最新穩(wěn)定版本(6.0.9)的Redis集群;
使用Redis-Shake工具,將舊Redis集群上的數(shù)據(jù)遷移到新Redis集群,并驗(yàn)證數(shù)據(jù)完整性;
修改相關(guān)應(yīng)用的配置,指向新Redis集群地址,然后重啟相關(guān)應(yīng)用的服務(wù);
通知相關(guān)業(yè)務(wù)人員進(jìn)行業(yè)務(wù)驗(yàn)證,新Redis集群開始運(yùn)行;
新Redis集群穩(wěn)定運(yùn)行一段時(shí)候后,將舊Redis集群進(jìn)行下線操作。
1、搭建新的集群
請(qǐng)參考:https://www.cnblogs.com/caoweixiong/p/14235807.html
2、使用Redis-Shake遷移數(shù)據(jù)
下載Redis-Shake
cd /opt wget https://github.com/alibaba/RedisShake/releases/download/release-v2.0.3-20200724/redis-shake-v2.0.3.tar.gz tar -xvf redis-shake-v2.0.3.tar.gz cd redis-shake-v2.0.3 ls -l
配置Redis-Shake
1、獲取源集群和目標(biāo)集群的Master節(jié)點(diǎn)和IP:
redis-cli -h {redis_address} -p {redis_port} cluster nodes
在命令返回的結(jié)果中,獲取所有master節(jié)點(diǎn)的IP端口,如下如所示:
2、編輯RedisShake配置文件:
編輯redis-shake工具配置文件redis-shake.conf,補(bǔ)充源端與目標(biāo)端所有master節(jié)點(diǎn)的連接信息:
log.file = /var/log/redis-shake.log source.type = cluster source.address = 172.16.0.150:7000;172.16.0.150:7001;172.16.0.150:7002;172.16.0.151:7000;172.16.0.151:7001;172.16.0.151:7002 #源端集群master節(jié)點(diǎn) target.address = 172.16.0.89:7000; 172.16.0.89:7001;172.16.0.89:7002;172.16.0.90:7000;172.16.0.90:7001;172.16.0.90:7002 #目標(biāo)集群master節(jié)點(diǎn) target.rdb.output = local_dump key_exists = rewrite
在線遷移(實(shí)時(shí)同步數(shù)據(jù))
1、使用如下命令同步源Redis集群和目標(biāo)Redis集群數(shù)據(jù):
./redis-shake -type sync -conf redis-shake.conf tail -1000f /var/log/redis-shake.log
2、執(zhí)行日志中出現(xiàn)如下信息,代表全量數(shù)據(jù)同步完成,進(jìn)入增量同步階段:
sync rdb done.
3、執(zhí)行日志出現(xiàn)如下信息時(shí),代表增量同步無(wú)新增內(nèi)容:
sync: +forwardCommands=0 +filterCommands=0 +writeBytes=0
4、如果確定已經(jīng)全部同步完成,且后續(xù)不會(huì)有新的業(yè)務(wù)數(shù)據(jù)進(jìn)來,可手動(dòng)停止同步(Ctrl + C)
redis-shake在線遷移示意圖:
離線遷移(備份文件導(dǎo)入)
1、使用以下命令從源集群中導(dǎo)出RDB文件:
./redis-shake.linux -type dump -conf redis-shake.conf
執(zhí)行日志中出現(xiàn)如下信息時(shí)導(dǎo)出備份文件完成:
導(dǎo)出的文件存儲(chǔ)在RedisShake根目錄下:
2、使用以下命令把RDB文件導(dǎo)入到目標(biāo)集群
編輯RedisShake配置文件:
source.rdb.input = local_dump.0;local_dump.1;local_dump.2;local_dump.3;local_dump.4;local_dump.5 #將需要導(dǎo)入的文件配置到source.rdb.input中
3、執(zhí)行導(dǎo)入命令:
./redis-shake.linux -type restore -conf redis-shake.conf
執(zhí)行日志中出現(xiàn)如下信息時(shí)導(dǎo)入文件完成:
遷移后驗(yàn)證
數(shù)據(jù)同步結(jié)束后,可使用redis-cli工具連接Redis Cluster集群,通過info命令查看Keyspace中的Key數(shù)量,確認(rèn)數(shù)據(jù)是否完整導(dǎo)入。
1、檢查對(duì)比源端集群和目標(biāo)集群中的每一個(gè)master節(jié)點(diǎn)的keys數(shù)量是否一致。
2、檢查目標(biāo)集群中的slave節(jié)點(diǎn)的keys數(shù)量是否跟master節(jié)點(diǎn)的一致。
3、如果數(shù)據(jù)不完整,可使用flushall或者flushdb命令清理實(shí)例中的緩存數(shù)據(jù)后重新同步。
參考:
https://www.cnblogs.com/xingxia/p/redis_versions.html
https://juejin.cn/post/6844903506801868807
https://blog.csdn.net/jiahao1186/article/details/81038868
https://developer.aliyun.com/article/691794
https://github.com/alibaba/RedisShake/wiki/%E7%AC%AC%E4%B8%80%E6%AC%A1%E4%BD%BF%E7%94%A8%EF%BC%8C%E5%A6%82%E4%BD%95%E8%BF%9B%E8%A1%8C%E9%85%8D%E7%BD%AE%EF%BC%9F
總結(jié)
以上是生活随笔為你收集整理的Redis——版本升级&数据迁移的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LFI_labs学习笔记
- 下一篇: Oracle 11g Java驱动包oj