linux下搭建redis集羣

上一篇記錄了linux如何安裝redis服務:點擊打開鏈接

本篇將在上一篇的基礎上搭建redis集羣,因爲個人硬件條件受限,集羣的所有redis實例都搭建在同一臺服務器上。

1、首先新建一個redis-cluster目錄,裏面存放所有redis節點實例。


2、將上一篇博客裏安裝好的redis服務,redis/bin這個目錄拷貝到redis-cluster目錄下改名爲redis01


因爲我這個redis是直接從以前搭好的複製過來的,存在一些舊數據,所以進入redis01目錄下將dump.rdb文件刪除掉。


3、vi redis.conf 修改該文件裏面配置的redis監聽的端口號,(可以在命令模式下使用/prot進行查找)我這裏講端口號改爲7001。


在redis.conf文件裏找到cluster-enabled  yes 這一行,打開註釋,表示當前redis是集羣模式啓動。


4、redis搭建一個最小的集羣需要6個節點,因爲Redis集羣判斷節點是否宕機是一個投票機制,超過半數認爲某一節點宕機就認爲該節點掛掉了,也就是說我們需要至少三個節點。同時爲了保證集羣的高可用,每一個主節點都需要一個備份節點,當某一節點宕機時備份節點會代替主節點工作。

將上面的redis01目錄複製五份兒到redis-cluster目錄下,並且修改redis.conf將每個redis節點的端口號依次修改成7001~7006共六個。


5、六個節點配置完成後,新建一個腳本文件,用來批量啓動redis節點



爲腳本文件添加可執行權限


執行腳本文件,查看所有節點是否能成功啓動


6、需要搭建redis集羣我們還需要Ruby腳本語言的編譯環境

    yum install ruby(我自己安裝的時候裝完這個,執行下面的一行命令說我已經安裝過了,所以下面的也就不用裝了)

    yum install rubygems

執行以上兩個命令安裝ruby編譯環境,安裝完畢後,我們還需要一個redis-3.0.0.gem安裝包,在網上下載一個後安裝到我們的服務器上(這裏我在執行gem install redis-3.0.0.gem命令式也是提示我已經安裝過了,可能是redis源碼裏面本來就有了)。


安裝完成後進入我我們之前已經解壓的redis-3.0.0源碼包裏面的src目錄下找到redis-trib.rb文件,將該文件拷貝到我們的redis-cluster目錄下面。


7、執行命令開始搭建redis集羣

./redis-trib.rb create --replicas 1 ip:port ip:port ip:port ip:port ip:port ip:port

其中--replicas 1表示每個主節點都有一個從節點。


 執行完畢後出現以下信息表示搭建成功。


8、使用測試,隨便開啓一個redis-cli,注意要加端口號和-c,集羣根據我set的key值計算出slot的值然後分配到相應的節點上保存。(終於成功了)哭


9、重點,出現的問題

(1)在執行./redis-trib.rb create --replicas 1 ip:port ip:port ip:port ip:port ip:port ip:port這個命令時,我出現了一個錯誤,沒有出現上圖所示的任何信息,而是直接連上了一個redis-cli,退出時就出現異常了,突然想到我用的是阿里雲服務器7001~7006端口號沒有開放。

錯誤信息:/usr/local/share/gems/gems/redis-3.0.0/lib/redis/connection/ruby.rb:115:in `

在我開放後再執行以上命令,就出現正常了節點配置信息了。

(2)接着第一步配置信息出來之後,出現waiting for the cluster to join.....................................,然後一直........無限等待,又是一個問題。


原因:

redis集羣不僅需要開通redis客戶端連接的端口,而且需要開通集羣總線端口
集羣總線端口爲redis客戶端連接的端口 + 10000
如redis端口爲6379
則集羣總線端口爲16379

解決方法:我在阿里雲安全組規則上,把17001~17006都開了一遍,然後解決了,實在不行的話,把16379也開上尷尬

(3)端口都打開了,但是我控制檯開始在「............................」,我ctrl+c退出了,然後重新執行命令,又出問題了,

錯誤信息:in 'call':ERR Slot 0 is already busy (Redis::CommandError)

原因:我上一步因爲端口號的原因搭建失敗了,留下了殘餘的配置文件。

解決辦法:百度了一下,我先把所有redis節點目錄下的nodes.conf文件都刪掉了還是不行

                最後用redis-cli 登錄到每個節點執行  flushall  和 cluster reset  就可以了。注意這裏登錄redis-cli需要帶上-p port 不然無法連接。