Ubuntu服務器配置Redis集羣

配置前提

1.在ubuntu上安裝Redis(3.0及以上)

2.在你的服務器控制檯中打開7001~7006、17001-17006等12個端口。

前述

1.集羣中至少應該有奇數個節點,所以搭建集羣最少需要3臺主機。同時每個節點至少有一個備份節點,所以下面最少需要創建使用6臺機器,才能完成Redis Cluster集羣。

2.但由於我們這裏只是爲了實踐(主要是窮,只租了一臺服務器),所以通過創建6個不同的redis實例,並分配給6個不同的端口來實現redis集羣的配置。

3.Redis版本需要3.0以上的原因是因爲只有3.0及以上纔有redis cluster集羣。

4.配置前提中的12個端口一定要打開,負責無法通過外網訪問。

5.下面的安裝流程能上圖就上圖,不能的話我就直接敲命令行了。

安裝流程

1.在你的redis文件夾下創建一個redis_cluster文件夾(因爲我的redis在/etc/redis,所以我的步驟如下)

cd /etc/redis               #進入redis文件夾
mkdir redis_cluster         #創建redis_cluster目錄

成功之後,文件下出現redis_cluster文件夾
在這裏插入圖片描述
2.安裝成功後,以端口號爲命名,在redis_cluster文件夾下創建6個文件夾(我這裏爲7001、7002、…7006)

cd redis_cluster           #註釋--進入redis_cluster文件夾,在其文件夾下創建目錄
mkdir 7001                 #註釋--此爲示例,其它自己敲

成功之後,如下圖
在這裏插入圖片描述
3.使用cp命令將redis.conf文件分別複製到7001~7006這6個目錄下(我的這個文件就在redis目錄下,若你的並不在,可以通過locate redis.conf 命令來查找這個文件的位置)
在這裏插入圖片描述
4.修改7001~7006這6個文件夾下的redis.conf的文件信息,通過vim編輯器修改redis.conf文件的以下信息

#bind 127.0.0.1                #註釋掉bind或者改爲0.0.0.0,即可以通過遠程連接,那可通過外網連接
port  7001                     #修改爲對應的port號
pidfile  /var/run/redis/redis-7001.pid  #修改對應的進程號,也可不改
cluster-enabled yes     #開啓集羣,去掉註釋
cluster-config-file  nodes-7001.conf #修改爲對應的端口號名
cluster-node-timeout 15000 #去掉註釋,此爲節點通信時間
requirepass    123456      #設置集羣密碼
masterauth     123456      #設置集羣密碼,這裏設置密碼的話,就需要在client.rb文件中將密碼改成123456

5.因爲你設置了集羣密碼,所以需要找到client.rb文件,然後修改password,沒有設置的情況下,它是nil,你需要把它改成—“123456”(即你設置的集羣密碼)

6.啓動這6個redis實例,即通過redis-server來啓動7001~7006這6個文件夾下的redis.conf文件來創建6個redis實例(先找到redis-server的位置,一般在/usr/bin/文件夾下。6個都要啓動,這裏只給了一個示例)

/usr/bin/redis-server /etc/redis/redis_cluster/7001/redis.conf

7.通過以下命令查看其狀態(後面的cluster即表明其是集羣中的redis實例)

ps  -ef | grep -i redis

查詢結果如下(若某一個實例後面沒有【cluster】,則表明那個文件夾下的redis.conf中的cluster-enabled沒有設置爲yes)
後面的cluster即表明其是集羣中的redis實例
8.官網提供了redis-trib.rb工具來創建集羣,所以先找到這個redis-trib.rb這個文件,若在redis源文件中找到最好,若不這能,則通過locate redis-trib.rb找到這個文件的位置,將這個文件複製到/usr/bin/中,以便隨時可以使用它。

9.通過以下命令在你的Ubuntu下面安裝rudy``
(若沒有安裝rudy,而導致出現rudy:沒有這個文件或者目錄的錯誤提醒)

sudo apt-get update
sudo apt-get install ruby

10.安裝成功之後,通過以下命令將redis與rudy進行連接

gem install redis 

(若沒有進行連接會出現以下錯誤)
在這裏插入圖片描述

11.通過以下命令來創建集羣(121.196.219.132是我的服務器的公網地址,這裏需要填寫你的,否則你不能在外網訪問你的集羣,比如在java代碼中不能通過Jedis訪問集羣中的數據)

redis-trib.rb create --replicas 1 121.196.219.132:7001 121.196.219.132:7002 121.196.219.132:7003 121.196.219.132:7004 121.196.219.132:7005 121.196.219.132:7006

成功之後出現以下信息
在這裏插入圖片描述
過程中根據提示,輸入yes,即可,成功後出現以下信息。

踩過的坑

創建集羣時,出現連接不上集羣–[ERR] Sorry, can’t connect to node 121.196.219.132:7001

(導致這種錯誤的原因各種各樣,我在此即提幾點要注意的地方)
1.注意bind的配置,bind即爲你的redis服務器可被訪問的ip,這裏你最好就不設置,直接註銷掉。

2.集羣密碼的設置,可按我在配置流程中的來,親測有效。

3.檢查6個實例的redis.conf文件是否配置對,是否有遺漏。

4.若還是找不出,可按下面的—出現結點不爲空錯誤中的解決辦法,來解決。

創建集羣時,出現集羣結點不爲空錯誤–[ERR] Node 121.196.219.132:7001 is not empty. Either the nodealready knows other nodes (check with CLUSTER NODES) or contains some key in database 0.

出現這種錯誤的原因是因爲在多次嘗試創建集羣的過程中,非正常關閉redis。
在這裏插入圖片描述
解決辦法如下,

  1. 首先刪除掉新增的節點下aof、rdb等本地備份文件(aof文件爲redis持久化所用的文件,若在對7001~7006文件夾下的redis.conf進行設置時,沒有啓動aof方式進行持久化,則不需要刪除aof文件,rdb爲redis以快照方式持久化所用的文件,需要找到刪除)
  2. 同時將新Node的集羣配置文件刪除,即刪除你redis.conf裏面cluster-config-file所指定的文件,可通過locate nodes-7001.conf,找到該文件,將這六個文件都刪除。(一般都會在一起的)在這裏插入圖片描述
  3. 將目前所有的redis進程都殺死,通過kill -9 pid號,將所有redis進程殺死。
  4. 啓動這6個redis實例,即通過redis-server來啓動7001~7006這6個文件夾下的redis.conf文件來創建6個redis實例(先找到redis-server的位置,一般在/usr/bin/文件夾下。6個都要啓動,這裏只給了一個示例)
/usr/bin/redis-server /etc/redis/redis_cluster/7001/redis.conf

5.通過以下命令查看其狀態(後面的cluster即表明其是集羣中的redis實例)

ps  -ef | grep -i redis

查詢結果如下
後面的cluster即表明其是集羣中的redis實例
6. 通過以下命令來創建集羣

redis-trib.rb create --replicas 1 121.196.219.132:7001 121.196.219.132:7002 121.196.219.132:7003 121.196.219.132:7004 121.196.219.132:7005 121.196.219.132:7006

(至此應該是沒有問題,成功裝配成功的,若添加結點還是報錯,可進入客戶端,對數據庫進行清除)
121.0.0.1:7001> flushdb #清空當前據庫

Jedis訪問集羣時出現以下錯誤--------------------------------------------------org.springframework.data.redis.TooManyClusterRedirectionsException: No more cluster attempts left.; nested exception is redis.clients.jedis.exceptions.JedisClusterMaxAttemptsException: No more cluster attempts left.

解決辦法:

這是因爲你創建集羣時命令爲redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006,創建的集羣是在局域網中,即只能通過服務器的客戶端進行訪問,不能通過外網訪問。先在你的服務器中將17001~17006端口打開(控制檯中打開),然後在服務器中輸入命令redis-trib.rb create --replicas 1 121.196.219.132:7001 121.196.219.132:7002 121.196.219.132:7003 121.196.219.132:7004 121.196.219.132:7005 121.196.219.132:7006。

若你一直停在這一步,說明你的集羣端口17001~17006端口沒有打開
在這裏插入圖片描述

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