centos Redis叢集安裝部署教程,centosredis

來源:互聯網
上載者:User

centos Redis叢集安裝部署教程,centosredis
一、應用情境介紹

本文主要是介紹Redis叢集在Linux環境下的安裝講解,其中主要包括在連網的Linux環境和離線的Linux環境下是如何安裝的。因為大多數時候,公司的生產環境是在內網環境下,無外網,伺服器處於離線狀態(最近公司要上線項目,就是無外網環境的Linux,被離線安裝坑慘了,走了很多彎路,說多了都是血淚史啊%>_<%)。這也是筆者寫本文的初衷,希望其他人少走彎路,下面就介紹如何在Linux安裝部署Redis叢集。

二、安裝環境及工具

系統:Red Hat Enterprise Linux Server release 6.6

工具:XShell5及Xftp5

安裝包:GCC-7.1.0

Ruby-2.4.1

Rubygems-2.6.12

Redis-3.2.9(3.x版本才開始支援叢集功能)

三、安裝步驟

要搭建一個最簡單的Redis叢集,我們至少需要6個節點:3個Master和3個Slave。那為什麼需要3個Master呢?其實就是一個“鐵三角”的關係,當1個Master下線的時候,其他2個Master和對應的Salve立馬就能頂替上去,確保叢集能夠正常使用,如果你之前瞭解Mongodb/Hadoop/Strom這些的話,你就很容易目標一般分布式的最低要求基數個數節點,這樣便於選舉(少數服從多數的原則)。本文當中,我們就偷下懶,在一台Linux虛擬機器上搭建6個節點的Redis叢集(實際真正生產環境,需要3台Linux伺服器分布存放3個Master)

1、安裝GCC環境

安裝Redis需要依託GCC環境,先檢查Linux是否已經安裝了GCC,如果沒有安裝,則需要進行安裝

檢查GCC是否安裝,可以看看版本號碼

$ gcc -v

如果已經安裝了GCC,則會顯示以下資訊

如果沒有任何資訊,則我們可以通過命令yum install gcc-c++進行線上安裝

$ yum install gcc-c++

如果沒有網路的時候,我們就需要下載GCC的安裝包進行手動安裝了,具體方法還是比較複雜的,具體離線安裝GCC的方法,請參考我的另外一篇文章《Linux無網離線安裝GCC》

2、安裝Ruby和Rubygems

如果有網的話,則通過yum命令進行安裝,自動將關聯的依賴包全部安裝

$ yum install ruby$ yum install rubygems

如果是離線的狀態,我們則可以選擇下載Ruby和Rubygems,解壓手動進行安裝,具體的方法請參考我的另外兩篇檔案《Linux 離線安裝Ruby詳解》和《Linux 離線安裝Rubygems詳解》,這裡我們不做多講解。

四、安裝Redis

1、到官網(https://redis.io/download)下載Redis,現在最新的版本為:3.2.9 ,將下載好的壓縮包上傳到伺服器當中。,我是建立了一個Redis臨時目錄存放,偷懶我就用xftp5手動建立一個目錄存放(也可以寫命令建立檔案夾 $ makdir redis)

2、安裝Redis

轉到Redis的存放目錄,然後通過命令解壓Redis壓縮包

$ cd /home/cmfchina/redis$ tar -zxvf redis-3.2.9.tar.gz

通過make命令進行安裝Redis(需要root許可權)

$ cd /home/cmfchina/redis/redis-3.2.9$ make && make install  //make 這裡如果不指定PREFIX,預設將安裝在/usr/local/bin下,保持預設就好

如果沒有root許可權是無法安裝的,

我們擷取root許可權之後再進行安裝,看到如下資訊,說明Redis安裝成功了,也可以到/usr/local/bin目錄下看看

如果只是想要單機,不存在叢集功能,我們現在就可以將Redis運行起來,我們直接在剛剛解壓的Redis目錄下運行命令就可以將單機的Redis 運行起來

$ cd /home/cmfchina/redis/redis-3.2.9$ redis-server redis.conf  //所有相關配置資訊都在conf裡面,如果不設定,預設連接埠號碼為:6379

五、配置Redis叢集

  剛剛上面講到如果只是想運行單機版的Redis(個人研究Redis可以安裝單機版),上面的講解已經夠了,不過現實當中,我們往往是需要使用到叢集功能的,進行容錯。

  之前講到是我們需要6個節點的Redis作為叢集,所以我們需要建立6個檔案夾,分別存放6個節點的配置資訊,6個節點需要對應6個連接埠號碼,比如7001~7006,這個連接埠號碼我們自行定義,我們通過xftp5可視化建立一下。

第一步、我們也可以通過命令mkdir大量建立,,命令可能會更快點。

下面重點來了,需要6個節點,所有我們需要配置各自的redis.conf設定檔。到我們Redis的安裝目錄usr/local/bin,將redis-cli、redis-server、redis.conf(沒有conf檔案,可以從壓縮包裡拷個出來,或者自己直接建立一個空的conf檔案,後面再配置相關資訊),分別複製到剛剛建立的6個檔案夾當中。

第二步、接下來,我們需要配置redis.conf檔案,如果你是從壓縮包拷貝出來,你會發現特別多的備忘,這些是都是官網的備忘講解,你可以全部刪除,只配置你想配置的資訊就行。我們主要配置相對應的連接埠資訊和叢集配置資訊

還有很多redis.conf配置資訊,實際情境我們再自行配置,關於配置redis.conf的相關資訊,可以參考筆者另一篇檔案《Redis.conf及其Sentinel.conf配置項詳細說明》。我們分別配置相對應的6個redis.conf資訊。

分別將這6個redis服務啟動起來(命令redis-server redis.conf),一個一個去啟動有點複雜,在redis目錄建立一個sh指令碼來啟動6個執行個體

1 $cd /home/cmfchina/redis2 $vim startall.sh 就會開啟vim編輯器,建立一個空的文本

:wq!儲存指令碼,建立成功:

執行./startall.sh 提示permission denied說明許可權不足,執行命令chmod 777 startall.sh修改許可權擷取root使用者執行指令碼

$ chmod 777 startall.sh 分配許可權$ sh -x startall.sh 執行指令碼

=======補充說明 :2017-12-14 =========

有網友跟博主反應,上面這個批量指令碼不能執行,是博主漏加了命令:kill -2

因為:每次執行一個redis啟動,都會停留在redis的啟動介面(上文說到的單機啟動redis的那個介面),所以我們需要類比退出當前介面,執行下一條命令

Kill -2 :功能類似於Ctrl + C 是程式在結束之前,能夠儲存相關資料,然後再退出。

將上文的指令碼改造下就行;

Ps:如果出現路徑找不到的問題,將上文的路徑全部換成絕對路徑

=================================

再執行./startall.sh, 然後通過命令netstat -tnulp | grep redis和ps aux | grep redis查看redis運行情況,可以看到連接埠7001、7002、7003、7004、7005、7006的redis都起來了。噢耶~~~~

第三步、實際上,Redis叢集的操作在後文你可以看到是通過Ruby指令碼來完成的,因此我們需要安裝Ruby相關的RPM包,以及Redis和Ruby的介面包。我們要用到之前安裝的Ruby。我們到之前解壓的檔案redis-3.2.9/src目錄下找到檔案為:redis-trib.rb,

將該檔案拷貝到與6個檔案夾的同級目錄下

在redis目錄下執行命令:

$ ./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

===============相關錯誤匯總解決方案(你以為上面是重點%>_<%,其實下面這才是本文重點(太多坑)!!!)===============

如果執行上述命令出現Ruby和Rubygems錯誤的話,那是沒有安裝Ruby和Rubygems,所有這就是為什麼我們文章之前就要提前安裝好Ruby和Rubygems。但是有些人說這兩個我們已經安裝了,為什麼還會報如下錯誤的話

/home/cmfchina/ruby/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- redis (LoadError)from /home/cmfchina/ruby/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'from ./redis-trib.rb:25:in `'

這錯誤是提示不能載入redis,那是因為缺少redis和ruby的介面,使用gem安裝,我們這個時候其實還需要安裝對應的Redis的Rbuy介面包。我們需要下載對應Redis的gem包安裝才行。Rubygems的官網其實提供了Redis的gem包,我們可以直接取下載https://rubygems.org/gems/redis/ 下載後上傳到伺服器當中

執行gem install redis-3.3.0.gem命令安裝。

$ gem install redis-3.3.0.gem

但是執行這個又報了錯誤,如果沒有報錯的話那就說明人品好啊......真是心塞~~~,這是因為需要依賴zlib工具。

ERROR:  Loading command: install (LoadError)    cannot load such file -- zlibERROR:  While executing gem ... (NoMethodError)    undefined method `invoke_with_build_args' for nil:NilClass

第四步、我們需要再安裝zlib才行,下載zlib,上傳解壓,安裝zlib官方網站:http://www.zlib.net,最新版1.2.11,安裝我們就一筆帶過

1 $tar -xvzf zlib-1.2.11.tar.gz2 $cd zlib-1.2.8.tar.gz3 $./configure --prefix=/usr/local/zlib  設定安裝路徑4 $make5 $make instal

安裝完zlib之後,我們再需要執行以下命令

1 $ cd /home/cmfchina/ruby/ruby-2.4.1/ext/zlib  備忘:/home/cmfchina/ruby/ruby-2.4.1這個目錄是ruby安裝包後解壓的目錄,就是前面提到的ruby離線安裝2 $ ruby extconf.rb 3 $ make && make install 

可是又報錯了,真是無力吐槽了~~~錯誤資訊如下

checking for deflateReset() in -lz... nochecking for deflateReset() in -llibz... nochecking for deflateReset() in -lzlib1... nochecking for deflateReset() in -lzlib... nochecking for deflateReset() in -lzdll... nochecking for deflateReset() in -lzlibwapi... no*** extconf.rb failed ***Could not create Makefile due to some reason, probably lack of necessarylibraries and/or headers.  Check the mkmf.log file for more details.  You mayneed configuration options.

本著不放棄的原則,只能去外國網站查查資料看怎麼解決了,發現原來是要將檔案安裝到本地運行庫的裡面才行,所有安裝的時候需要額外配置資訊,但是前提是我們需要安裝zlib,才能繼續下一步。

安裝好zlib,然後我們重新輸入命令

1 $ cd /home/cmfchina/ruby/ruby-2.4.1/ext/zlib  備忘:/home/cmfchina/ruby/ruby-2.4.1這個目錄是ruby安裝包後解壓的目錄,就是前面提到的ruby離線安裝2 $ ruby extconf.rb --with-zlib-include=/usr/local/zlib/include/ --with-zlib-lib=/usr/local/zlib/lib   //會產生一個Makefile檔案備忘:/usr/local/zlib是我的zlib安裝目錄
3 $ make && make install  

這個時候會自動產生一個Makefile檔案,

接下來我們make && make install 安裝一下,但是當我們make的時候,又出現了錯誤如下

make: *** No rule to make target `/include/ruby.h', needed by `zlib.o'.  Stop

這個時候開啟ext/zlib/Makefile檔案,找到下面一行把路徑進行修改一下。

zlib.o: $(top_srcdir)/include/ruby.h 改成:zlib.o: ../../include/ruby.h

修改完成,然後儲存:接著我們再make && make install,這個時候安裝成功了~~所以就放心地接著幹吧!(沒有看到我也無能為力了)安裝完成後如下顯示

我們回到redis的gem目錄下,繼續執行命令:gem install redis-3.3.0.gem

但是......又出現了錯誤,原來我們還需要安裝OpenSSL,因為Redis叢集互動是需要OpenSSL

第五步、我們又得安裝OpenSSL才行,官網地址:https://www.openssl.org/source/上次壓縮包到伺服器,解壓,具體不做太細講解

1 $ tar -xzvf openssl-1.0.2l.tar.gz2 $ cd openssl-1.0.2l3 $ ./config -fPIC --prefix=/usr/local/openssl enable-shared4 $ ./config -t5 $ make && make install

安裝openssl成功介面如下:

我們又要到到Ruby解壓的源碼[/home/cmfchina/ruby-2.4.1]目錄下的ext/openssl 目錄,

安裝和zlib一樣的方式安裝openssl

1 $ cd /home/cmfchina/ruby-2.4.1/ext/openssl2 備忘:/home/cmfchina/ruby/ruby-2.4.1這個目錄是ruby安裝包後解壓的目錄,就是前面提到的ruby離線安裝3 $ruby extconf.rb  --with-openssl-include=/usr/local/openssl/include/ --with-openssl-lib=/usr/local/openssl/lib //會產生一個Makefile檔案4 備忘:/usr/local/openssl是我的openssl安裝目錄5 $ make && make install  

但是我們make的時候,又出現了和zlib類似的錯誤

make: *** No rule to make target `/include/ruby.h', needed by `ossl.o'.  Stop

還是按照剛剛zlib操作一樣,開啟Makefile檔案,將$(top_srcdir)全部改成../..

修改後儲存,再執行make && make install,這一次安裝成功了~~

然後我們再回到之前redis目錄下執行命令:gem install redis-3.3.0.gem

第六步、啟動Redis叢集

完成以上步驟之後,我們再回到第三步執行命令

在redis目錄下執行命令:

$ ./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

我們選擇yes,意思是服從這種主從分配方式,我們也可以通過設定檔自己指定slave

第六、Redis叢集測試

我們來測試一下Redis叢集,通過串連任一redis連接埠,添加資料

[root@localhost redis7001]# redis-cli -p 7001 -c   
[root@localhost redis7001]# redis-cli -c -h 127.0.0.1 -p 7001 shutdown //關閉叢集,如果沒有-h參數,預設串連127.0.0.1,如果沒有-p參數,預設串連6370連接埠(所有如果用預設的,就沒有-h -p)

說明:-h+host –p+連接埠號碼 –c 是要串連叢集,注意坑,不加會報錯的

可以看到串連的是7001的節點,set name的時候計算了存在哪個hash槽上,會跳轉到那個槽對應的節點

結束語:至此,Redis的叢集配置的前世今生已到此結束,在沒有網路的環境下中途碰到了很多坑,現在我們可以盡情享受Redis,縱使虐我千百遍,我待它如初戀

後話:推薦一個Redis的視覺化檢視:RedisDesktopManager 官網(https://redisdesktop.com/download),具體可以到官網看看,這裡我只拋磚引玉一下,下篇文章主要介紹Redis的Sentinel(哨兵)模式

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.