背景
目前redis集群最火的是codis和redis cluster(官方),但官方自帶工具並沒有支持密碼操作。那么需要密碼認證使用redis cluster集群的同學要仔細看了哦。
相信大家很多人已經使用了redis cluster,而且也肯定會用到核心應用,你是否考慮過如下問題?
-
redis cluster無密碼,被改數據
-
redis cluster無密碼,被flushall (你是否有要哭的沖動哈哈)
-
redis cluster無密碼,數據在光天化日(你對用戶不負責)
-
redis cluster無密碼,你要擔心各種被黑(日志好苦)
此時你是否需要密碼認證?(我猜你想立刻馬上),哈哈問題來了,你在創建集群和管理時是否遇到如下麻煩?
-
redis cluster 官方redis-trib.rb 不支持密碼,你要手工用命令一個一個加入集群
-
添加減節點不方便
-
更重要的是你的分片工具不能用,你要抓狂么?
-
管理需要手工
-
你要瘋掉
有沒有辦法解決呢?有,我相信很多公司已經會用認證方式來管理,只是目前我是沒搜到相關資料。怎么辦?
我有辦法!
-
原封不動的封裝了redis cluster 集群添加減節點功能,並支持密碼認證
-
針對對同台機器多master掛掉后集群不可用時,自動快速遷移槽位進行修復,保證程序可用
-
自動對新加節點遷移槽位
-
自動遷移槽位和數據給指定節點
-
自動根據當前結點master進行自動分片
你是不是已經心動了呢?那么接下來讓你更想行動!
Redis cluster 集群介紹
-
多個Redis間節點間共享數據的程序集
-
通過分區(partition)來提供一定程度的可用性
-
使用數據分片(sharding)而非一致性哈希(consistency hashing)來實現包含 16384 個哈希槽,也就是可以擴展16384實例
-
節點自動發現,從節點自動升級為主節點無需人工操作
-
slave->master 選舉,自動集群容錯
-
無中心化
-
gossip 協議來發布廣播消息,基於P2P協議,無代理
-
水平擴展
-
在Cluster推出之前,可用性要靠Sentinel保證。有了集群之后也自動具有了Sentinel的監控和自動Failover能力。
-
具體參考:官方文檔:http://www.redis.cn/topics/cluster-tutorial.html
-
官方使用自帶的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、查看集群狀態