分佈式緩存redis-cluster環境搭建及wishstack調用Jedis

redis集羣三種方式
一、Redis官方提供的集羣解決方案-Redis-cluster (剛發佈差很少一年)
二、 Twemproxy ( twitter貢獻的) 使用時間比較長,比較成熟,可是有些功能不支持
三、豌豆尖針對Twemproxy 進行改良優化後的解決方案codis
 
更多分佈式緩存方案級別選型請參考博文:http://my.oschina.net/tantexian/blog/685620
 
redis應用場景:任何須要用到緩存的地方,解決本地緩存數據量過小問題。分佈式緩存能有效防止本地緩存失效數據庫雪崩現象。 解決分佈式應用中緩存不能共用(分佈式session保存)。雲計算中爲客戶提供緩存分佈式緩存redis服務(青雲、UnitedStack等廠商已經具備了)
 
接下來主要講解如何搭建Redis-cluster集羣環境及wishstack如何使用Jedis調用Redis集羣:
mkdir cluster-test
cd cluster-test
mkdir 7000 7001 7002 7003 7004 7005
 
 
yum install gcc wget -y
wget http://download.redis.io/releases/redis-3.0.5.tar.gz
 
tar xzvf redis-3.0.5.tar.gz
cd redis-3.0.5
make(直接make報錯則使用make MALLOC=libc)
 
yum install tcl -y
make test
make install
安裝完畢redis-*常規操做命令腳本即被copy到linux bin下面,能夠直接使用(固然也可使用編譯完的源碼包./redis-3.0.5/src/下面的腳本)
 
將redis源碼包的配置文件複製到7000/
 
cp redis-3.0.5/redis.conf 7000/
 

vi 7000/redis.confphp

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

port 7000node

daemonize yeslinux

cluster-enabled yesgit

cluster-config-file nodes-7000.confgithub

cluster-node-timeout 5000redis

appendonly yes數據庫

將修改好的7000/redis.conf文件複製到其餘文件夾(修改redis.conf 端口port爲對於的port)
cp 7000/redis.conf 7001/
 
cp 7000/redis.conf 7002/
 
cp 7000/redis.conf 7003/
 
cp 7000/redis.conf 7004/
 
cp 7000/redis.conf 7005/

注:7001文件夾下面的redis.conf將端口修改成7001,其餘依次類推。緩存

 

分別啓動6個redis實例:ruby

redis-server ./7000/redis.conf

redis-server ./7001/redis.conf

redis-server ./7002/redis.conf

redis-server ./7003/redis.conf

redis-server ./7004/redis.conf

redis-server ./7005/redis.conf

 

redis-server ./7000/redis.conf && redis-server ./7001/redis.conf && redis-server ./7002/redis.conf && redis-server ./7003/redis.conf && redis-server ./7004/redis.conf&& redis-server ./7005/redis.conf

 

 

 

使用ruby腳本redis-trib.rb執行redis的建立集羣命令建立集羣

 

#redis3.0.5源碼包中的redis-trib.rb的create子命令構建集羣

其中參數--replicas

則指定了Redis Cluster中的每一個Master節點配備幾個Slave節點

其中節點角色由順序決定,先master以後是slave

 

使用redis-trib.rb腳本必須有ruby環境,及redis的ruby接口。

yum -y install ruby ruby-devel rubygems rpm-build

gem install redis(網速不行則使用淘寶的gem源:gem sources --add https://ruby.taobao.org/ --remove https://rubygems.org/)

 

建立redis集羣:

./redis-3.0.5/src/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
./redis-3.0.5/src/redis-trib.rb create --replicas 1 172.31.2.32:7000 172.31.2.32:7001 172.31.2.32:7002 172.31.2.32:7003 172.31.2.32:7004 172.31.2.32:7005
 
 

./redis-3.0.5/src/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

這個命令在這裏用於建立一個新的集羣, 選項--replicas 1 表示咱們但願爲集羣中的每一個主節點建立一個從節點。

以後跟着的其餘參數則是這個集羣實例的地址列表,3個master3個slave

redis-trib 會打印出一份預想中的配置給你看, 若是你以爲沒問題的話, 就能夠輸入 yes , redis-trib 就會將這份配置應用到集羣當中,讓各個節點開始互相通信,最後能夠獲得以下信息:

[OK] All 16384 slots covered

這表示集羣中的 16384 個槽都有至少一個主節點在處理, 集羣運做正常。

 


 

測試redis-cluster:

 

 

 

 

slaveof配置項。

./redis-trib.rb create --replicas添加主從節點???

 

 

注:若報上述錯誤,則使用redis-cli -c -p 7000端口鏈接,使用dbsize命令,若是不爲零,則使用flushall命令清零。若是報是slave不能清零,

則找到該slave對應的master,執行上述操做。知道dbsize爲0.

redis-cli -c -p 7000 shutdown && redis-cli -c -p 7001 shutdown && redis-cli -c -p 7002 shutdown && redis-cli -c -p 7003 shutdown && redis-cli -c -p 7004 shutdown &&redis-cli -c -p 7005 shutdown

 

redis-server ./7000/redis.conf && redis-server ./7001/redis.conf && redis-server ./7002/redis.conf && redis-server ./7003/redis.conf && redis-server ./7004/redis.conf&& redis-server ./7005/redis.conf

 
./redis-3.0.5/src/redis-trib.rb create --replicas 1 172.31.2.32:7000 172.31.2.32:7001 172.31.2.32:7002 172.31.2.32:7003 172.31.2.32:7004 172.31.2.32:7005

 

 

注:del-node以前須要將該節點./redis-trib.rb reshard 127.0.0.1:7003到其餘節點,只有空的實例才能被刪除。

若是使用keys * 查詢到結果爲空,說明當前實例保存數據爲空,可以使用del-node命令移除。

 

 

 

 

將127.0.0.1::7000關掉:redis-cli -c -p 7000 shutdown

更多關於redis-cli操做請參考:http://blog.csdn.net/tantexian/article/details/49924873

 

接下來再172.31.2.33上面從新啓動redis-server來說該節點添加到上述建立好的172.31.2.32的redis集羣中。

第一步仍是跟上述步驟同樣,安裝redis基礎環境。

 

 

將172.31.2.33上面新跑的實例*:8000 及*:8001加入到集羣中來。

 

cluster集羣相關命令,更多redis相關命令見文檔:http://redis.readthedocs.org/en/latest/

 

  1. 集羣
  2. CLUSTER INFO 打印集羣的信息
  3. CLUSTER NODES 列出集羣當前已知的全部節點(node),以及這些節點的相關信息。
  4. 節點
  5. CLUSTER MEET <ip> <port> 將 ip 和 port 所指定的節點添加到集羣當中,讓它成爲集羣的一份子。
  6. CLUSTER FORGET <node_id> 從集羣中移除 node_id 指定的節點。
  7. CLUSTER REPLICATE <node_id> 將當前節點設置爲 node_id 指定的節點的從節點。
  8. CLUSTER SAVECONFIG 將節點的配置文件保存到硬盤裏面。
  9. 槽(slot)
  10. CLUSTER ADDSLOTS <slot> [slot ...] 將一個或多個槽(slot)指派(assign)給當前節點。
  11. CLUSTER DELSLOTS <slot> [slot ...] 移除一個或多個槽對當前節點的指派。
  12. CLUSTER FLUSHSLOTS 移除指派給當前節點的全部槽,讓當前節點變成一個沒有指派任何槽的節點。
  13. CLUSTER SETSLOT <slot> NODE <node_id> 將槽 slot 指派給 node_id 指定的節點,若是槽已經指派給另外一個節點,那麼先讓另外一個節點刪除該槽>,而後再進行指派。
  14. CLUSTER SETSLOT <slot> MIGRATING <node_id> 將本節點的槽 slot 遷移到 node_id 指定的節點中。
  15. CLUSTER SETSLOT <slot> IMPORTING <node_id> 從 node_id 指定的節點中導入槽 slot 到本節點。
  16. CLUSTER SETSLOT <slot> STABLE 取消對槽 slot 的導入(import)或者遷移(migrate)。
  17. CLUSTER KEYSLOT <key> 計算鍵 key 應該被放置在哪一個槽上。
  18. CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的鍵值對數量。
  19. CLUSTER GETKEYSINSLOT <slot> <count> 返回 count 個 slot 槽中的鍵。

 

 

真是場景的redis集羣環境部署:

建議至少三臺機器:(其實redis.server服務時PING-PONG無中心架構,且,能夠在同一臺機器上面啓動多個master及slave)

node1:172.31.2.31

node2:172.31.2.32

node3:172.31.2.33

 

三組一主兩從設計:

172.31.2.31:7000(主) 172.31.2.32:7000(從) 172.31.2.33:7000(從) 

172.31.2.32:7001(主) 172.31.2.31:7001(從) 172.31.2.33:7001(從) 

172.31.2.33:7002(主) 172.31.2.31:7002(從) 172.31.2.32:7002(從) 

 

這樣就達到了比較高的穩定性。

 

 

 

 

jedis使用:

https://github.com/xetorthio/jedis

 

 

 

 

 

 

關於redis性能測試:

http://www.runoob.com/redis/redis-benchmarks.html

 

redis主從複製:

http://www.cnblogs.com/zhaoguihua/p/redis-004.html

相關文章
相關標籤/搜索