在 Windows 上测试 Redis Cluster的集群填坑笔记
生活随笔
收集整理的這篇文章主要介紹了
在 Windows 上测试 Redis Cluster的集群填坑笔记
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
redis 集群實現的原理請參考http://www.tuicool.com/articles/VvIZje 集群環境至少需要3個節點。推薦使用6個節點配置,即3個主節點,3個從節點。 新建6個文件夾 分別是 7000/7001/7002/7003/7004/7005 將redis.windows.conf 復制一份 然后修改配置文件中的下面選項?
redis-server.exe?H:\Tools\cluster\7003\redis.7003.conf
redis-server.exe?H:\Tools\cluster\7004\redis.7004.conf
redis-server.exe?H:\Tools\cluster\7005\redis.7005.conf
啟動后會看到以下日志信息,提示Node.conf不存在,并且每個節點創建了一個NodeID 最后一步 組建集群配置 ? ?源碼src文件下提供了一個叫做redis-trib.rb的腳本文件,是一個Ruby腳本用于創建集群,檢測及重新分片等 . 但你得安裝ruby環境。 然后安裝redis 的 ruby 函式庫 ? 運行命令: ruby?H:\Tools\cluster\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 會要求更改?nodes.conf ,就輸入?yes?就可以了。 輸入yes后 我滿懷期待等到成功的消息。誰知道給我一個無限的waiting?
H:\Tools\cluster>ruby H:\Tools\cluster\redis.trib.rb create --replicas 0 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 >>> Creating cluster Connecting to node 127.0.0.1:7001: OK Connecting to node 127.0.0.1:7002: OK Connecting to node 127.0.0.1:7003: OK Connecting to node 127.0.0.1:7004: OK Connecting to node 127.0.0.1:7005: OK >>> Performing hash slots allocation on 5 nodes... Using 5 masters: 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 M: 6c5c8b20e7f051e19a41e96a1d0b37cc79abf647 127.0.0.1:7001slots:0-3276 (3277 slots) master M: 6c5c8b20e7f051e19a41e96a1d0b37cc79abf647 127.0.0.1:7002slots:3277-6553 (3277 slots) master M: 6c5c8b20e7f051e19a41e96a1d0b37cc79abf647 127.0.0.1:7003slots:6554-9829 (3276 slots) master M: 6c5c8b20e7f051e19a41e96a1d0b37cc79abf647 127.0.0.1:7004slots:9830-13106 (3277 slots) master M: 6c5c8b20e7f051e19a41e96a1d0b37cc79abf647 127.0.0.1:7005slots:13107-16383 (3277 slots) master Can I set the above configuration? (type 'yes' to accept): yes >>> Nodes configuration updated >>> Assign a different config epoch to each node >>> Sending CLUSTER MEET messages to join the cluster Waiting for the cluster to join..........................................................................................................................................................
NND,一時摸不著頭腦,網上一查了幾個方案 都試了還是不行。 google查了也沒找到相關信息。 就在stackoverflow上發帖求助老外。http://stackoverflow.com/questions/37193338/redis-cluster-error 還是沒人鳥我啊。。可能是我英語太差了 。 因為是用ruby的代碼去配置cluster的。 接下來就調試ruby代碼 看下到底是哪里出了問題才導致block在waiting的。 要修改一下redis.trib.rb文件才可以調試,因為參數不是通過COMMAND的ARGV傳過去的。 調試的時候運行到下面的代碼的時候報錯了 錯誤信息為:ERR Slot 6387 is already busy ? 解決方案是改成下面這樣 ?(http://stackoverflow.com/questions/34230131/err-slot-xxx-is-already-busy-rediscommanderror) ok 解決了一個問題了。 F5運行 不會報錯了 ,但TMD還是會block在waiting。此處省略一萬頭馬。 分析了一下。這里會7001,7002,7003,7004,7005 都會發送給7000?meet這個命令。 ? 然后會收到簽名后才算是分配成功 發現? signatures 里面全是7000的回執簽名。 不對啊。應該接收到的是 7001——7005的才對啊。 除非都發給自己啦? 仔細一看,7000-7005的nodeId都是一樣。不出錯才怪! 在回過頭看下之前啟動redis的命令,才發現創建的NodeID都是一樣的,一開始就錯了!!! 配置修改成如下:
port?7005 appendonly?yes appendfilename?"appendonly.7005.aof" cluster-enabled?yes cluster-config-file?nodes.7005.conf cluster-node-timeout?15000 cluster-slave-validity-factor?10 cluster-migration-barrier?1 cluster-require-full-coverage?yes
然后重新來過 出現以下結果說明配置好了:
>>>?Creating?cluster Connecting?to?node?127.0.0.1:7000:?OK Connecting?to?node?127.0.0.1:7001:?OK Connecting?to?node?127.0.0.1:7002:?OK Connecting?to?node?127.0.0.1:7003:?OK Connecting?to?node?127.0.0.1:7004:?OK Connecting?to?node?127.0.0.1:7005:?OK >>>?Performing?hash?slots?allocation?on?6?nodes... Using?3?masters: 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 Adding?replica?127.0.0.1:7003?to?127.0.0.1:7000 Adding?replica?127.0.0.1:7004?to?127.0.0.1:7001 Adding?replica?127.0.0.1:7005?to?127.0.0.1:7002 M:?fa810d10bca15ffc480953329c12da988fc3f52a?127.0.0.1:7000 slots:0-5460?(5461?slots)?master M:?65e347cbe71aeae7b983ce85cf14eec1f0c1e0b7?127.0.0.1:7001 slots:5461-10922?(5462?slots)?master M:?17739ba52d2c171db5c960962e4ec8845c6e63b0?127.0.0.1:7002 slots:10923-16383?(5461?slots)?master S:?d7c9a9c3982dde2f0cc551f227e023b5746373b5?127.0.0.1:7003 replicates?fa810d10bca15ffc480953329c12da988fc3f52a S:?fbac6089f7889b68726dd152daaf71834a97dd6e?127.0.0.1:7004 replicates?65e347cbe71aeae7b983ce85cf14eec1f0c1e0b7 S:?76867e63d75e1ff00dc4a5f60a91ea4634a083aa?127.0.0.1:7005 replicates?17739ba52d2c171db5c960962e4ec8845c6e63b0 >>>?Nodes?configuration?updated >>>?Assign?a?different?config?epoch?to?each?node >>>?Sending?CLUSTER?MEET?messages?to?join?the?cluster Waiting?for?the?cluster?to?join >>>?Performing?Cluster?Check?(using?node?127.0.0.1:7000) M:?fa810d10bca15ffc480953329c12da988fc3f52a?127.0.0.1:7000 slots:0-5460?(5461?slots)?master M:?65e347cbe71aeae7b983ce85cf14eec1f0c1e0b7?127.0.0.1:7001 slots:5461-10922?(5462?slots)?master M:?17739ba52d2c171db5c960962e4ec8845c6e63b0?127.0.0.1:7002 slots:10923-16383?(5461?slots)?master S:?d7c9a9c3982dde2f0cc551f227e023b5746373b5?127.0.0.1:7003 replicates?fa810d10bca15ffc480953329c12da988fc3f52a S:?fbac6089f7889b68726dd152daaf71834a97dd6e?127.0.0.1:7004 replicates?65e347cbe71aeae7b983ce85cf14eec1f0c1e0b7 S:?76867e63d75e1ff00dc4a5f60a91ea4634a083aa?127.0.0.1:7005 replicates?17739ba52d2c171db5c960962e4ec8845c6e63b0 [OK]?All?nodes?agree?about?slots?configuration. >>>?Check?for?open?slots... >>>?Check?slots?coverage... [OK]?All?16384?slots?covered.
? 最后:建議個人玩玩就得了 生產上還是別再windows上搞redis。
- port 7000 (redis 端口號)
- daemonize yes (是否以后臺daemon方式運行 windows上不支持,可以忽略)
- cluster-enabled yes (開啟集群)
- cluster-config-file nodes.conf (集群模式下,每個redis節點生成一個自己的集群配置文件,這個文件不需要人工修改,由redis自己維護)
- cluster-node-timeout 5000 (集群模式時,當前節點在與其他節點保活探測時,多久沒有響應時認為其他節點處于fail狀態,上面是5秒)
- appendonly yes (是否開啟appendonlylog,開啟的話每次寫操作會記一條log,這會提高數據抗風險能力,但影響效率。)
- cluster-require-full-coverage?yes (默認為Yes,丟失一定比例Key后(可能Node無法連接或者掛掉),集群停止接受寫操作 no:允許某些slot沒有active節點的時候其余slot還能用。就是其中1個實例掛掉,不會導致整個redis cluster都不可用了)
- cluster-slave-validity-factor?10 (控制從節點FailOver相關的 設置設為0,從節點會一直嘗試啟動FailOver.設為正數,失聯大于一定時間(factor*節點TimeOut),不再進行FailOver)
redis-server.exe?H:\Tools\cluster\7003\redis.7003.conf
redis-server.exe?H:\Tools\cluster\7004\redis.7004.conf
redis-server.exe?H:\Tools\cluster\7005\redis.7005.conf
啟動后會看到以下日志信息,提示Node.conf不存在,并且每個節點創建了一個NodeID 最后一步 組建集群配置 ? ?源碼src文件下提供了一個叫做redis-trib.rb的腳本文件,是一個Ruby腳本用于創建集群,檢測及重新分片等 . 但你得安裝ruby環境。 然后安裝redis 的 ruby 函式庫 ? 運行命令: ruby?H:\Tools\cluster\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 會要求更改?nodes.conf ,就輸入?yes?就可以了。 輸入yes后 我滿懷期待等到成功的消息。誰知道給我一個無限的waiting?
H:\Tools\cluster>ruby H:\Tools\cluster\redis.trib.rb create --replicas 0 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 >>> Creating cluster Connecting to node 127.0.0.1:7001: OK Connecting to node 127.0.0.1:7002: OK Connecting to node 127.0.0.1:7003: OK Connecting to node 127.0.0.1:7004: OK Connecting to node 127.0.0.1:7005: OK >>> Performing hash slots allocation on 5 nodes... Using 5 masters: 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 M: 6c5c8b20e7f051e19a41e96a1d0b37cc79abf647 127.0.0.1:7001slots:0-3276 (3277 slots) master M: 6c5c8b20e7f051e19a41e96a1d0b37cc79abf647 127.0.0.1:7002slots:3277-6553 (3277 slots) master M: 6c5c8b20e7f051e19a41e96a1d0b37cc79abf647 127.0.0.1:7003slots:6554-9829 (3276 slots) master M: 6c5c8b20e7f051e19a41e96a1d0b37cc79abf647 127.0.0.1:7004slots:9830-13106 (3277 slots) master M: 6c5c8b20e7f051e19a41e96a1d0b37cc79abf647 127.0.0.1:7005slots:13107-16383 (3277 slots) master Can I set the above configuration? (type 'yes' to accept): yes >>> Nodes configuration updated >>> Assign a different config epoch to each node >>> Sending CLUSTER MEET messages to join the cluster Waiting for the cluster to join..........................................................................................................................................................
NND,一時摸不著頭腦,網上一查了幾個方案 都試了還是不行。 google查了也沒找到相關信息。 就在stackoverflow上發帖求助老外。http://stackoverflow.com/questions/37193338/redis-cluster-error 還是沒人鳥我啊。。可能是我英語太差了 。 因為是用ruby的代碼去配置cluster的。 接下來就調試ruby代碼 看下到底是哪里出了問題才導致block在waiting的。 要修改一下redis.trib.rb文件才可以調試,因為參數不是通過COMMAND的ARGV傳過去的。 調試的時候運行到下面的代碼的時候報錯了 錯誤信息為:ERR Slot 6387 is already busy ? 解決方案是改成下面這樣 ?(http://stackoverflow.com/questions/34230131/err-slot-xxx-is-already-busy-rediscommanderror) ok 解決了一個問題了。 F5運行 不會報錯了 ,但TMD還是會block在waiting。此處省略一萬頭馬。 分析了一下。這里會7001,7002,7003,7004,7005 都會發送給7000?meet這個命令。 ? 然后會收到簽名后才算是分配成功 發現? signatures 里面全是7000的回執簽名。 不對啊。應該接收到的是 7001——7005的才對啊。 除非都發給自己啦? 仔細一看,7000-7005的nodeId都是一樣。不出錯才怪! 在回過頭看下之前啟動redis的命令,才發現創建的NodeID都是一樣的,一開始就錯了!!! 配置修改成如下:
port?7005 appendonly?yes appendfilename?"appendonly.7005.aof" cluster-enabled?yes cluster-config-file?nodes.7005.conf cluster-node-timeout?15000 cluster-slave-validity-factor?10 cluster-migration-barrier?1 cluster-require-full-coverage?yes
然后重新來過 出現以下結果說明配置好了:
>>>?Creating?cluster Connecting?to?node?127.0.0.1:7000:?OK Connecting?to?node?127.0.0.1:7001:?OK Connecting?to?node?127.0.0.1:7002:?OK Connecting?to?node?127.0.0.1:7003:?OK Connecting?to?node?127.0.0.1:7004:?OK Connecting?to?node?127.0.0.1:7005:?OK >>>?Performing?hash?slots?allocation?on?6?nodes... Using?3?masters: 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 Adding?replica?127.0.0.1:7003?to?127.0.0.1:7000 Adding?replica?127.0.0.1:7004?to?127.0.0.1:7001 Adding?replica?127.0.0.1:7005?to?127.0.0.1:7002 M:?fa810d10bca15ffc480953329c12da988fc3f52a?127.0.0.1:7000 slots:0-5460?(5461?slots)?master M:?65e347cbe71aeae7b983ce85cf14eec1f0c1e0b7?127.0.0.1:7001 slots:5461-10922?(5462?slots)?master M:?17739ba52d2c171db5c960962e4ec8845c6e63b0?127.0.0.1:7002 slots:10923-16383?(5461?slots)?master S:?d7c9a9c3982dde2f0cc551f227e023b5746373b5?127.0.0.1:7003 replicates?fa810d10bca15ffc480953329c12da988fc3f52a S:?fbac6089f7889b68726dd152daaf71834a97dd6e?127.0.0.1:7004 replicates?65e347cbe71aeae7b983ce85cf14eec1f0c1e0b7 S:?76867e63d75e1ff00dc4a5f60a91ea4634a083aa?127.0.0.1:7005 replicates?17739ba52d2c171db5c960962e4ec8845c6e63b0 >>>?Nodes?configuration?updated >>>?Assign?a?different?config?epoch?to?each?node >>>?Sending?CLUSTER?MEET?messages?to?join?the?cluster Waiting?for?the?cluster?to?join >>>?Performing?Cluster?Check?(using?node?127.0.0.1:7000) M:?fa810d10bca15ffc480953329c12da988fc3f52a?127.0.0.1:7000 slots:0-5460?(5461?slots)?master M:?65e347cbe71aeae7b983ce85cf14eec1f0c1e0b7?127.0.0.1:7001 slots:5461-10922?(5462?slots)?master M:?17739ba52d2c171db5c960962e4ec8845c6e63b0?127.0.0.1:7002 slots:10923-16383?(5461?slots)?master S:?d7c9a9c3982dde2f0cc551f227e023b5746373b5?127.0.0.1:7003 replicates?fa810d10bca15ffc480953329c12da988fc3f52a S:?fbac6089f7889b68726dd152daaf71834a97dd6e?127.0.0.1:7004 replicates?65e347cbe71aeae7b983ce85cf14eec1f0c1e0b7 S:?76867e63d75e1ff00dc4a5f60a91ea4634a083aa?127.0.0.1:7005 replicates?17739ba52d2c171db5c960962e4ec8845c6e63b0 [OK]?All?nodes?agree?about?slots?configuration. >>>?Check?for?open?slots... >>>?Check?slots?coverage... [OK]?All?16384?slots?covered.
測試一下
從 port 7000 set 一個 值 并且設定過期時間為10秒
然后從 port 7001 里面get出來。 ? 沒問題!? 最后:建議個人玩玩就得了 生產上還是別再windows上搞redis。
?
轉載于:https://www.cnblogs.com/yudongdong/p/6440016.html
總結
以上是生活随笔為你收集整理的在 Windows 上测试 Redis Cluster的集群填坑笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安装openstack时遇到的错误
- 下一篇: 拓扑排序最长链-P3119 [USACO