條件
l 基於redis5.0.*版本進行集群的搭建
l 集群要求至少六個節點,即每個主節點配置1個從節點,本集群是使用了3個主節點並每個下面掛一個從節點,三個主節點分布在3台服務器上
l 集群配置信息如下:
服務器 |
Master |
Slave |
172.16.114.52 |
7001 |
7002 |
172.16.239.95 |
7003 |
7004 |
172.16.239.89 |
7005 |
7006 |
集群配置
在第一台服務器(172.16.114.52)上操作
1. 下載redis源碼包並解壓
wget -c http://download.redis.io/releases/redis-5.0.7.tar.gz tar -zxvf redis-5.0.7.tar.gz
2. 新建集群配置目錄
mkdir -p /usr/local/redis-cluster/7001 /usr/local/redis-cluster/7002
3. 將解壓后的文件中的redis.conf配置文件拷貝到集群目錄之下 並執行redis安裝命令
cd redis-5.0.7 cp redis.conf /usr/local/redis-cluster make install PREFIX=/usr/local/redis2 # 注意 這里PREFIX一定是大寫
4. 進入/usr/local/redis2,復制bin文件到7001,7002目錄下
cd /usr/local/redis2 cp -r bin /usr/local/redis-cluster/7001 cp -r bin /usr/local/redis-cluster/7002
5. 進入redis-cluster目錄,修改redis.conf並分別拷貝到7001,7002
修改配置文件內容如下:
1) 屏蔽限制本地訪問, 將bind 127.0.0.1 修改為 bind 0.0.0.0
2) protected-mode保護模式從yes改為no
3) daemonize后的no改為yes
4) 去掉cluster-enabled yes 前面的注釋
5) 去掉cluster-node-timeout 前面的注釋
6) port后的端口改為7001, 將redis.conf文件,復制到對應的目錄下.
cp redis.conf 7001
7) 再次編輯redis.conf 將port參數修改 7001 ==> 7002,復制到對應目錄下.
sed -i 's/7001/7002/g' redis.conf cp redis.conf 7002
8)修改pidfile參數
pidfile /var/run/redis_7001.pid
9)修改node
cluster-config-file nodes-7001.conf # 修改為對應的節點ID
6. 啟動redis服務
/usr/local/redis-cluster/7001/bin/redis-server /usr/local/redis-cluster/7001/redis.conf /usr/local/redis-cluster/7002/bin/redis-server /usr/local/redis-cluster/7002/redis.conf
注意點: 在啟動服務之前要修改配置文件中對應的dump dir目錄,否則默認目錄是 ./ 需要改成對應的絕對路徑,否則會造成路徑沖突,導致啟動失敗
查看啟動的服務:
7. 在另外兩台機器上重復以上的操作,需要注意的是,需要設置對應的端口與目錄
效果:
第一台(172.16.114.52)
第二台(172.16.239.95):
第三台(172.16.239.89):
集群搭建
使用Redis客戶端執行命令:
/usr/local/redis-cluster/7001/bin/redis-cli --cluster create --cluster-replicas 1 172.16.114.52:7001 172.16.114.52:7002 172.16.239.95:7003 172.16.239.95:7004 172.16.239.89:7005 172.16.239.89:7006
參數說明:
--cluster 集群管理命令 后面可以執行集群相關的命令
--cluster-replicas 1 代表每個Master攜帶一個Slave
create 創建集群命令
至此已經配置成功
客戶端測試
開啟客戶端 鏈接任意一個Master節點
/usr/local/redis2/bin/redis-cli -h 172.16.114.52 -c -a 密碼 -p 端口
參數:
-c: 連接到集群
我們可以看到,當我們set一個鍵值對的時候,Redis會自動為我們的key計算CRC16值,然后對16384取模,獲取key對應的hash slot,然后通過判斷該槽被那個Master所占用,幫我們重定向到那個Master節點,將鍵值對存入。
查看集群信息:
cluster nodes
常見問題:
- 出現節點的狀態為handshake並且無法使用cluster forget 刪除掉該節點,節點的唯一ID一直發生變化
解決: 這是因為集群所有的節點都持有該節點的信息,不停的再發起重新連接操作,需要在所有節點上(包括從節點)執行 cluster forget xxx操作, 才能徹底移除掉無效節點
- 集群中出現無用節點
例如:76e6fb6341fd43aaa1be5b2f8bb68a8c8a0572ae :0@0 slave,fail,noaddr - 1585662914903 1585662914903 6 disconnected
可以將其移除 cluster forget 76e6fb6341fd43aaa1be5b2f8bb68a8c8a0572ae