1. 程式人生 > >Linux 下Redis叢集安裝部署及使用詳解(線上和離線兩種安裝+相關錯誤解決方案)

Linux 下Redis叢集安裝部署及使用詳解(線上和離線兩種安裝+相關錯誤解決方案)

一、應用場景介紹

  本文主要是介紹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/redis
2 $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 redisps  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 `<main>'

這錯誤是提示不能載入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 -- zlib
ERROR:  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.gz
2 $cd zlib-1.2.8.tar.gz
3 $./configure --prefix=/usr/local/zlib  設定安裝路徑
4 $make
5 $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... no
checking for deflateReset() in -llibz... no
checking for deflateReset() in -lzlib1... no
checking for deflateReset() in -lzlib... no
checking for deflateReset() in -lzdll... no
checking for deflateReset() in -lzlibwapi... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need 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

1 $ tar -xzvf openssl-1.0.2l.tar.gz
2 $ cd openssl-1.0.2l
3 $ ./config -fPIC --prefix=/usr/local/openssl enable-shared
4 $ ./config -t
5 $ make && make install

安裝openssl成功介面如下:

我們又要到到Ruby解壓的原始碼[/home/cmfchina/ruby-2.4.1]目錄下的ext/openssl 目錄,如圖所示

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

1 $ cd /home/cmfchina/ruby-2.4.1/ext/openssl
2 備註:/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埠,新增資料

[[email protected] redis7001]# redis-cli -p 7001 -c   
[[email protected] 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(哨兵)模式

相關推薦

Linux Redis叢集安裝部署使用(線上離線安裝+相關錯誤解決方案)

一、應用場景介紹   本文主要是介紹Redis叢集在Linux環境下的安裝講解,其中主要包括在聯網的Linux環境和離線的Linux環境下是如何安裝的。因為大多數時候,公司的生產環境是在內網環境下,無外網,伺服器處於離線狀態(最近公司要上線專案,就是無外網環境的Linux,被離線安裝坑慘了,走了很多彎路,說多

Linux 安裝Ruby(線上離線安裝)

  很多時候我們會發現,真實的生成環境很多都沒有外網,只有內網環境,這個時候我們又需要安裝Ruby,則不能提供yum命令進行線上安裝了,這個時候我們就需要下載安裝包進行離線安裝。本文主要簡單介紹如果離線安裝Ruby   安裝之前我們簡單介紹下Ruby 一、Ruby簡介   Ruby是一種純粹的面向物件程式語言

Linux 模擬Http 的get or post請求(curlwget方法)

一、get請求: 1、使用curl命令: curl "http://www.baidu.com"  如果這裡的URL指向的是一個檔案或者一幅圖都可以直接下載到本地 curl -i "http://www.baidu.com"  顯示全部資訊 curl -l "http://

POI操作Excel---HSSFXSSF方式

HSSF方式: <span style="font-family:Courier New;">package com.tools.poi.lesson1;      import java.io.FileInputStream;  import java.io.

Linux Redis叢集安裝部署使用

一、應用場景介紹   本文主要是介紹Redis叢集在Linux環境下的安裝講解,其中主要包括在聯網的Linux環境和離線的Linux環境下是如何安裝的。因為大多數時候,公司的生產環境是在內網環境下,無外網,伺服器處於離線狀態(最近公司要上線專案,就是無外網環境的Linu

linuxredis叢集的搭建

本篇部落格將演示還ubuntu下redis叢集的搭建。 redis-cluster架構圖: 架構細節: (1)所有的redis節點彼此互聯(PING-PONG機制),內部使用二進位制協議優化傳輸速度和頻寬. (2)節點的fail是通過叢集中超過半數的節點檢測失效時才生效.通過投

Linuxredis 叢集 批量刪除 鍵 以及一些其他日常管理操作

命令大全:http://doc.redisfans.com/ 一、操作環境:CentOS-7,redis-4.0.8,雙機主備叢集, 10.190.104.11:6378/6379/6380;(主) 10.190.104.11:6378/6379/6380;(備)

Linux的壓縮zip,tar命令例項

Linux下的壓縮解壓縮命令詳解及例項 例項:壓縮伺服器上當前目錄的內容為xxx.zip檔案 zip -r xxx.zip ./* 解壓zip檔案到當前目錄 unzip filename.zip ============================ 另:有些伺服器

LinuxRedis叢集搭建與測試

叢集搭建 準備條件 一臺已經配置好Redis服務的虛擬機器,地址為: 192.168.2.100:6379 克隆6臺,使用命令nmtui修改地址分別為: 192.168.2.101 192.168.2.102 192.168.2.103 1

Linux同步工具inotify+rsync使用

server linux 通道 主機 Linux下同步工具inotify+rsync使用詳解 Posted on 2014-12-12 | In Linux | 9 | Visitors 4381. rsync1.1 什麽是rsyncrsync是一個遠程數據同步工具,可通過LAN/WAN

Linux PS1 PS2 PS3 PS4 提示符

linux提示符很多人在用Linux時,對提示符都不太註重,能夠利用好提示符可更直觀地查看,利於自己的判斷Linux下有PS1 PS2 PS3 PS4 四類提示符,這四個變量都是環境變量,至於系統裏有哪些環境變量,可使用命令 “env”來查看PS1命令提示符PS1有那些配置,或者說PS1裏頭都能配置些命令提示

linuxiptables命令的應用與

iptables 一、iptables的規則表和鏈。 表(tables)提供特定的功能,iptables內置了4個表,即filter表、nat表、mangle表和raw表,分別用於實現包過濾,網絡地址轉換、包重構(修改)和數據跟蹤處理。 鏈(chains)是數據包傳播的路徑,每一條鏈其實就是眾多規則中的

Linuxrar 命令壓縮和解壓

保持 介紹 詳細 註意 壓縮 rar 縮進 command 解壓縮 例1:添加文件或目錄到壓縮檔案中,使用a命令。例如把文件files1添加到abc.rar中,使用a或m命令,a命令把file1文件添加到abc.rar檔案中保持原有的file1文件不變,m命令移動file1

Linux/etc/sysconfig目錄下文件

sysconfig今天給服務器添加防火墻規則時,不小心刪除了一條規則,然後我的遠程連接就斷了,我老大忽然問我iptables配置文件路徑在什麽地方,當時就懵逼了,我還真不知道因為平時全部都是命令添加防火墻,結果被老大給說了基礎不紮實。想想也真是,Linux學習一年多了,當初那麽拼命的學習就是為了打好基礎,本想

SVN的安裝配置 SVN的使用

commit svnadmin eat onf 壓縮文件 客戶端 href vpd 恢復 什麽是SVN(subversion) SVN是近年來非常優秀的版本管理工具,與CSV管理工具一樣,SVN是一個跨平臺開元版本控制系統,但是SVN與眾不同的是,SVN會備份並記錄每個

linuxrsync文件同步配置

寫入文件 sts ddr ORC 文件的 數據鏡像 根據 數據 watermark 介紹 rsync(remote sync)是unix及類unix平臺下的數據鏡像備份軟件,它不像FTP那樣需要全備份,rsync可以根據數據的變化進行差異備份,從而減少數據流量,提高工作效率

zookeeper的安裝步驟

一、上傳zk安裝包 cd /user/zookeeper (沒有zookeeper自己建立一個) rz 二、解壓 tar -zxvf zookeeper-3.4.12.tar.gz 三、配置(先在一臺節點上配置) 1.需要把conf目錄下的 zoo_sample.cf

Linux多資料夾編寫Makefile

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

CentOS LinuxVNC Server遠端桌面配置

一、安裝相應桌面環境與vnc服務端和客戶端: # yum groupinstall "GNOME Desktop Environment"(CentOS 5.x安裝GNOME桌面環境) # yum groupinstall "X Window System" "Desktop"(CentOS 6.

linux的藍芽驅動程式

1、首先要做Bluez協議棧的移植,這樣在開發板上才可以用hciconfig, hcitool等命令。關於bluez協議棧的移植步驟網上很多。 2、該驅動是USB藍芽裝置驅動,分析根據藍芽驅動的寫的順序進行。因為只是要做資料的傳輸,所以講用於語音的等時傳輸部分去掉了。 首先