Redis集羣環境之linux搭建單機版

       Redis解決的問題是:做爲一個緩存nosql數據庫,可以支持高併發,關係型數據庫是存儲在磁盤中,經過io讀寫,而redis是存儲在內存中,所以,可以實現高可用,他主要是解決數據庫性能瓶頸而產生的。java

 

        當單機版redis在訪問量高的時候,可能出現承載的性能問題,因而對他進行擴容就產生了多機版,多機版有一個同步問題,爲了解決該問題應用了集羣,集羣是有一個master和多個slave之間進行同步,Redis3.0以後的Redis cluster集羣更便捷,爲此本篇主要是講Redis cluster-slaver集羣。node

如今開始搞集羣linux

集羣以前先用大白話簡單說一下本身的理解redis

        根據學習知識,總結爲比較簡單的大白話來講其集羣就是將幾臺redis服務器鏈接在一塊兒,他們之間彼此鏈接,當客戶對任何一臺服務器發起請求的時候 ,其效果都是同樣的,有點工廠模式的意思,工廠模式是問工廠要東西就成,這個就是有點像是存儲數據到工廠,給工廠之後,不用管爲何我請求的是存儲到集羣中a服務器的,可是當我再次從集羣中b服務器讀取剛在a上存儲的數據居然能讀取到,這裏面的原理在集羣之後,應用端是不須要關注的,因此集羣后的服務器能夠看做是一個總體的更大的服務器,這個大總體中的任何節點服務器一致對外提供同樣的服務,彼此之間信息共享,因此當這個集羣中一些服務宕機後(只要不超過一半)仍然不受影響。sql

通過屢次失敗嘗試,屢次修改數據庫

首先說明,Redis集羣須要依賴ruby環境,個人安裝環境是linux centOS6.7,他直接採用 yum install ruby 安裝的只是1.8.7版本的,版本太低,redis cluster集羣須要的ruby版本要高於2.2.2故而,在安裝匹配的ruby環境時候折騰了很久,而管理ruby版本採用rvm比較好,姑且能夠認爲ruby依賴rvm吧並不許確。 vim

        官網上說:To create a cluster, the first thing we need is to have a few empty Redis instances running in cluster modecentos

要建立集羣,首先須要建立幾個空的redis實例運行,也就是幾個節點的意思。緩存

集羣的大致思路就是:ruby

1.先安裝好一個redis

2.解壓的redis目錄下建立節點

3.拷貝相關配置文件到各個節點並修改端口號

4.安裝集羣環境

        這裏坑比較多你們必定要看好了,redis集羣須要依賴ruby2.2.2以上版本,而ruby版本須要rvm來管理,同時ruby須要集成zlib和openssl庫(並須要配置Makefile文件)

因此安裝集成環境須要:

 

  • rvm
  • ruby2.2.2以上版本
  • zlib(並須要配置Makefile文件)
  • openssl(並須要配置Makefile文件)
  • redis-4.0.1.gem文件

5.進行集羣

1、安裝第一個redis

    Redis的安裝見以前的博客。安裝的是4.0.9 make後在本目錄下安裝

進入安裝目錄查看,以下有bin目錄表示安裝成功

進入bin目錄啓動

./redis-server 啓動後以下成功

啓動成功後,不能再進行其餘操做,此時能夠拷貝redis.conf到剛纔的user/local/redis/bin目錄中,並修改其中的配置

編輯daemonize設置爲yes以下:(尤爲是節點中若是沒有設置就會出現問題,後面有介紹,主要是沒法編輯容易致使剛剛啓動的服務關閉)

2、建立節點

按照官網來,

The following is a minimal Redis cluster configuration file:

port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

就是說若是進行集羣,在redis.conf中必須至少配置上如上的信息(這裏建議加上daemonize=yes 主要是啓動服務後服務在前臺仍是後臺進行的區別,yes有助於操做)

Note that the minimal cluster that works as expected requires to contain at least three master nodes. For your first tests it is strongly suggested to start a six nodes cluster with three masters and three slaves.

To do so, enter a new directory, and create the following directories named after the port number of the instance we'll run inside any given directory.

官網強烈建議6個節點,3個主節點和3個從節點,而且節點的命令以端口號命名

mkdir cluster-test
cd cluster-test
mkdir 7000 7001 7002 7003 7004 7005

3、在新建的節點文件夾700~7005中新建配置redis.conf文件將官網要求的至少配置信息配置在裏面,能夠配置一個後拷貝修改端口號就成

cd 7000 ------>touch redis.conf----->vim redis.conf------>寫入配置信息

退出,而後拷貝到其餘5個節點文件夾下,並修改配置文件中端口號與各節點名相同便可。

分別啓動

啓動各個服務啓動命令爲

./+redis-4.0.9下src下的路徑/server-redis 節點路徑   (須要注意的是這些路徑都是相對當前文件夾下的,必定要注意,不然啓動不起來

啓動方式二,寫個啓動腳本start-all.sh

內容爲:

修改這個命令的權限

此時啓動發現一個問題,所有沒有在後臺啓動,當我ctrl+c一次就會關閉一個服務,致使在我最後可以寫查看命令

ps aux|grep redis的時候只有一個顯示出來如圖紅框中,由於其餘四個被關閉了,解決辦法是,在7000~7005目錄下的redis.conf中都添加daemonize yes 的參數設置,再次啓動,就OK 了,以下圖所有

4、搭建集羣

使用ruby腳本搭建集羣,須要ruby的運行環境

運行命令yum install ruby


查看狀態


安裝gem組件  yum install rubygems 


檢查安裝狀況


執行集羣命令


出錯了


ruby版本過低,明天在搞吧

如今咱們來換一種安裝方法

在網上下載ruby高版本的源碼網址是:下載ruby,我下載的是2.5.1


而後將其拷貝到linux相應的文件夾下,既然是redis的依賴,我就放在local下面redis裏面把


解壓 tar -xzvf ruby-2.5.1.tar.gz

cd ruby-2.5.1

以後配置並編譯源代碼執行命令

./configure

make 

sudo make install

上述命令完成後



 

安裝RVM管理ruby 

以下gpg --keyserver hkp://.......................................的命令

 

而後執行curl -sSL https://get.rvm.io | bash -sstable,執行後以下:

開啓一個新終端或者重啓虛擬機查看rvm -v是否安裝成功(能夠免去source 命令去載入rvm環境的命令,由於會自動載入)

下面是從新打開終端:

以下是重啓後:

同時發現ruby已經變成2.5.1版本了,沒按裝rvm以前我運行查看的時候是1.8.7版本的ruby。

接下來個進行gem install redis時有以下問題(能夠參考參考解決1,參考參考解決2)代碼也貼出來

 

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

 

先解決錯誤一,解決辦法分爲兩步:

1、安裝zlib庫,若是已經安裝,跳過,直接進入第二步。本博主是下載的zlib解壓安裝的

由於本centos是32位的因此採用的是如上的zlib-devel  rpm文件

 

 
  1. yum install zlib-devel  

2、集成zlib庫到ruby環境

cd /你對應的文件夾/ruby-2.4.2
cd ext/zlib
ruby extconf.rb
//在操做下一步以前須要修改Makefile文件中的zlib.o: $(top_srcdir)/include/ruby.h,將$(top_srcdir)修改成../..以下
//zlib.o: ../../include/ruby.h
//這一步若是不修改,make時會爆出另一個錯誤
//make:*** No rule to make target `/include/ruby.h', needed by `zlib.o'.  Stop
make && make install

以後若是直接運行gem install redis會報錯以下:

 

  1. ERROR:  While executing gem ... (Gem::Exception)  
  2. Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources 

提示缺乏openssl庫,這兩個庫能夠經過yum安裝,可是安裝了須要集成到ruby中。

 

1、安裝openssl庫,若是已經安裝能夠跳過,直接進入第二步。

[java]  view plain  copy
 
 
  1. yum install openssl-devel  

不要只用yum install openssl來安裝,不然會缺乏pcre等相關庫,執行ruby extconf.rb會提示找不到ssl.h文件。

[java]  view plain  copy
 
 
  1. checking for t_open() in -lnsl... no  
  2. checking for socket() in -lsocket... no  
  3. checking for openssl/ssl.h... no  

第二步、集成openssl庫到ruby

cd /data/ruby-2.4.2
cd ext/openssl
ruby extconf.rb
//一樣修改Makefile中的$(top_srcdir)爲../..
make && make install

成功以後,再次運行gem install redis,本博主運行後的界面貼出來以下:

集羣

首先開啓全部節點服務,./start.sh,而後


注意選擇yes


注意地方,一個是須要綁定ip 另外一個綁定的端口一個也不能寫錯。不然集羣的時候就給你報sorry,鏈接不上XX節點

測試:


至此Redis集羣終於完成。

相關文章
相關標籤/搜索