本文只涉及 Redis 在 Windows 中的 集群搭建 和 集群維護
本文涉及:集群搭建势誊、集群維護。
如需用 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ù)字為從 |
總體步驟:
- 安裝相應的程序(Redis 和 Ruby 都默認安裝在 C 盤)
- 新建 6 個配置文件夾和相關的配置文件(以 D 盤新建文件夾為例)
- 進入命令行(運行 - cmd分衫,最好開兩個命令行窗口场刑,方便復制)
- 用 Redis 命令(redis-server)行安裝 6 個 Redis 服務,并啟動
- 用 Ruby 命令(gem)安裝 Redis 的相關組件(需要下載丐箩,看網(wǎng)速咯)
- 用 redis-trib.rb 創(chuàng)建集群(注意 6 個 Redis 的順序)
- 創(chuàng)建 Redis 集群完畢
第一步 安裝下載的 Redis 和 RubyInstaller摇邦。
以下以默認安裝路徑為例。
在安裝 Redis 的時候屎勘,下面這個界面最好選上施籍,方便隨時執(zhí)行 Redis 的相關命令。
在安裝 RubyInstaller 的時候概漱,下面這個界面最好全選丑慎。可安裝相應的支持環(huán)境,將 Ruby 的命令添加到系統(tǒng)的執(zhí)行路徑里面去(方便隨時執(zhí)行 gem)竿裂,還有就是關聯(lián)相應的 Ruby 后綴文件玉吁。
安裝好后的路徑如下:
第二步 新建 6 個 Redis 的文件夾和相應的配置文件(以端口命名文件夾)。
在 Redis 的安裝目錄腻异,新建一個 cluster 的文件夾进副,里面新建 6 個子文件夾,以端口為名悔常,如下圖所示:
最好在 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)皆辽,如下圖所示:
可將各配置文件中的相同配置項,提取到同一個文件中芥挣,形成全局配置驱闷,詳細方法看這里。
第三步 打開命令行(運行 - 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
看到下面這界面氮昧,第一個服務就安裝成功了:
安裝成功之后框杜,打開系統(tǒng)的服務(運行 - services.msc),可以看到安裝了 redis7100 這個服務:
接下來袖肥,就啟動該服務咪辱,輸入如下啟動命令(也可以直接在服務里面,右鍵椎组,啟動它):
// 啟動命令
redis-server --service-start --service-name redis7100
// 停止命令
redis-server --service-stop --service-name 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 安裝指令成功蛋济,接下來,就是創(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
輸入后回車,會看到如下提示:
輸入 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
,則可以看到:
集群特有的命令有(如果沒有登錄骤视,那么鞍爱,每次執(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é)點的命令瓷蛙。
- 如需配置 Redis(不含集群)悼瓮,請看這里
- 如需使用 C#(StackExchange.Redis)進行開發(fā),請看這里