redis叢集同步遷移方法(一):通過redis replication實現

來源:互聯網
上載者:User

標籤:ast   ilo   lov   單一實例   機制   str   環境   color   disco   

       講到redis的遷移,一般會使用rdb或者aof在主庫做自動重載到目標庫方法。但該方法有個問題就是無法保證源節點資料和目標節點資料保持一致,一般線上環境也不允許源庫停機,所以要在遷移過程後還要實現同步達到資料的一致性。公司線上環境使用的是redis自己的cluster,每個節點都擁有多個rdb和aof檔案,使用原始方法無疑是難上加難。本文主要討論兩種方法來實現不停機源庫前提下,實現源庫(redis cluster)到目標庫(cluster或者單一實例)的遷移:
  • 採用redis replication實現
  • 使用開源同步開源工具
方法一:通過redis複製機制,將目標節點作為源節點的從節點,然後關閉源節點,進行主從自動fail over,最後再關閉並刪除源節點執行個體 1.運行環境:源節點執行個體:127.0.0.1:12000/127.0.0.1:12001/127.0.0.1:12002[[email protected]_86_30_37_10.86.30.37 mycluster_export1]# redis-cli -p 12000 cluster nodese5ce695f7c5745ca81b4239fb5666b6a71fbb4ea 127.0.0.1:12000 myself,master - 0 0 1 connected 0-5000f63f0d52372ad8b5c414c47e9318717b6aa113cc 127.0.0.1:12001 master - 0 1463025774035 2 connected 5001-10000fdeb68f696290a91f08a5da3b8a3c585aaa35856 127.0.0.1:12002 master - 0 1463025775037 0 connected 10001-16383遷移目標節點執行個體:127.0.0.1:13000/127.0.0.1:13001/127.0.0.1:13002 2.遷移過程
  • 啟動三個目標節點,配置了redis叢集模式的執行個體
redis-server redis13000.conf redis-server redis13001.conf redis-server redis13002.conf
  • 將這三個節點做已有叢集執行個體的slave
redis-cli -p 13000 cluster meet 127.0.0.1 12000                                         redis-cli -p 13000 cluster replicate e5ce695f7c5745ca81b4239fb5666b6a71fbb4earedis-cli -p 13001 cluster meet 127.0.0.1 12001redis-cli -p 13001 cluster replicate f63f0d52372ad8b5c414c47e9318717b6aa113ccredis-cli -p 13002 cluster meet 127.0.0.1 12002redis-cli -p 13002 cluster replicate fdeb68f696290a91f08a5da3b8a3c585aaa35856
  • 查看叢集情況:
redis-cli -p 13002 cluster slots1) 1) (integer) 5001   2) (integer) 10000   3) 1) "127.0.0.1"      2) (integer) 12001   4) 1) "127.0.0.1"      2) (integer) 130012) 1) (integer) 10001   2) (integer) 16383   3) 1) "127.0.0.1"      2) (integer) 12002   4) 1) "127.0.0.1"      2) (integer) 130023) 1) (integer) 0   2) (integer) 5000   3) 1) "127.0.0.1"      2) (integer) 12000   4) 1) "127.0.0.1"      2) (integer) 13000
  • 將其中一個主節點下線,10s後觀察情況:
redis-cli -p 12000 shutdownredis-cli -p 13000 cluster nodesfdeb68f696290a91f08a5da3b8a3c585aaa35856 127.0.0.1:12002 master - 0 1463042318423 0 connected 10001-16383f63f0d52372ad8b5c414c47e9318717b6aa113cc 127.0.0.1:12001 master - 0 1463042319426 2 connected 5001-10000e39a73c30dfff3139242e66f8e0a41178b39e280 127.0.0.1:13000 myself,master - 0 0 6 connected 0-50001f552bdea453caeaa64b4b33a05e4eedeb3f3dd2 127.0.0.1:13001 slave f63f0d52372ad8b5c414c47e9318717b6aa113cc 0 1463042317421 4 connected6a70a82c6f07dc4e61a97b6aee7a2994365642cc 127.0.0.1:13002 slave fdeb68f696290a91f08a5da3b8a3c585aaa35856 0 1463042320429 5 connectede5ce695f7c5745ca81b4239fb5666b6a71fbb4ea 127.0.0.1:12000 master,fail - 1463042217663 1463042214056 1 disconnected
  • 刪除已經下線的主節點,一個一個操作,操作中間檢查操作是否成功,因為留言協議和failover需要一段時間
redis-cli -p 13000 cluster forget e5ce695f7c5745ca81b4239fb5666b6a71fbb4earedis-cli -p 13001 cluster forget e5ce695f7c5745ca81b4239fb5666b6a71fbb4earedis-cli -p 13002 cluster forget e5ce695f7c5745ca81b4239fb5666b6a71fbb4earedis-cli -p 13000 cluster nodesfdeb68f696290a91f08a5da3b8a3c585aaa35856 127.0.0.1:12002 master - 0 1463043284365 0 connected 10001-16383f63f0d52372ad8b5c414c47e9318717b6aa113cc 127.0.0.1:12001 master - 0 1463043283364 2 connected 5001-10000e39a73c30dfff3139242e66f8e0a41178b39e280 127.0.0.1:13000 myself,master - 0 0 6 connected 0-50001f552bdea453caeaa64b4b33a05e4eedeb3f3dd2 127.0.0.1:13001 slave f63f0d52372ad8b5c414c47e9318717b6aa113cc 0 1463043286369 4 connected6a70a82c6f07dc4e61a97b6aee7a2994365642cc 127.0.0.1:13002 slave fdeb68f696290a91f08a5da3b8a3c585aaa35856 0 1463043285368 5 connected redis-cli -p 13000 cluster nodes                                         e39a73c30dfff3139242e66f8e0a41178b39e280 127.0.0.1:13000 myself,master - 0 0 6 connected 0-50001f552bdea453caeaa64b4b33a05e4eedeb3f3dd2 127.0.0.1:13001 slave - 0 1463043457854 4 connected6a70a82c6f07dc4e61a97b6aee7a2994365642cc 127.0.0.1:13002 slave - 0 1463043458857 5 connected
3.重點細節:
  • 刪除的主節點,如果重新啟動,他自身會重新載入叢集設定檔,造成叢集混亂,建議如果想重啟該執行個體,刪掉叢集設定檔,進行重新設定。
  • 必須先關閉master節點後,再刪除。一次不能將所有執行個體都關閉,逐個操作,否則會造成整個叢集down掉
  • 刪除forget節點時,要在所有其他節點上執行cluster forget 命令,貌似這個命令不會通過留言協議傳播到所有節點

redis叢集同步遷移方法(一):通過redis replication實現

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.