Centos7 Redis5.0.5 三主三從Cluster集羣安裝和集羣遇到的錯誤解決

Centos7 Redis5.0.5 三主三從集羣安裝和環境配置以及錯誤解決

一.準備

1.下載Redis

可選擇從官網下載 地址:http://download.redis.io/releases/redis-5.0.5.tar.gz

或虛擬機中下載

cd /usr/local/
wget http://download.redis.io/releases/redis-5.0.5.tar.gz

2.編譯安裝Redis

(如果你想安裝redis以及集羣在/usl/local下邊 以下命令可傻瓜式全盤COPY我的)

安裝gcc編譯器

yum -y install gcc

解壓 並編譯安裝

tar -zxvf /usr/local/redis-5.0.5.tar.gz -C /usr/local
cd /usr/local/redis-5.0.5
#安裝在當前目錄
make && make install

二. 創建節點

1.在/usr/local下創建了一個redis-cluster文件夾(此文件夾用來存儲redis集羣配置文件)

mkdir /usr/local/redis-cluster
cd /usr/local/redis-cluster
mkdir 7000 7001 7002 7003 7004 7005

2.拷貝redis配置文件到7000中

cp /usr/local/redis-5.0.5/redis.conf /usr/local/redis-cluster/7000

3.修改配置文件

以下僅僅列出修改的地方 (當前爲7000配置文件redis.conf)

bind 0.0.0.0       //開啓網絡,保證外部可連接

protected-mode no  //關閉保護模式

port 7000         //每個節點的端口號

daemonize yes     //守護線程 ,後臺運行redis

pidfile /usr/local/redis-cluster/7000/redis-7000.pid

appendonly yes    //aof日誌每一個操作都記錄模式

dbfilename dump-7000.rdb  rdb存儲的位置

requirepass Redis123 //設置redis訪問密碼爲Redis123

masterauth Redis123 //設置集羣節點間訪問密碼,跟上面一致

cluster-enabled yes//開啓集羣模式

cluster-config-file nodes-7000.conf  //集羣節點的配置

cluster-node-timeout 15000 //節點請求超時時間

複製7000下改好的配置文件到其他節點文件夾下

cp /usr/local/redis-cluster/7000/redis.conf /usr/local/redis-cluster/7001
cp /usr/local/redis-cluster/7000/redis.conf /usr/local/redis-cluster/7002
cp /usr/local/redis-cluster/7000/redis.conf /usr/local/redis-cluster/7003
cp /usr/local/redis-cluster/7000/redis.conf /usr/local/redis-cluster/7004
cp /usr/local/redis-cluster/7000/redis.conf /usr/local/redis-cluster/7005

修改配置文件中7000 端就爲自己節點端口

exmple:修改7001 (將7000替換爲7001即可)

bind 0.0.0.0       //開啓網絡,保證外部可連接

protected-mode no  //關閉保護模式

port 7001         //每個節點的端口號

daemonize yes     //守護線程 ,後臺運行redis

pidfile /usr/local/redis-cluster/7001/redis-7001.pid

dbfilename dump-7001.rdb  rdb存儲的位置

requirepass Redis123 //設置redis訪問密碼爲Redis123

masterauth Redis123 //設置集羣節點間訪問密碼,跟上面一致

appendonly yes    //aof日誌每一個操作都記錄模式

cluster-enabled yes//開啓集羣模式

cluster-config-file nodes-7001.conf  //集羣節點的配置

cluster-node-timeout 15000 //節點請求超時時間

三.啓動各個節點 7000 -7005

cd /usr/local/redis-5.0.5/src

redis-server /usr/local/redis-cluster/7000/redis.conf
redis-server /usr/local/redis-cluster/7001/redis.conf
redis-server /usr/local/redis-cluster/7002/redis.conf
redis-server /usr/local/redis-cluster/7003/redis.conf
redis-server /usr/local/redis-cluster/7004/redis.conf
redis-server /usr/local/redis-cluster/7005/redis.conf

後期可寫爲腳本 一鍵啓動

驗證啓動是否成功

ps -ef | grep redis

查看redis版本:

#查看redis-server的版本
redis-server --version
#查看redis-cli的版本
redis-cli --version

開啓防火牆

如果沒有安裝Firewall命令:

yum install firewalld firewalld-config

批量開啓防火牆端口

firewall-cmd --zone=public --add-port=7000-7005/udp --permanent
firewall-cmd --zone=public --add-port=7000-7005/tcp --permanent

開啓集羣總線端口 (節點端口+10000)

firewall-cmd --zone=public --add-port=17000-17005/udp --permanent
firewall-cmd --zone=public --add-port=17000-17005/tcp --permanent

重啓防火牆

firewall-cmd --reload

如果是雲服務器上搭建 還需要在安全組中加入 7000-7005 17000-17005 端口

四.創建集羣

注意copy我的命令記得更換Ip 192.168.10.122 換爲自己的IP

集羣配置密碼時創建方式

#創建集羣,--cluster-replicas 1指定從庫數量1
cd /usr/local/redis-5.0.5/src

redis-cli -a Redis123 --cluster create 192.168.10.122:7000 192.168.10.122:7001 192.168.10.122:7002 192.168.10.122:7003 192.168.10.122:7004 192.168.10.122:7005 --cluster-replicas 1

集羣無密碼時創建方式

#創建集羣,--cluster-replicas 1指定從庫數量1
cd /usr/local/redis-5.0.5/src

redis-cli --cluster create 192.168.10.122:7000 192.168.10.122:7001 192.168.10.122:7002 192.168.10.122:7003 192.168.10.122:7004 192.168.10.122:7005 --cluster-replicas 1

輸入指令後會不斷打印指令信息

注意出現下方提示時 請輸入yes yes yes (重要的事情說三遍)不是y 不然後續會出現不可名狀的問題。。。

Can I set the above configuration? (type ‘yes’ to accept): yes

出現以下指令則說明集羣創建成功

[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

五.驗證集羣

1.隨意連接一個客戶端

# -a訪問服務端密碼,-c表示集羣模式,指定ip地址和端口號  連接時有機率從定向到其他節點如7001 7002等
/usr/local/redis-5.0.5/src/redis-cli -a 密碼 -c -h 192.168.10.122 -p 7000
[root@localhost src]# redis-cli -a Redis123 -c -h 192.168.10.122 -p 7000
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.10.122:7000> 

2.查看集羣狀態以及節點

狀態

192.168.10.122:7000> CLUSTER INFO
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:13878
cluster_stats_messages_pong_sent:13619
cluster_stats_messages_publish_sent:5250
cluster_stats_messages_sent:32747
cluster_stats_messages_ping_received:13614
cluster_stats_messages_pong_received:13878
cluster_stats_messages_meet_received:5
cluster_stats_messages_publish_received:5201
cluster_stats_messages_received:32698

節點

192.168.10.122:7000> CLUSTER NODES
a92fb34ddb0c8022e35dad3c491c8cd66b5d94cc 192.168.10.122:7001@17001 master - 0 1579237949546 2 connected 5461-10922
352c4ce0a248ef8776df33f9c38df15e92e58e5d 192.168.10.122:7005@17005 slave a92fb34ddb0c8022e35dad3c491c8cd66b5d94cc 0 1579237949746 6 connected
97badb2a5a4a1a29c91ecf13545bf03c5f4520d8 192.168.10.122:7000@17000 myself,master - 0 1579237949000 1 connected 0-5460
c8db2eb6b26a84285862c967a2230afedb3e05a5 192.168.10.122:7003@17003 slave 1dda00207ada3eb5ae1d85f28936b6c3c72eac87 0 1579237948000 4 connected
bd14a487b4f7132755b51a993dad43b97de4f7e8 192.168.10.122:7004@17004 slave 97badb2a5a4a1a29c91ecf13545bf03c5f4520d8 0 1579237948741 5 connected
1dda00207ada3eb5ae1d85f28936b6c3c72eac87 192.168.10.122:7002@17002 master - 0 1579237948000 3 connected 10923-16383
192.168.10.122:7000>

可以看到 7000 7001 7002 爲主 7003 7004 7005 爲從

3.進行數據驗證

存取數據 節點切換

192.168.10.122:7000> set lei 123
-> Redirected to slot [10074] located at 192.168.10.122:7001
OK
192.168.10.122:7001> get lei
"123"
192.168.10.122:7001>

至此 redis5.0.5三主 三從集羣搭建完成

六.優雅的關閉集羣

關閉集羣則需要逐個進行關閉,使用命令: 一個一個執行 (後續可以寫一個shell腳本 一鍵關閉)

/usr/local/redis-5.0.5/src/redis-cli -a 密碼 -c -h 192.168.10.122 -p 7000 shutdown
/usr/local/redis-5.0.5/src/redis-cli -a 密碼 -c -h 192.168.10.122 -p 7001 shutdown
/usr/local/redis-5.0.5/src/redis-cli -a 密碼 -c -h 192.168.10.122 -p 7002 shutdown
/usr/local/redis-5.0.5/src/redis-cli -a 密碼 -c -h 192.168.10.122 -p 7003 shutdown
/usr/local/redis-5.0.5/src/redis-cli -a 密碼 -c -h 192.168.10.122 -p 7004 shutdown
/usr/local/redis-5.0.5/src/redis-cli -a 密碼 -c -h 192.168.10.122 -p 7005 shutdown

輸入上述指定會提示輸入a 指令不安全 沒影響 繼續關閉其他節點即可

再次從啓redis 集羣

只需要一個一個開啓節點即可 因爲創建了cluster集羣 啓動節點 集羣自然就啓動了 (啓動節點也可以寫一個腳本)

cd /usr/local/redis-5.0.5/src

redis-server /usr/local/redis-cluster/7000/redis.conf
redis-server /usr/local/redis-cluster/7001/redis.conf
redis-server /usr/local/redis-cluster/7002/redis.conf
redis-server /usr/local/redis-cluster/7003/redis.conf
redis-server /usr/local/redis-cluster/7004/redis.conf
redis-server /usr/local/redis-cluster/7005/redis.conf

七.個人目前遇到的集羣問題以及解決方案

先刪除節點的rdb nodes.conf 以及aof 三種文件 記得數據做好備份

錯誤 :Cannot determine a partition to read for slot

首先鏈接集羣嘗試(節點檢測):

./redis-cli --cluster check 192.168.10.122:7000 -a Redis123

結果

Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing Cluster Check (using node 192.168.10.122:7000)
M: 87d66a4ca81b7abfd81b78bbfd2521691f9fbe09 1192.168.10.122:7000
   slots: (0 slots) master
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[ERR] Not all 16384 slots are covered by nodes.

解決

使用命令進行修復 (每個節點) 節點修復

./redis-cli --cluster fix 192.168.10.122:7000 -a Redis123

中途會出現彈框

Fix these slots by covering with a random node? (type 'yes' to accept):

輸入yes 注意是yes yes yes 不是y

解決!!

錯誤:CLUSTER is down

集羣掛掉了

本人解決步驟:

1.使用上方 錯誤一方式 檢測 修復節點

2.首先查看redis 是否啓動

ps -aux|grep redis

如未啓動則運行命令啓動redis各個節點

如redis已啓動但仍是redis cluster is down 則運行命令先關閉redis集羣,這時候我們可以根據現有節點重新創建集羣從而使集羣恢復工作。
步驟如下:

(1)
做好備份 ,會清空redis數據
備份命令
首先則是登錄到各個節點 ,然後執行save 命令
在這裏插入圖片描述
其中 xxx.aof以及 rdb結尾的文件則爲我們redis儲存的數據
(2)
刪除/usr/local/redis/src (即src安裝目錄)下的 appendonly.aof dump,rdb 以及各個節點的rdb nodes (dump-7000.rdb nodes-7000.conf )

刪除集羣相關文件 命令

rm nodes-7000.conf nodes-7001.conf nodes-7002.conf nodes-7003.conf nodes-7004.conf nodes-7005.conf -rf
rm dump-7000.rdb dump-7001.rdb dump-7002.rdb dump-7003.rdb dump-7004.rdb dump-7005.rdb -rf
rm appendonly.aof -rf

(3)
從新啓動各個節點 7000-7005
(4)
從新創建集羣

#創建集羣,--cluster-replicas 1指定從庫數量1
cd /usr/local/redis-5.0.5/src

redis-cli -a Redis123 --cluster create 192.168.10.122:7000 192.168.10.122:7001 192.168.10.122:7002 192.168.10.122:7003 192.168.10.122:7004 192.168.10.122:7005 --cluster-replicas 1

根據提示 輸入 yes 即可創建集羣了
當然 ,創建完成後 ,還是可以登錄一個節點 查看cluster 信息 以及查看自己存儲的文件等

(5) redis -cluster 數據恢復
確認集羣功能正常後 ,然後關閉集羣的各個節點 並在次執行刪除命令 刪除相關文件

rm dump-7000.rdb dump-7001.rdb dump-7002.rdb dump-7003.rdb dump-7004.rdb dump-7005.rdb -rf
rm appendonly.aof -rf

將之前的備份的文件 還原到 安裝目錄 我的即在 /usr/local/redis-5.0.5/src 下 ,從新啓動集羣各個節點
此時 Redis-cluster 集羣down掉的問題便修復了

錯誤:Waiting for the cluster to join

>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
......

出現此錯誤 原因以及解決

1.每個節點下的redis.config bind 端口沒改爲0.0.0.0

2.防火牆或者安全組未開放redis集羣總線端口(redis 各個節點端口+10000) 例如我的17000-17005

測試集羣!!!

附上我的SpringBoot整合Redis Cluster 連接
SpringBoot整合Redis Cluster 集羣 以及Redis存儲結構 String Hash Set List 的使用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章