安全穩定實現redis cluster自動化遷移


背景  

 

目前redis集群最火的是codis和redis cluster(官方),但官方自帶工具並沒有支持密碼操作。那么需要密碼認證使用redis cluster集群的同學要仔細看了哦。

 

相信大家很多人已經使用了redis cluster,而且也肯定會用到核心應用,你是否考慮過如下問題?

 

  1. redis cluster無密碼,被改數據

  2. redis cluster無密碼,被flushall (你是否有要哭的沖動哈哈)

  3. redis cluster無密碼,數據在光天化日(你對用戶不負責)

  4. redis cluster無密碼,你要擔心各種被黑(日志好苦)

 

 

此時你是否需要密碼認證?(我猜你想立刻馬上),哈哈問題來了,你在創建集群和管理時是否遇到如下麻煩?

 

  1. redis cluster 官方redis-trib.rb 不支持密碼,你要手工用命令一個一個加入集群

  2. 添加減節點不方便

  3. 更重要的是你的分片工具不能用,你要抓狂么?

  4. 管理需要手工

  5. 你要瘋掉

 

 

有沒有辦法解決呢?有,我相信很多公司已經會用認證方式來管理,只是目前我是沒搜到相關資料。怎么辦?

 

我有辦法!

 

  1. 原封不動的封裝了redis cluster 集群添加減節點功能,並支持密碼認證

  2. 針對對同台機器多master掛掉后集群不可用時,自動快速遷移槽位進行修復,保證程序可用

  3. 自動對新加節點遷移槽位

  4. 自動遷移槽位和數據給指定節點

  5. 自動根據當前結點master進行自動分片

 

 

你是不是已經心動了呢?那么接下來讓你更想行動!

 

Redis cluster 集群介紹  

 

  1. 多個Redis間節點間共享數據的程序集

  2. 通過分區(partition)來提供一定程度的可用性

  3. 使用數據分片(sharding)而非一致性哈希(consistency hashing)來實現包含 16384 個哈希槽,也就是可以擴展16384實例

  4. 節點自動發現,從節點自動升級為主節點無需人工操作

  5. slave->master 選舉,自動集群容錯

  6. 無中心化

  7. gossip 協議來發布廣播消息,基於P2P協議,無代理

  8. 水平擴展

  9. 在Cluster推出之前,可用性要靠Sentinel保證。有了集群之后也自動具有了Sentinel的監控和自動Failover能力。

  10. 具體參考:官方文檔:http://www.redis.cn/topics/cluster-tutorial.html

  11. 官方使用自帶的ruby工具(redis-trib.rb)不支持密碼

 

 

集群相關命令介紹

 

1、集群

 

\

 

2、節點

 

 

3、鍵

 

 

環境准備 

 

1、程序下載地址:

 

 

2、系統依賴環境:

 

 

命令使用方法:

 

 

 

機器環境准備  

 

安裝部署:

 

ip地址:

 

 

1、下載安裝redis在此不做介紹

 

 

2、兩台機器分別創建7000-7002端口並啟動redis

 

ip地址及端口如下:至於主從怎么安排自己定義(但在生產環境建議主從分開部署在不同機器)

 

主要文件配置

 

 

遷移工具對集群進行測試  

 

1、在218上啟動各個redis后 ,查看當前集群信息

 

 

2、利用初始化槽位slot,將所有槽位分給此節點

 

 

 

集群狀態

 

查看日志顯示如下:說明槽位已經ok,狀態正常

 

 

2.1 查看集群信息已經分配

 

再次顯示集群狀態:

 

 

2.2 在205 上啟動所有節點

 

執行如下命令,我是將不同端口使用不通配置文件,可自行安排

 

 

2.3  在218 上添加新節點

 

添加新節點

 

 

2.4 查看集群狀態

 

 

2.5 對新加的節點進行分配slot

 

2.5.1 自動分配slot給205:7000和218:7000 節點

 

#注:根據本機多個master 進行自動分配。

#對CLUSTER SETSLOT <slot> NODE <node_id> 此命令進行的循環封裝。會默認把0-16383個槽位均分到當前master節點

#分配方法:16383/當前master節點總數 然后進行節點循環設置槽位

 

 

#注意紅色ip部分,顯示對81槽位進行廣播,在205 和218 上都進行廣播,將81給node節點2404b44e4937c65c73cbccb778776e392619c776 ,節點是自行判斷無需指定

 

2.5.2 查看集群信息:

 

#發現已經平均分配

 

 

2.5.3 插入數據測試:

 

#先手動進行插入數據測試集群是否正常

#自動set數據測試腳本如下

#-c 參數為支持集群模式

 

 

3、手動遷移數據

 

3.1 先手動進行模擬測試:

 

#為了測試工具的可用性及對比,先進行手動測試,看是否遷移數據成功

 

顯示集群信息

 

 

3.2 將9842 槽位從172.16.10.218:7000節點導入172.16.10.205:7000節點

 

 

3.3 將9842 槽位從172.16.10.218:7000節點遷出172.16.10.205:7000節點

 

 

3.4 計算218 節點9842 槽位的key

 

 

3.5 列出key值

 

 

3.6 遷移key

 

 

 

3.7 獲取143511 key的值

 

 

3.8 再次獲取集群信息:

 

 

4、自動遷移

 

4.1 218:7000 遷移槽位及數據到 205:7000

 

#上面手動演示了數據遷移正常流程

#此時是封裝了上面手動數據遷移的命令,將8193-8999槽位 遷走

 

集群信息如下

 

 

 

4.2 在查看集群信息

 

 

4.3 隨機找個key值計算槽位:

 

 

4.4 get key值測試:

 

 

4.5 再到205:7000 節點讀取

 

 

4.6 設置密碼:

 

 

5、添加減節點測試

 

 

5.1 添加節點

 

 

5.2 添加從節點

 

將205每個端口都作為218對應端口的從(可根據自己進行定義)

#對cluster replicate命令的封裝

 

 

獲取集群信息

 

 

5.3 刪除從節點

 

 

5.4 修改從節點

 

 

5.5 提升slave為master

 

將218:7003端口從節點提升為master

 

獲取集群信息

 

 

獲取集群狀態

 

 

測試集群故障  

 

 

1、自動分片

 

2、關閉其中一個主

 

 

3、查看集群狀態

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM