Redis 3.0 cluster 集羣環境搭建

最近學習用redis, 裝了個centos-7虛擬機,在網上參考了很多博文,然後拼拼湊湊寫了一點東東,跟大家共享。

安裝redis 3.0

1、首先下載redis 3.0

  1. ·wget http://download.redis.io/releases/redis-3.0.0.tar.gz
  2. tar zxvf redis-3.0.0.tar.gz
  3. cd redis-3.0.0

2、編譯

 

  1. make

make命令執行完成編譯後,會在src目錄下生成6個可執行文件,分別是redis-server、redis-cli、redis-benchmark、redis-check-aof、redis-check-dump、redis-sentinel。 

 

至此,實際就可以到src目錄下啓動redis: 
3、後臺啓動redis服務

  1. ./redis-server &

如果沒有修改配置,會看到下面的狀態: 
這裏寫圖片描述 
然後啓動redis客戶端:

  1. ./redis-cli

這裏寫圖片描述 
出現上面的界面,說明成功進入redis,可以測試: 
這裏寫圖片描述


上邊是我們編譯完就運行redis,但是通常,我們在編譯之後會安裝redis,這樣就可以在所有路徑下用redis的命令了:

  1. make install

安裝後會將make編譯生成的可執行文件拷貝到/usr/local/bin目錄下,這樣無論在哪兒都可以執行redis-server來啓動redis服務了。 
註釋: 
▲redis的默認端口號是6379,(據redis的作者antirez的博文說,6379在是手機按鍵上MERZ對應的號碼,而MERZ取自意大利歌女Alessia Merz的名字。而MERZ長期以來被antirez及其朋友當作愚蠢的代名詞。) 
▲Redis有兩種存儲方式,默認是snapshot方式,實現方法是定時將內存的快照(snapshot)持久化到硬盤,這種方法缺點是持久化之 後如果出現crash則會丟失一段數據。因此在完美主義者的推動下作者增加了aof方式。aof即append only mode,在寫入內存數據的同時將操作命令保存到日誌文件。

以後臺守護形式運行Redis 
需要讀取配置文件方式啓動 
注意,默認複製過去的redis.conf文件的daemonize參數爲no,所以redis不會在後臺運行,我們可以修改redis.conf文件,這個文件就是解壓後的redis根目錄下

  1. daemonize yes
  2. redis-server /usr/redis-3.0.0/redis.conf

查看redis進程

  1. ps aux | grep redis

redis cluster集羣搭建

建立本機測試環境 
(要讓集羣正常工作至少需要3個主節點,在這裏我們要創建6個redis節點,其中三個爲主節點,三個爲從節點,對應的redis節點的ip和端口對應關係如下)

  1. 127.0.0.1:7000
  2. 127.0.0.1:7001
  3. 127.0.0.1:7002
  4. 127.0.0.1:7003
  5. 127.0.0.1:7004
  6. 127.0.0.1:7005

創建集羣需要的目錄

  1. mkdir -p /usr/local/cluster
  2. cd /usr/local/cluster
  3. mkdir 7000 7001 7002 7003 7004 7005

修改配置文件redis.conf

  1. cp /usr/local/redis3.0.0/redis.conf /usr/local/cluster
  2. vi redis.conf

修改配置文件中的下面選項

  1. port 7000
  2. daemonize yes
  3. cluster-enabled yes
  4. cluster-config-file nodes.conf
  5. cluster-node-timeout 5000
  6. appendonly yes

修改完redis.conf配置文件中的這些配置項之後把這個配置文件分別拷貝到7000/ 7001/ 7002/ 7003/ 7004/ 7005目錄下面

  1. cp /usr/local/cluster/redis.conf /usr/local/cluster/7000
  2. cp /usr/local/cluster/redis.conf /usr/local/cluster/7001
  3. cp /usr/local/cluster/redis.conf /usr/local/cluster/7002
  4. cp /usr/local/cluster/redis.conf /usr/local/cluster/7003
  5. cp /usr/local/cluster/redis.conf /usr/local/cluster/7004
  6. cp /usr/local/cluster/redis.conf /usr/local/cluster/7005

注意:拷貝完成之後要修改7001/7002/7003/7004/7005目錄下面redis.conf文件中的port參數,分別改爲對應的文件夾的名稱。 
分別啓動這6個redis實例

  1. cd /usr/local/cluster/7000
  2. redis-server redis.conf
  3. cd /usr/local/cluster/7001
  4. redis-server redis.conf
  5. cd /usr/local/cluster/7002
  6. redis-server redis.conf
  7. cd /usr/local/cluster/7003
  8. redis-server redis.conf
  9. cd /usr/local/cluster/7004
  10. redis-server redis.conf
  11. cd /usr/local/cluster/7005
  12. redis-server redis.conf

啓動之後使用命令查看redis的啓動情況ps aux|grep redis,如果出現下面的結果,說明啓動成功(注意:必須進入到每一個目錄下,再執行redis-server redis.conf)。 
這裏寫圖片描述

執行redis的創建集羣命令創建集羣

  1. cd /usr/local/redis3.0/src
  2. ./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:7003 127.0.0.1:7004 127.0.0.1:7005

執行上面的命令的時候會報錯,因爲是執行的ruby的腳本,需要ruby的環境。錯誤內容:/usr/bin/env: ruby: No such file or directory 
所以需要安裝ruby的環境,這裏推薦使用yum install ruby安裝

  1. yum install ruby

然後再執行剛纔的創建集羣命令,還會報錯,提示缺少rubygems組件,使用yum安裝 
錯誤內容: 
./redis-trib.rb:24:in `require’: no such file to load – rubygems (LoadError) 
from ./redis-trib.rb:24

  1. yum install rubygems

再次執行第6步的命令,還會報錯,提示不能加載redis,是因爲缺少redis和ruby的接口,使用gem 安裝 
錯誤內容:

/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in 
gem_original_require': no such file to load -- redis (LoadError) from 
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in
require’ 
from ./redis-trib.rb:25

  1. gem install redis

出現錯誤:

ERROR: Could not find a valid gem ‘redis’ (>= 0), here is why: 
Unable to download data from https://rubygems.org/ - Errno::ECONNRESET: Connection reset by peer - SSL_connect 
(https://rubygems.org/latest_specs.4.8.gz)

解決方案: 
可以求助萬能的淘寶鏡像站 https://ruby.taobao.org/

  1. gem sources -a https://ruby.taobao.org/
  2. #然後在執行:
  3. gem install redis

再次執行剛纔的創建集羣的命令,正常執行。 
這裏寫圖片描述 
至此redis集羣即搭建成功!

使用redis-cli命令進入集羣環境

  1. redis-cli -c -h 127.0.0.1 -p 7000
  2. #用 cluster nodes 可以查看節點信息,

redis-trib默認用前3個實例作爲Master,後3個作爲Slave。 

集羣重啓: 
目前redis-trib的功能還比較弱,需要重啓集羣的話先手動kill掉各個進程,刪除掉所有redis instance的aof、node-config、rdb文件(這樣,之前的數據會丟失),然後重新啓動就可以了,如果不刪除原實例的文件,重啓的時候會報錯。

  1. ps -ef | grep redis | awk '{print $2}' | xargs kill

故障轉移 
在高可用性方面,Redis可算是能夠”Auto”一把了!Redis Cluster重用了Sentinel的代碼邏輯,不需要單獨啓動一個Sentinel集羣,Redis Cluster本身就能自動進行Master選舉和Failover切換。

執行:set name “zhangsan”,發現name被存到了 7000 節點上了。 
下面我們故意kill掉7000結點,之後可以看到結點狀態變成了fail,而Slave 7003被選舉爲新的Master。 
嘗試查詢之前保存在7000上的Key “name”,可以看到7003頂替上來繼續提供服務,整個集羣沒有受到影響。 
性能檢測: 
redis 自己提供了一個性能測試工具redis-benchmark. redis-benchmark可以模擬N個機器,同時發送M個請求。 
用法:

  1. redis-benchmark [-h ] [-p ] [-c ] [-n <requests]> [-k ]
  2. -h <hostname> Server hostname (default 127.0.0.1)
  3. -p <port> Server port (default 6379)
  4. -s <socket> Server socket (overrides host and port)
  5. -c <clients> Number of parallel connections (default 50) 併發客戶端數
  6. -n <requests> Total number of requests (default 10000) 請求數量
  7. -d <size> Data size of SET/GET value in bytes (default 2) set 數據大小
  8. -k <boolean> 1=keep alive 0=reconnect (default 1) 是否採用keep alive模式
  9. -r <keyspacelen> Use random keys for SET/GET/INCR, random values for SADD
  10. Using this option the benchmark will get/set keys
  11. in the form mykey_rand:000000012456 instead of constant
  12. keys, the <keyspacelen> argument determines the max
  13. number of values for the random number. For instance
  14. if set to 10 only rand:000000000000 - rand:000000000009
  15. range will be allowed.
  16. -P <numreq> Pipeline <numreq> requests. Default 1 (no pipeline). 是否採用Pipeline模式請求,默認不採用
  17. -q Quiet. Just show query/sec values 僅僅顯示查詢時間
  18. --csv Output in CSV format 導出爲CSV格式
  19. -l Loop. Run the tests forever 循環測試
  20. -t <tests> Only run the comma separated list of tests. The test
  21. names are the same as the ones produced as output.
  22. -I Idle mode. Just open N idle connections and wait

經過測試,我的筆記本可以處理每秒3萬多個請求,性能還不錯。 

這裏寫圖片描述

發佈了27 篇原創文章 · 獲贊 2 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章