在 Windows 上測試 Redis Cluster的集群填坑筆記

redis 集群實現的原理請參考http://www.tuicool.com/articles/VvIZje
集群環境至少需要3個節點。推薦使用6個節點配置,即3個主節點,3個從節點。
新建6個文件夾 分別是 7000/7001/7002/7003/7004/7005
redis.windows.conf 復制一份
然后修改配置文件中的下面選項?
  • 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)
分別放到 上面的5個文件夾里面
(注意:拷貝完成之后要修改 7001/7002/7003/7004/7005 目錄下面 redis.conf 文件中的 port 參數,分別改為對應的文件夾的名稱)
分別啟動這 6 個 redis 實例?
redis-server.exe?H:\Tools\cluster\7000\redis.7000.conf
redis-server.exe?H:\Tools\cluster\7001\redis.7001.conf
redis-server.exe?H:\Tools\cluster\7002\redis.7002.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.


測試一下

從 port 7000 set 一個 值 并且設定過期時間為10秒

然后從 port 7001 里面get出來。
?
沒問題!

?
最后:建議個人玩玩就得了 生產上還是別再windows上搞redis。


?

轉載于:https://www.cnblogs.com/yudongdong/p/6440016.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372875.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372875.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372875.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

不成為編程天才的5種貢獻方式

安迪萊斯特(Andy Lester)早在三月發布了原始指南,其中介紹了14種不成為編程天才或搖滾明星的貢獻開源的方法 ,我真的很喜歡這個想法。 這就是為什么我決定稍微采納一下這篇文章,并告訴您如何以及可以做什么來支持自己喜…

mysql數據庫設計與應用答案智慧樹_智慧樹_MySQL數據庫設計與應用_完整免費答案...

單位工程施工組織設計的技術經濟指標體系包括有()。A.工期指標B.勞動指標C.臺班利用率D.成本降低大跨徑橋梁采用()將會取得良好的技術經濟效益。A.橫移法施工B.頂推法施工C.轉體法施工D&#xf…

拓撲排序最長鏈-P3119 [USACO15JAN]草鑒定Grass Cownoisseur

https://www.luogu.org/problem/show?pid3119 本來我是來練習tarjan的,結果tarjan部分直接copy了,反而拓撲排序部分想了好久; 這道題SZB大神兩次就AC; 但我等到AC,寫好題解就只能洗洗睡了; 唉~ 差距怎…

談談父類和子類的隔離性

以前寫代碼知道要給類外設置訪問接口, 例如下例: 1 class Money2 {3 public:4 Money(int money) : m_curValue(money){}5 6 void store(int money) { m_curValue money;}7 void spent(int money){ m_curValue - money;}8 private:9 int m_curValue…

用于數據庫測試的DBUnit,Spring和注釋

如果您曾經嘗試用Java編寫數據庫測試&#xff0c;則可能會碰到DBUnit 。 DBUnit允許您設置和拆除數據庫&#xff0c;以便它包含可針對其編寫測試的一致行。 通常&#xff0c;您可以通過編寫一個簡單的XML文檔來指定要DBUnit插入的行&#xff0c;例如&#xff1a; <?xml ve…

阿里云centos 7.6安裝mysql_阿里云Centos7上安裝MySQL教程

1 基本安裝過程1.查看系統是否安裝了mysql軟件# rpm -qa|grep -i mysql2.將已經安裝過的軟件卸載掉。注意&#xff1a;這樣的卸載是不徹底&#xff0c;不過這里夠用了# yum remove 軟件名3.CentOS 7的yum源中默認是沒有mysql的。所以&#xff0c;為了解決這個問題我們首先下載安…

Struts2中數據封裝方式

一、通過ActionContext類獲取 public class ActionContextDemo extends ActionSupport { Override public String execute() throws Exception { //獲取ActionContext對象 ActionContext context ActionContext.getContext(); //調用getParameters…

第五章、搭建S3C6410開發板的測試環境

通過對本章的學習&#xff0c;我對s3c6410開發板的測試環境有了一定的認識&#xff0c;并掌握了如下的知識點&#xff1a;一、對于s3c6410這款開發板&#xff0c;它是一款低功耗、高性價比的處理器&#xff0c;它是基于ARM11的內核。二、不同開發板的區別主要在燒錄嵌入式系統的…

IBM JVM調整– gencon GC策略

本文將向您詳細介紹從Java虛擬機&#xff08;例如HotSpot或JRockit&#xff09;遷移到IBM JVM時重要的Java堆空間調整注意事項。 該調整建議基于我為我的一個IT客戶端執行的最新故障排除和調整任務。 IBM JVM概述 正如您可能從其他文章中看到的那樣&#xff0c;IBM JVM在某些方…

mysql主從配置錯誤_mysql主從配置失敗,主從通訊失敗

配置mysql主從的時候&#xff0c;檢查slave狀態&#xff0c;發現報錯信息&#xff0c;Error The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement on query.mysql> show slave status\G*************************** 1. r…

echarts如何顯示在頁面上

echarts如何顯示在頁面上 1.引入echarts的相關.js文件 <script src"js/echarts.min.js"></script> 2.新建一個div&#xff0c;style自己定&#xff0c;但必須要有width和height <div id"history_state" style"width: 400px;height: 20…

懶惰的JSF Primefaces數據表分頁–第2部分

頁面代碼非常簡單&#xff0c;沒有復雜性。 檢查“ index.xhtml”代碼&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www…

二分匹配之最大權值匹配算法---KM模板

百科&#xff1a;http://baike.baidu.com/link?urlvbM3H4XmfrsWfP-epdlR2sVKSNzOq4hXnWDqm5uo8fd7VWsF2SmhDV35XyVUDvVjvrtf42RUITJuNCHn-7_x6K 大神總結&#xff1a;http://www.cnblogs.com/skyming/archive/2012/02/18/2356919.html 代碼&#xff1a; 1 #include<stdio.h…

java實現報表_用存儲過程和 JAVA 寫報表數據源有什么弊端?

用存儲過程和 JAVA 寫報表數據源有什么弊端&#xff1f;跟著小編一起來一看一下吧&#xff01;我們在報表開發中經常會使用存儲過程準備數據&#xff0c;存儲過程支持分步計算&#xff0c;可以實現非常復雜的計算邏輯&#xff0c;為報表開發帶來便利。所以&#xff0c;報表開發…

SpringMVC學習筆記整理

SpringMVC學習筆記 以下是我整理的SpringMVC學習筆記&#xff1a; 導入jar包 一&#xff1a;springmvc工作流程。 ①. servlet容器初始化一個request請求 ②. DispatcherServlet分發器負責發送請求到映射器. ③. despatcherServlet把請求交給處理器映射Mapping&…

Java EE重新審視設計模式:異步

盡管您可能找不到作為設計模式列出的異步方法調用&#xff0c;但我還是值得一提。 因此&#xff0c;這是我的JavaEE Revisits設計模式系列的最后一篇文章。 異步方法調用只不過是多線程。 基本上&#xff0c;它是指將在單獨的線程中運行的方法調用&#xff0c;因此主&#xff0…

am335x watchdog

am335x watchdog 內核文檔kernel/Documentation/watchdog Qtaplex:~/kernel/7109/linux-3.2.0/Documentation/watchdog$ ll total 88 drwxrwxr-x 3 Qt Qt 4096 Jun 8 15:11 ./ drwxrwxr-x 94 Qt Qt 12288 Apr 28 13:09 ../ -rwxrwxr-x 1 Qt Qt 576 Nov 20 2013 00-INDEX -rwxrw…

springboot2 使用hikaridatasource 并測試_基于Spring Boot 2.x的后端管理網站腳手,源碼免費分享...

基于Spring Boot 2.x 的 Material Design 的后端管理網站腳手架 &#xff1a;提供權限認證 用戶管理 菜單管理 操作日志 等常用功能去繁就簡 重新出發基于Spring Boot 集成一些常用的功能&#xff0c;你只需要基于它做些簡單的修改即可。功能列表&#xff1a;權限認證權限管理用…

測試驅動開發–雙贏策略

敏捷從業人員談論測試驅動開發 &#xff08;TDD&#xff09;&#xff0c;所以許多關心代碼質量和可操作性的開發人員也是如此。 我曾幾何時&#xff0c;不久前設法閱讀了有關TDD的文章。 據我了解&#xff0c;TDD的關鍵是&#xff1a; 編寫測試&#xff0c;但失敗 代碼&#x…

設計模式學習(三)——裝飾器模式

前言 距離上一次正兒八經地寫隨筆已經有一段時間了&#xff0c;雖然2月10號有一篇關于泛型的小記&#xff0c;但是其實只是簡單地將自己的學習代碼貼上來&#xff0c;為了方便后續使用時查閱&#xff0c;并沒有多少文字和理解感悟。之所以在今天覺得有必要寫點東西&#xff0c;…