您好,登錄后才能下訂單哦!
如何實現分布式緩存redis-cluster環境搭建及wishstack調用Jedis,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
redis集群三種方式
1、Redis官方提供的集群解決方案-Redis-cluster (剛發布差不多一年)
2、 Twemproxy ( twitter貢獻的) 使用時間比較長,比較成熟,但是有些功能不支持
3、豌豆尖針對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.conf
修改配置文件中的下面選項
port 7000
daemonize yes
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 5000
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實例:
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/
集群
CLUSTER INFO 打印集群的信息
CLUSTER NODES 列出集群當前已知的所有節點(node),以及這些節點的相關信息。
節點
CLUSTER MEET <ip> <port> 將 ip 和 port 所指定的節點添加到集群當中,讓它成為集群的一份子。
CLUSTER FORGET <node_id> 從集群中移除 node_id 指定的節點。
CLUSTER REPLICATE <node_id> 將當前節點設置為 node_id 指定的節點的從節點。
CLUSTER SAVECONFIG 將節點的配置文件保存到硬盤里面。
槽(slot)
CLUSTER ADDSLOTS <slot> [slot ...] 將一個或多個槽(slot)指派(assign)給當前節點。
CLUSTER DELSLOTS <slot> [slot ...] 移除一個或多個槽對當前節點的指派。
CLUSTER FLUSHSLOTS 移除指派給當前節點的所有槽,讓當前節點變成一個沒有指派任何槽的節點。
CLUSTER SETSLOT <slot> NODE <node_id> 將槽 slot 指派給 node_id 指定的節點,如果槽已經指派給另一個節點,那么先讓另一個節點刪除該槽>,然后再進行指派。
CLUSTER SETSLOT <slot> MIGRATING <node_id> 將本節點的槽 slot 遷移到 node_id 指定的節點中。
CLUSTER SETSLOT <slot> IMPORTING <node_id> 從 node_id 指定的節點中導入槽 slot 到本節點。
CLUSTER SETSLOT <slot> STABLE 取消對槽 slot 的導入(import)或者遷移(migrate)。
鍵
CLUSTER KEYSLOT <key> 計算鍵 key 應該被放置在哪個槽上。
CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的鍵值對數量。
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
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。