實現目標
在一臺主機上,搭建一個3主3從的高可用Redis服務器集羣。
Redis6.0.4安裝
準備工作
1.在redis安裝目錄,創建6個文件夾:
mkdir 9000 9001 9002 9003 9004 9005
2.將redis安裝目錄redis.conf文件分別拷貝到6個文件夾中,並命名爲:
redis-cluster.conf
[root@localhost redis-6.0.4]# cp redis.conf 9000/redis-cluster.conf
[root@localhost redis-6.0.4]# cp redis.conf 9001/redis-cluster.conf
[root@localhost redis-6.0.4]# cp redis.conf 9002/redis-cluster.conf
[root@localhost redis-6.0.4]# cp redis.conf 9003/redis-cluster.conf
[root@localhost redis-6.0.4]# cp redis.conf 9004/redis-cluster.conf
[root@localhost redis-6.0.4]# cp redis.conf 9005/redis-cluster.conf
3.將9000-9005 的6個文件夾中redis-cluster.conf文件按照以下的方式進行配置。
第92行的端口號改成所在文件夾的名稱,比如以9000爲例:
4.將206的守護進程開啓:
5.關閉保護模式:(如果開啓,需要設置密碼,比較繁瑣。如有需要可以按照自己的需求配置)
6.1172行,將集羣開啓:
7.將1180行的註釋打開,按照如下格式進行配置:nodes-當前節點的端口號.conf
8.創建啓動腳本:start-cluster.sh
#以集羣方式啓動9000到9005的Redis服務
for port in {9000..9005}
do
#關閉已經啓動的服務,刪除臨時文件
redis-cli -c -p $port -h 192.168.43.88 shutdown
rm -f $port/dump*
rm -f $port/nodes*
done;
#start redis
for port in {9000..9005}
do redis-server $port/redis-cluster.conf
done;
#create cluster
echo yes|src/redis-cli --cluster create 192.168.43.88:9000 192.168.43.88:9001 192.168.43.88:9002 192.168.43.88:9003 192.168.43.88:9004 192.168.43.88:9005 --cluster-replicas 1
需要將其中的IP修改爲你服務器對應的IP:
ps:需要注意的是,老版本的redis創建服務節點需要使用redis-trib.rb創建,但是新版本的redis則直接用redis-cli 就可以了。
其它參數解釋:
–cluster-replicas 1:表示希望爲集羣中的每個主節點創建一個從節點(一主一從)。
–cluster-replicas 2:表示希望爲集羣中的每個主節點創建兩個從節點(一主二從)。
也就是說,當前的腳本,將啓動3主3從的節點。
9.創建停止腳本:stop-cluster.sh
for port in {9000..9005}
do
redis-cli -c -p $port shutdown
done;
驗證
執行 sh start-cluster.sh
可以看到,3主3從的集羣配置成功。
M:代表主節點,並且自動分配了槽道號。
S:代表從節點,沒有槽道號。
測試一下
登錄其中一個節點:設置 zhaoliwen鍵的值爲ok:
通過對zhaoliwen鍵的hash取模計算,得到其槽道號爲6716,歸屬端口爲9003的節點管理,並自動切換到了端口爲9003的節點:
獲取鍵值:
ok,redis集羣到此搭建成功。剩下的就可以通過java客戶端調取使用了。
錯誤解決
[ERR] Node 192.168.43.88:9000 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
如果遇到這樣的錯誤,不要慌。
1.刪除dump.rdb文件。
2.刪除自動生成的在redis.conf裏面cluster-config-file配置的的文件: