在 Windows 下配置 Redis 集群

本文只涉及 Redis 在 Windows 中的 集群搭建集群維護

  • 如需配置 Redis(不含集群),請看這里
  • 如需使用 C#(StackExchange.Redis)進行開發(fā)蒋川,請看這里

本文涉及:集群搭建势誊、集群維護

如需用 C#(StackExchange.Redis)訪問集群唆貌,點此查看滑潘。

Windows 搭建 Redis 集群環(huán)境如下:

  • Windows 7 Pro x64
  • Redis v3.2.100 x64(Windows 版,默認端口:6379锨咙,點擊下載
  • Ruby Installer v2.3.3 x64(Windows 版语卤,點擊下載

問:為什么要 Ruby 環(huán)境? 答:憋問酪刀,必須的4舛妗!骂倘!


集群搭建

首先眼滤,要明確:節(jié)點數(shù)量(最少要 6 個,那就以 6 個節(jié)點為例)历涝。

6個節(jié)點怎么分配诅需?3 主 3 從(3 Master — 3 Slave),以端口號為例:

主(Master) 從(Slave) 備注
7100 7101 末位0為主荧库,其它數(shù)字為從
7200 7201 末位0為主堰塌,其它數(shù)字為從
7300 7301 末位0為主,其它數(shù)字為從

總體步驟:

  1. 安裝相應的程序(Redis 和 Ruby 都默認安裝在 C 盤)
  2. 新建 6 個配置文件夾和相關的配置文件(以 D 盤新建文件夾為例)
  3. 進入命令行(運行 - cmd分衫,最好開兩個命令行窗口场刑,方便復制)
  4. 用 Redis 命令(redis-server)行安裝 6 個 Redis 服務,并啟動
  5. 用 Ruby 命令(gem)安裝 Redis 的相關組件(需要下載丐箩,看網(wǎng)速咯)
  6. redis-trib.rb 創(chuàng)建集群(注意 6 個 Redis 的順序)
  7. 創(chuàng)建 Redis 集群完畢

第一步 安裝下載的 Redis 和 RubyInstaller摇邦。

以下以默認安裝路徑為例。

在安裝 Redis 的時候屎勘,下面這個界面最好選上施籍,方便隨時執(zhí)行 Redis 的相關命令。

在安裝 RubyInstaller 的時候概漱,下面這個界面最好全選丑慎。可安裝相應的支持環(huán)境,將 Ruby 的命令添加到系統(tǒng)的執(zhí)行路徑里面去(方便隨時執(zhí)行 gem)竿裂,還有就是關聯(lián)相應的 Ruby 后綴文件玉吁。

安裝好后的路徑如下:

Redis 安裝路徑
Ruby 安裝路徑

第二步 新建 6 個 Redis 的文件夾和相應的配置文件(以端口命名文件夾)。

在 Redis 的安裝目錄腻异,新建一個 cluster 的文件夾进副,里面新建 6 個子文件夾,以端口為名悔常,如下圖所示:

Redis 集群配置文件夾

最好在 Redis 的安裝目錄內(nèi)影斑,新建集群的文件夾,以免碰到奇奇怪怪的問題机打。

接下來矫户,在每個文件夾內(nèi),新建一個后綴名為 conf 的配置文件:

配置文件路徑
# // 配置文件內(nèi)容(以 redis.7100.conf 為例)

port 7100

appendonly yes
appendfilename "appendonly.7100.aof"

# // 如果要設置最大內(nèi)存空間残邀,可添加如下兩句
maxmemory 200mb
maxmemory-policy allkeys-lru

cluster-enabled yes
cluster-config-file nodes-7100.conf
cluster-node-timeout 15000
cluster-slave-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes

新建完畢的目錄結(jié)構(gòu)皆辽,如下圖所示:

6 個配置文件的目錄結(jié)構(gòu)

可將各配置文件中的相同配置項,提取到同一個文件中芥挣,形成全局配置驱闷,詳細方法看這里

第三步 打開命令行(運行 - cmd 即可)九秀。

如果在配置完集群后遗嗽,需要調(diào)整集群的話,建議打開兩個命令行窗口鼓蜒,這樣方便復制。

第四步 用 Redis 命令(redis-server)安裝 6 個 Redis 服務征字,并啟動

在命令行內(nèi)都弹,進入 C 盤的 Redis 安裝目錄。

安裝第一個 Redis 服務匙姜,輸入如下安裝命令畅厢,然后回車(可能會彈出用戶帳戶控制,直接選 “是” 就行了):

// 安裝命令
redis-server --service-install cluster/7100/redis.7100.conf --service-name redis7100

// 卸載命令
redis-server --service-uninstall --service-name redis7100

看到下面這界面氮昧,第一個服務就安裝成功了:

redis7100 安裝成功

安裝成功之后框杜,打開系統(tǒng)的服務(運行 - services.msc),可以看到安裝了 redis7100 這個服務:

接下來袖肥,就啟動該服務咪辱,輸入如下啟動命令(也可以直接在服務里面,右鍵椎组,啟動它):

// 啟動命令
redis-server --service-start --service-name redis7100

// 停止命令
redis-server --service-stop --service-name redis7100

至此油狂,Redis7100 就安裝成功并且啟動了,如下圖所示:

Redis7100 安裝并啟動成功

然后,對 7101专筷、7200弱贼、7201、7300磷蛹、7301 分別進行安裝吮旅,并且啟動它們。

全部完成后味咳,在系統(tǒng)的服務里面鸟辅,可以看到下圖的內(nèi)容:

同時,在 Redis 的安裝目錄內(nèi)莺葫,會出現(xiàn)多個文件匪凉,如下所示:

至此,6 個 Redis 服務已經(jīng)全部安裝并且啟動完畢捺檬。

第五步 用 Ruby 命令(gem)安裝 Redis 的相關組件再层。

回到命令行窗口,輸入以下命令:

gem install redis

執(zhí)行完后堡纬,回車(此時聂受,耐心等一下,要聯(lián)網(wǎng)下載組件)烤镐,直到看到以下內(nèi)容:

gem 安裝結(jié)果

gem 安裝指令成功蛋济,接下來,就是創(chuàng)建集群了炮叶。

第六步 用 redis-trib.rb 創(chuàng)建集群碗旅。

redis-trib.rb 可以從 Windows 版的 Redis 處下載(原文地址下載地址)镜悉。

下載完后祟辟,將 rb 文件復制到 Redis 的安裝目錄內(nèi),然后回到命令行窗口侣肄,輸入以下命令:

注意:IP 地址的前 3 個為主(Master)旧困,后 3 個為從(Slave)。當然稼锅,也可以在創(chuàng)建好之后手動重新調(diào)配吼具。

默認的位置對應關系:

主(Master) 從(Slave)
第 1 個 IP 第 4 個 IP
第 2 個 IP 第 5 個 IP
第 3 個 IP 第 6 個 IP
redis-trib.rb create --replicas 1 127.0.0.1:7100 127.0.0.1:7200 127.0.0.1:7300 127.0.0.1:7101 127.0.0.1:7201 127.0.0.1:7301

輸入后回車,會看到如下提示:

主(Master)- 從(Slave)對應關系

輸入 yes 回車后矩距,會自動配置好主從關系拗盒,如下圖所示:

集群配置完畢

第七步 至此,集群配置完畢剩晴。
如需用 C#(StackExchange.Redis)訪問集群锣咒,點此查看侵状。

說明: 在上圖中,那些 40 位的編碼毅整,就是每個 Redis 節(jié)點的 ID趣兄,在調(diào)整集群時,經(jīng)常會用到悼嫉。


集群維護

打開命令行窗口艇潭,進入 Redis 安裝目錄,用客戶端(redis-cli)即可查看集群情況戏蔑,命令如下所示:

// 查看集群內(nèi)所有的節(jié)點以及其關系
redis-cli -c -h 127.0.0.1 -p 7100 cluster nodes
集群關系

也可以用客戶端(redis-cli)登錄到集群內(nèi)任一節(jié)點蹋凝,輸入集群的命令,來查看集群的信息总棵。

// 客戶端登錄集群命令(參數(shù)順序無所謂鳍寂,-h:ip地址 | -p:端口 | -c:集群標識)
redis-cli -c -p 7200 -h 127.0.0.1

// 客戶端退出登錄
quit
登錄成功界面

登錄之后,可以進行每個節(jié)點的操作(具體操作內(nèi)容參考這里)情龄,如果只查看集群的信息迄汛,輸入 cluster info,則可以看到:

cluster info

集群特有的命令有(如果沒有登錄骤视,那么鞍爱,每次執(zhí)行集群的命令時候,都要輸入前面的登錄指令):

cluster info   // 集群總攬
cluster nodes   // 列出集群當前已知的所有節(jié)點(node)专酗,以及這些節(jié)點的相關信息

cluster meet <ip> <port>   // 將指定的節(jié)點(ip:port)添加到集群中睹逃,讓它成為集群的一員
cluster forget <node_id>   // 從集群中移除 node_id 節(jié)點
cluster replicate <node_id>   // 將當前節(jié)點設置為 node_id 節(jié)點的從節(jié)點
cluster saveconfig   // 將節(jié)點的配置文件保存到硬盤里面

cluster addslots <slot> [slot ...]   // 將一個或多個槽(slot)指派(assign)給當前節(jié)點
cluster delslots <slot> [slot ...]   // 移除當前節(jié)點的一個或多個槽
cluster flushslots   // 移除當前節(jié)點的所有槽(刪除集群內(nèi)的最后一個主節(jié)點時,可用到)
cluster setslot <slot> node <node_id>   // 將槽 slot 指派給 node_id 節(jié)點祷肯。如果槽已經(jīng)指派給另一個節(jié)點沉填,那么先讓另一個節(jié)點刪除該槽,再進行指派
cluster setslot <slot> migrating <node_id>   // 將本節(jié)點的槽 slot 遷移到 node_id 節(jié)點中去
cluster setslot <slot> importing <node_id>   // 從 node_id 節(jié)點中導入槽 slot 到本節(jié)點來
cluster setslot <slot> stable   // 取消對槽 slot 的導入(import)或者遷移(migrate)

cluster keyslot <key> 計算鍵 key 應該被放置在哪個槽上
cluster countkeysinslot <slot> 返回槽 slot 目前包含的鍵值對數(shù)量
cluster getkeysinslot <slot> <count> 返回 count 個 slot 槽中的鍵

關于 redis-trib.rb 的一些使用

刪除某個節(jié)點的命令如下:

redis-trib.rb del-node <ip>:<port> 'node_id'   // 單引號內(nèi)放置節(jié)點id

說明:

  • 如果是刪除從(Slave)節(jié)點躬柬,上述命令即可拜轨。
  • 如果是刪除主(Master)節(jié)點,則要看情況:
  • 如果主節(jié)點上有從節(jié)點允青,則要將從節(jié)點刪除或轉(zhuǎn)移到其它主節(jié)點上去,該主節(jié)點才能被刪除卵沉。
  • 如果主節(jié)點上有槽(Slot)颠锉,則要將槽刪除或轉(zhuǎn)移到其它主節(jié)點上去,該主節(jié)點才能被刪除史汗。

轉(zhuǎn)移槽的方法:

redis-trib.rb reshard <ip>:<port>   // 取消分配的槽(Slot)的節(jié)點

How many slots do you want to move (from 1 to 16384)? <number>   // 填入的數(shù)字應該是該節(jié)點的全部槽琼掠,從 reshard 命令列出來的條目中得到
What is the receiving node ID? <node_id>   // 需要接收這些槽的主節(jié)點 id,就是那 40 位編碼
Please enter all the source node IDs.
  Type 'all' to use all the nodes as source nodes for the hash slots.
  Type 'done' once you entered all the source nodes IDs.
Source node #1: <node_id>   // 要刪除的主節(jié)點的 id
Source node #2: done   // 輸入 done

Do you want to proceed with the proposed reshard plan (yes/no)? yes   // 輸入 yes

待轉(zhuǎn)移完后停撞,再執(zhí)行上面刪除節(jié)點的命令瓷蛙。

  • 如需使用 C#(StackExchange.Redis)進行開發(fā),請看這里
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末艰猬,一起剝皮案震驚了整個濱河市横堡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌冠桃,老刑警劉巖命贴,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異食听,居然都是意外死亡胸蛛,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進店門樱报,熙熙樓的掌柜王于貴愁眉苦臉地迎上來葬项,“玉大人,你說我怎么就攤上這事迹蛤∶裾洌” “怎么了?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵笤受,是天一觀的道長穷缤。 經(jīng)常有香客問我,道長箩兽,這世上最難降的妖魔是什么津肛? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮汗贫,結(jié)果婚禮上身坐,老公的妹妹穿的比我還像新娘。我一直安慰自己落包,他們只是感情好部蛇,可當我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著咐蝇,像睡著了一般涯鲁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上有序,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天抹腿,我揣著相機與錄音,去河邊找鬼旭寿。 笑死警绩,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的盅称。 我是一名探鬼主播肩祥,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼后室,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了混狠?” 一聲冷哼從身側(cè)響起岸霹,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎檀蹋,沒想到半個月后松申,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡俯逾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年贸桶,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片桌肴。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡皇筛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出坠七,到底是詐尸還是另有隱情水醋,我是刑警寧澤,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布彪置,位于F島的核電站拄踪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏拳魁。R本人自食惡果不足惜惶桐,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望潘懊。 院中可真熱鬧姚糊,春花似錦、人聲如沸授舟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽释树。三九已至肠槽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間奢啥,已是汗流浹背署浩。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留扫尺,地道東北人。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓炊汤,卻偏偏與公主長得像正驻,于是被迫代替她去往敵國和親弊攘。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,922評論 2 361

推薦閱讀更多精彩內(nèi)容