轉載@https://www.cnblogs.com/cmxbky1314/p/11748426.html
1
.為了我們方便的搭建集群,我們需要建立一個目錄,里面放着六台服務器(一個集群至少六台服務器)。如下:
我們自己建立了一個叫 redis-cluster 的目錄(圖中藍色框),在這個目錄中又建立了六個子目錄,用來存放Redis服務器。
2.然后cd到我們原有的redis服務目錄下,進行集群的配置修改
① cluster-enabled yes 開啟集群的支持
② cluster-config-file nodes.conf 記錄每個節點的信息,保存到文件nodes.conf文件中
③ bind 0.0.0.0 開放ip訪問權限
3.然后在我們已經搭建好的Redis服務目錄下,將已經設置好的 redis.conf 分別復制到我們建立好的六個目錄下。如下:
注:redis_conf 是我的redis服務的守護進程啟動配置目錄,里面放着啟動進程的redis.conf配置文件,后面的我們上面的建立的目錄的相對路徑。
4.在復制好六個服務器之后,再去修改每個服務的配置文件中的端口號 ,這里我們分配了8001 --8006 端口 分別給這個六個服務器。如下,
注:然后依次去修改其余的五個,保證服務的端口各不相同即可。
5. 接着,以各自的配置啟動redis服務
1 redis-server 8001/redis.conf 2 redis-server 8002/redis.conf 3 redis-server 8003/redis.conf 4 redis-server 8004/redis.conf 5 redis-server 8005/redis.conf 6 redis-server 8006/redis.conf
開啟后的效果圖,如下
6.創建Redis集群
語法:
redis-cli --cluster create 192.168.142.131:9001 192.168.142.131:9002 192.168.142.131:9003 192.168.142.131:9004 192.168.142.131:9005 192.168.142.131:9006 --cluster-replicas 1
解釋: redis 客戶端 集群 創建 。。。上面創建六個redis服務器的端口。。。 集群 一比一主從配置
然后我們輸入 yes ,Redis 就會創建好集群,結果如下。
7.集群說明
--cluster-replicas 1 表示主從復制比例為 1:1,即一個主節點對應一個從節點;然后,默認給我們分配好了每個主節點和對應從節點服務器,以及 slot 的大小,
因為在 Redis 集群中有且僅有 16384 個 slot ,默認情況會給我們平均分配,當然你可以指定,后續的增減節點也可以重新分配。
查看集群信息:192.168.134.124:7003> cluster info(查看集群信息)或cluster nodes(查看節點列表)
集群搭建完畢,6個節點,3主,3從,只有主節點才擁有槽,並對外提供讀寫數據服務。注意至少有3個主節點才可以搭建集群,為每個主至少分配1個從,所以至少需要6個redis節點才可以形成集群。
8.槽
- redis cluster 默認分配了 16384 個slot,所有的主redis服務器,大概均分所有的槽
- 存/取值時 ,redis會根據key,計算一個介於 0 – 16383之間的數字,此數字即為當前數據的槽位置,通過槽位置,決定哪個redis主服務器來負責本次訪問
Redis 集群會把數據存在一個master節點,然后在這個master和其對應的slave之間進行數據同步。當讀取數據時,也根據一致性哈希算法到對應的master節點獲取數據。
只有當一個master 掛掉之后,才會啟動一個對應的slave節點,充當master。
需要注意的是:必須要3個或以上的主節點,否則在創建集群時會失敗,並且當存活的主節點數小於總節點數的一半時,整個集群就無法提供服務了。
9.集群的特性或者優點
集群搭建后:
- 性能的進一步提升,可以在單位時間內,吞吐更多的請求
- 數據的存儲節點,具有高可用性(集群有好的容錯機制)
集群容錯:
- 所有槽可以被覆蓋時,則集群正常運行
- 如果16384個槽,不能被所有主機完整覆蓋了,則集群宕機
四、集群中節點的操作
1.刪除從節點
測試效果如下:
2.添加從節點
redis-cli --cluster add-node 192.168.134.124:7000 192.168.134.124:7001 --cluster-slave --cluster-master-id 4032891b648e76b2975e5bc701e9c8a52ad6f3dd
# 注意:加新節點之前 要清楚新節點中數據
# add-node: 后面的分別跟着新加入的slave和集群中任意一個節點
# cluster-slave:表示加入的是slave節點
# --cluster-master-id:表示slave對應的master的node ID
3.刪除主節點
需要先進行重新分片:
redis-cli --cluster reshard 192.168.142.131:9001 #后面的ip和端口 起到定位的作用
回車執行該語句
①系統會提出問題 要分出多少個槽 5461
②系統接着提出問題 將這些槽 分給誰 回答 一個主服務器的id
③系統再問 從哪里獲得這些槽 回答 一個主服務器的id
④接着執行done 和yes 開始重新分片
4.添加主節點
redis-cli --cluster add-node 192.168.134.124:7000 192.168.134.124:7006
#新增加的主節點 #一個已存在的節點 定位集群的作用
將7006添加到7001所在集群中,成為一個主節點,但此時它不持有任何槽,需要重新分片
具體操作圖 如下,
之后輸入done 即可執行分槽。
開始后,確認,系統問你要執行嗎
輸入yes
然后會執行一段時間的遷移過程