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 mode. centos
要建立集羣,首先須要建立幾個空的redis實例運行,也就是幾個節點的意思。緩存
集羣的大致思路就是:ruby
1.先安裝好一個redis
2.解壓的redis目錄下建立節點
3.拷貝相關配置文件到各個節點並修改端口號
4.安裝集羣環境
這裏坑比較多你們必定要看好了,redis集羣須要依賴ruby2.2.2以上版本,而ruby版本須要rvm來管理,同時ruby須要集成zlib和openssl庫(並須要配置Makefile文件)
因此安裝集成環境須要:
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、安裝zlib庫,若是已經安裝,跳過,直接進入第二步。本博主是下載的zlib解壓安裝的
由於本centos是32位的因此採用的是如上的zlib-devel rpm文件
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會報錯以下:
提示缺乏openssl庫,這兩個庫能夠經過yum安裝,可是安裝了須要集成到ruby中。
1、安裝openssl庫,若是已經安裝能夠跳過,直接進入第二步。
不要只用yum install openssl來安裝,不然會缺乏pcre等相關庫,執行ruby extconf.rb會提示找不到ssl.h文件。
第二步、集成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集羣終於完成。