3、創建Redis集群
1> 安裝ruby環境
創建集群要用到ruby的一個腳本,在創建集群前,先安裝ruby的運行環境和ruby的redis客戶端。
shell> yum -y install ruby rubygems
shell> gem sources --add https://ruby.taobao.org/ --remove https://rubygems.org/ ?# 配置taobao的源
shell> gem install redis --version 3.2.0
2> 創建集群
shell> redis-trib.rb create --replicas 1 192.168.0.201:6379 192.168.0.201:6380 192.168.0.201:6381 192.168.0.202:16379 192.168.0.202:16380 192.168.0.202:16381
參數說明:
1> redis-trib.rb腳本默認安裝在$REDIS_SRC_HOME/src目錄下,在安裝redis服務時,已將其拷貝到/usr/bin目錄下
2> create:創建集群參數
3> –replicas 1:每個master有1個slave節點
根據節點順序確定master與slave節點,前邊的優先選擇做為master節點,后邊優先選擇做為slave節點。由腳本自動分配,但master和slave絕對不會分配在同一臺機器上。
3> 檢查Redis集群狀態
shell> redis-trib.rb check 192.168.0.201:6379
從上圖可以看出,192.168.0.201:6379、192.168.0.201:6380、192.168.0.201:6381被選為了master節點。192.168.0.202:16379被選為192.168.0.201:6381的slave節點,192.168.0.202:16380被選為192.168.0.201:6379的slave節點,192.168.0.202:16381被選為192.168.0.201:6380的slave節點。
到這兒Redis的集群就配置成功了!
4、驗證Redis集群
數據存儲測試
# 連接到201的6379節點
shell> redis-cli -c -h 192.168.0.201 -p 6379
192.168.0.201:6379> set foo abc
-> Redirected to slot [12182] located at 192.168.0.201:6380
OK
192.168.0.201:6380>
set foo abc本想在201的6379節點保存foo這個key,但201的6379節點并沒有存,而是將請求轉發給了201的6380節點存儲。而且客戶端自動切換到了6380節點。這是神馬情況?這其實是redis集群數據存儲的機制,通過crc16算法計算key的hash值,然后對16384取模,得到一個0~16384以內的slot值來決定由哪個節點存儲,而每一個節點在創建集群的時候,都會均勻的分配相應的slot數量。有關數據存儲的機制,請參考后面的文章。
自動選主測試
從上邊的集群狀態中得知,192.168.0.202:16381被選為192.168.0.201:6380的slave節點,現在把6380 master節點kill掉,看redis會不會將16381選主為master節點,并將剛剛保存的foo這個key有沒有復制到16381節點中。如下圖所示:
從上圖測試結果可以看出,當master節點掛掉之后,slave節點自動選舉成了master節點,并且之前保存在master節點的數據foo也成功復制給了slave節點。