集羣中至少有3個節點(便於投票),每個節點都有一個備份節點(便於容錯機制),需要6臺服務器,搭建僞分佈式,需要6個redis的實例(redis的兩種持久化的過程RDB和AOF,兩個可以同時用,恢復的時候用AOF)
槽的分配,因爲有3個節點(總共有16384槽位)
1號節點:分配的槽位0-5461(16384/3=5461)
2號節點:分配的槽位5462--1094
3號節點:分配的槽位1094--16383
搭建集羣的步驟:
- 準備gcc環境(redis在linux環境下,是以源碼的形式)
- 上傳redis源碼
- 創建/usr/local/redis-cluster目錄,然後安裝6個redis實例,分別安裝的目錄結構如下:
/usr/local/redis-cluster/redis-1
/usr/local/redis-cluster/redis-2
/usr/local/redis-cluster/redis-3
/usr/local/redis-cluster/redis-4
/usr/local/redis-cluster/redis-5
/usr/local/redis-cluster/redis-6
4.拷貝redis.config分別到/usr/local/redis-cluster/redis-*/bin目錄下
5.到redis.config的配置文件中修改兩處:
1.修改端口分別是7001...7006
2.Cluster-enable yes前面的註釋取消(允許開啓集羣)
6.啓動每個實例
7.利用ruby腳本將所有的實例關聯起來(創建集羣)只需要運行命令即可
./redis-trib.rb create --replicas 1 192.168.25.153:7001 192.168.25.153:7002 192.168.25.153:7003 192.168.25.153:7004 192.168.25.153:7005 192.168.25.153:7006 |
顯示結果
解析: creating cluster 下面的6行,表示連接到對應的節點(ip+端口號)
Using 3master:下面三行,表示3個主節點,分別如下
下面的三行表示從節點以及對應的主節點
8.使用客戶端連接集羣
使用客戶端連接集羣: redis01/redis-cli -h 192.168.25.148 -p 7001 -c
其中-c代表連接集羣(以下表示連接成功)
9.問題
問題1:集羣情況下連接7001,分配的槽位5798(對應7002節點的槽範圍內)
單機連接7001,找不到數據
單機連接7002,找到數據
原因是數據分配在7002節點所在的槽中,而7001沒有
插入信息的總結
集羣中添加數據
例如:set abc 123時候
- 接受添加命令
- 通過key(abc),計算插槽值,找到對應的節點
- 重定向到該節點執行命令
集羣中新增新節點
問題導入:新增節點時,插槽的分配會變化
- 新增的節點,不會出現相應額插槽值
- 分配插槽值 (需要命令)
- 重新分配
- 每個舊的節點給新的節點分配100(自己寫入)個