2年前在本地電腦上搭建過redis集羣。但苦於創業公司服務器資源有限(窮),並無應用到生產環境。近期換了個工做環境,有資源條件了準備開始搭建使用。雖然搭建過一次,但在搭建的過程中,仍是遇到一些問題,因此打算整理一份詳細的搭建記錄,也能給你們多一份參考選擇。node
服務器:windows server 2008 r2 (由於現有服務器是windows,那咱們就在windows上搭建)
下載地址:
Redis:https://github.com/MSOpenTech...(Redis-x64-3.2.100.zip)【Redis服務】
Ruby:http://dl.bintray.com/oneclic...(rubyinstaller-2.3.3-x64.exe)【Ruby環境安裝】
rubygems: https://rubygems.org/pages/do...【用於安裝ruby的redis依賴】
redis-trib.rb:https://raw.githubusercontent...【建立集羣的ruby腳本】git
一、下載redis服務綠色包 https://github.com/MSOpenTech...(Redis-x64-3.2.100.zip)。咱們約定7000、700一、7002 3個端口爲主節點,6000、600一、6002 3個端口爲從節點,便於區分。那先來搭建第一redis服務,而後如法炮製複製另外5個便可。
二、下載完成解壓,修改文件夾名稱爲Redis-6000,修改redis.windows.conf文件裏的信息以下:
port 6000 #端口#
cluster-enabled yes #是否開啓集羣#
cluster-config-file nodes.conf #集羣節點文件,會根據配置的名字生成在目錄下#
cluster-node-timeout 15000 #超時時間#
appendonly yes
注意:若是你是複製啓動過的redis服務,記得檢查目錄下是否有appendonly.aof,nodes.conf和.rdb文件(持久化存儲數據),刪除他們,不然在建立集羣的時候會失敗。
三、啓動redis服務
方法一:打開cmd,進入redis-6000目錄下執行命令:redis-server.exe redis.windows.conf。
方法二【推薦】:部署redis到windows服務裏,便於往後使用。cmd進入redis-6000目錄,執行命令redis-server --service-install redis.windows.conf --service-name Redis6000 --loglevel verbose
打開服務找到redis6000,右擊啓動。
啓動後查看目錄下會多出2個文件
四、這樣咱們第一個redis服務安裝成功,這時候這個redis服務還不能set數據,要配置完集羣纔可。那接着依照一樣的步驟搭建另外5個redis服務。github
redis-trib.rb是ruby腳本編寫的,可方便的搭建集羣,因此咱們須要安裝Ruby環境來執行腳本。redis
一、打開下載地址 http://dl.bintray.com/oneclic... 選擇 rubyinstaller-2.3.3-x64.exe 進行下載。
二、運行安裝(所有勾選)
三、安裝完畢,測試是否安裝成功。
打開cmd,輸入命令 ruby -v 。顯示版本表明環境安裝成功。windows
使用rubygems是爲了安裝ruby的redis依賴。緩存
一、打開下載地址 https://rubygems.org/pages/do..., 下載rubygems-update-3.0.2.gem,放到ruby目錄。
二、運行命令gem install --local D:Ruby23-x64rubygems-update-3.0.2.gem
三、安裝完成gem後,安裝 Redis依賴,在cmd裏繼續執行 gem install redisruby
一、打開下載地址 https://raw.githubusercontent... (指向最新版本),本文使用地址建議https://raw.githubusercontent...,另存爲到本地 (一個文本類文件)。
二、打開cmd,進入redis-trib.rb文件所在目錄,執行建立集羣命令
redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:6000 127.0.0.1:6001 127.0.0.1:6002
三、提示後輸入yes
如圖能看到3主3從的配置信息
rediscluster採用了哈希分區的「虛擬槽分區」方式,全部的鍵根據哈希函數(CRC16[key]&16383)映射到0-16383槽內,共16384個槽位。
主節點7000端口分槽是0-5460,對應從庫是6001
主節點7001端口分槽是5461-10922,對應從庫是6002
主節點7002端口分槽是10923-16383,對應從庫是6000服務器
狀況一、redis-trib.rb腳本版本與ruby的redis依賴版本不一致
說明redis-trib.rb的代碼版本與當前ruby安裝的redis依賴版本不匹配。
查看版本方法:打開ruby的gems安裝目錄,搜索redis。
https://raw.githubusercontent... (更改連接/redis/版本號/)
下載對應版本的腳本。
狀況2:沒法鏈接其餘節點
確保端口打開,各臺機子上能互相通訊app
一、打開cmd,進入redis6000端口的目錄,輸入redis-cli -h 127.0.0.1 -p 6000 -c(集羣鏈接多個-c)。隨便鏈接哪個節點均可以,只要這個節點運行正常,集羣會自動根據key來進入對應槽點的節點。
二、咱們存入2組key:value進行測試,key:vvv1和age:28,如圖所示age被存入7000,key被存入7002。那對應的從庫節點應該是6001和6000,咱們能夠利用工具查看。函數
首先模擬主節點7000掛掉,按照預期從節點6001選爲主節點。
一、進入服務裏中止redis7000
二、查看集羣信息,cmd進入redis-trib.rb文件目錄,執行redis-trib.rb check 127.0.0.1:6001
能夠看到從節點6001(S)已經變爲主節點(M)
三、取值測試 get age,原來是從7000節點裏取到的,如今任然取的到,只是是從6001裏取到
四、從新啓動redis7000,從新查看集羣信息
7000變爲從節點。
集羣在運行了一段時間以後,因爲需求的變更,咱們會增長或者刪減集羣節點。
主從節點增長選擇思路:(1)緩存服務存儲壓力大,增長主節點,橫向擴展 (2)保證redis集羣高可用,多增長從節點。任何一條主從線下的redis服務所有故障,則致使集羣不可用。
一、新部署一個redis服務端口7003
二、把7003加入集羣,cmd進入redis-trib.rb文件目錄,執行redis-trib.rb add-node 127.0.0.1:7003 127.0.0.1:7000
三、查看集羣信息redis-trib.rb check 127.0.0.1:6001
能看到7003已經被加入集羣,做爲主節點(M),可是這時候7003並無分槽。沒有分配哈希槽的話表示就沒有存儲數據的能力。
四、分配槽點
隨便進入一個客戶端,redis-trib.rb reshard 127.0.0.1:7001
(1)問咱們要移動多少個槽點,咱們按1W6的槽給4個主節點來均攤,大概是4000個節點。
(2)輸入4000,要咱們輸入接受節點的ID,就是7003的ID:28d7e06a951e82d8eca485fe465947100d78090a
(3)接着輸入all回車後提示輸入yes,就會從當前的其餘主節點裏抽取4000個槽過來。
若是過程當中出現槽錯誤
分別登陸7002和7003redis執行cluster setslot 11237 stable
五、爲7003添加從節點6003
(1)、部署redis6003
(2)、進入redis-trib.rb目錄執行redis-trib.rb add-node --slave 127.0.0.1:6003 127.0.0.1:7003
一、刪除從節點,由於沒有分配哈希槽,因此直接刪除。IP:端口 ID
redis-trib.rb del-node 127.0.0.1:6003 241c77920bde9952fbf3cb38f7b3085c946b0324
二、刪除主節點,由於主節點有分槽,先把槽移動至其餘主節點,再刪除
一、搭建完一個redis節點後複製另外5個。6個redis節點是集羣的最低配置。3對1主1從。
二、安裝ruby環境來執行redis-trib.rb建立集羣。還有手動建立集羣的方式,不須要ruby,可是麻煩一點。
三、在搭建好的集羣額外再添加刪除節點。加主節點仍是從節點思路:緩存服務存儲壓力大,增長主節點,橫向擴展。保證redis集羣高可用,多增長從節點,由於任何一條主從線下的redis節點所有故障,則致使集羣不可用。
【若是文章對你有所幫助,請在評論區留言點贊,以資鼓勵。】