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/
真是場景的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主從複製: