【Windows】Redis集群部署
集群是如何進行工作的
Redis采用哈希槽來處理數據與節點之間的映射關系,一個集群共有16384?個哈希槽,每個key通過?CRC16算法計算出一個16bit的值,再對16384取模,得到對應的哈希槽,集群通過維護哈希槽與節點的關系來得到key的映射關系。集群節點之間互相通信,把當前節點的哈希槽分配信息互相傳遞。
客戶端在連接到節點時,會獲取到哈希槽與節點的映射關系,并緩存到本地。如果節點哈希槽與節點的映射關系改變,那么當客戶端使用key計算后訪問節點時,如果節點不存在該哈希槽,則會將最新的哈希槽映射關系返回給客戶端,客戶端更新本地緩存,并根據最新的映射關系再次訪問對應的節點操作。
Redis集群安裝
在Windows系統下搭建Redis集群需要4個組件:
- Redis
- Ruby語言運行環境
- Redis的Ruby驅動redis-xxxx.gem
- 創建Redis集群的工具redis-trib.rb
安裝Redis,并運行3個實例(Redis集群需要至少3個以上節點,低于3個無法創建)。
使用redis-trib.rb工具來創建Redis集群,由于該文件是用ruby語言寫的,所以需要安裝Ruby開發環境,以及驅動redis-xxxx.gem。
下載并安裝Redis
Redis提供msi和zip格式的下載文件,這里下載zip格式 3.0.504版本。
將下載到的Redis-x64-3.0.504.zip解壓即可,為了方便使用,建議放在盤符根目錄下,并修改目錄名為Redis,如:C:\Redis 或者D:\Redis。
通過配置文件來啟動3個不同的Redis實例,由于Redis默認端口為6379,所以這里使用了6380、6381、6382來運行3個Redis實例。
注意:為了避免不必要的錯誤,配置文件盡量保存為utf8格式,并且不要包含注釋
配置文件中以下兩種保存日志的方式(保存在文件中、保存到System Log中)請根據需求選擇其中一種即可:
loglevel notice #日志的記錄級別,notice是適合生產環境的 logfile "D:/Redis/Logs/redis6380_log.txt" #指定log的保持路徑,默認是創建在Redis安裝目錄下,如果有子目錄需要手動創建,如此處的Logs目錄 syslog-enabled yes #是否使用系統日志 syslog-ident redis6380 #在系統日志的標識名這里使用了保存在文件中的方式,所以先在redis目錄D:/Redis下新建Logs文件夾。
redis.6380.conf 內容如下:
port 6380 loglevel notice logfile "D:/Redis/Logs/redis6380_log.txt" appendonly yes appendfilename "appendonly.6380.aof" cluster-enabled yes cluster-config-file nodes.6380.conf cluster-node-timeout 15000 cluster-slave-validity-factor 10 cluster-migration-barrier 1 cluster-require-full-coverage yesredis.6381.conf 內容如下:
port 6381 loglevel notice logfile "D:/Redis/Logs/redis6381_log.txt" appendonly yes appendfilename "appendonly.6381.aof" cluster-enabled yes cluster-config-file nodes.6381.conf cluster-node-timeout 15000 cluster-slave-validity-factor 10 cluster-migration-barrier 1 cluster-require-full-coverage yesredis.6382.conf 內容如下:
port 6382 loglevel notice logfile "D:/Redis/Logs/redis6382_log.txt" appendonly yes appendfilename "appendonly.6382.aof" cluster-enabled yes cluster-config-file nodes.6382.conf cluster-node-timeout 15000 cluster-slave-validity-factor 10 cluster-migration-barrier 1 cluster-require-full-coverage yes配置內容的解釋如下:
#端口號 port 6380 #日志的記錄級別,notice是適合生產環境的 loglevel notice #指定log的保持路徑,默認是創建在Redis安裝目錄下,如果有子目錄需要手動創建,如此處的Logs目錄 logfile "Logs/redis6380_log.txt" #是否使用系統日志 syslog-enabled yes #在系統日志的標識名 syslog-ident redis6380 #數據的保存為aof格式 appendonly yes #數據保存文件 appendfilename "appendonly.6380.aof" #是否開啟集群 cluster-enabled yes #記錄集群信息,不用手動維護,Redis Cluster 會自動維護 cluster-config-file nodes.6380.conf 集群節點連接超時時間,如果集群規模小,都在同一個網絡環境下,可以配置的短些,更快的做故障轉移。 cluster-node-timeout 15000 #設置為0,如果master slave都掛掉, slave跟master失聯又超過這個數值*timeout的數值, #就不會發起選舉了。如果設置為0,就是永遠都會嘗試發起選舉,嘗試從slave變為mater cluster-slave-validity-factor 10 #只有當舊主服務器仍有至少給定數量的其他工作副本時,副本才會遷移到孤立主服務器。這個數字就是“移民壁壘”。 #遷移屏障為1意味著只有當主副本至少有一個其他工作副本時,副本才會遷移,以此類推。它通常反映集群中每個主節點所需的副本數量。 #默認值為1(副本僅在其主副本至少保留一個副本時遷移)。要禁用遷移,只需將其設置為一個非常大的值。 #可以設置值0,但該值僅用于調試和生產中的危險。 cluster-migration-barrier 1 #設置為no,默認為yes,故障發現到自動完成轉移期間整個集群是不可用狀態, #對于大多數業務無法容忍這種情況,因此要設置為no,當主節點故障時只影 響它負責槽的相關命令執行,不會影響其他主節點的可用性。 #只要有結點宕機導致16384個槽沒全被覆蓋,整個集群就全部停止服務,所以一定要改為no cluster-require-full-coverage yes將上述配置文件保存到redis目錄下,并使用這些配置文件安裝3個redis服務,命令如下:
注意:redis.6380.conf等配置文件最好使用完整路徑,避免重啟Redis集群出現問題
D:/Redis/redis-server.exe --service-install D:/Redis/redis.6380.conf --service-name redis6380 D:/Redis/redis-server.exe --service-install D:/Redis/redis.6381.conf --service-name redis6381 D:/Redis/redis-server.exe --service-install D:/Redis/redis.6382.conf --service-name redis6382啟動這3個服務,命令如下:
D:/Redis/redis-server.exe --service-start --service-name redis6380 D:/Redis/redis-server.exe --service-start --service-name redis6381 D:/Redis/redis-server.exe --service-start --service-name redis6382下載并安裝ruby
1、下載Ruby
地址:Download Archives
下載后,雙擊安裝即可,同樣,為了操作方便,也是建議安裝在盤符根目錄下,如: D:\ruby22-x64 ,安裝時這里選中后兩個選項,意思是將ruby添加到系統的環境變量中,在cmd命令中能直接使用ruby的命令。
2、下載Redis驅動
下載ruby環境下Redis的驅動,考慮到兼容性,這里下載的是3.2.2版本。
redis | RubyGems.org | your community gem host
注意:下載在頁面右下角相關連接一項中
安裝該驅動,命令如下:
gem install --local path_to_gem/filename.gem3、下載redis-trib.rb
下載Redis官方提供的創建Redis集群的ruby腳本文件redis-trib.rb,路徑如下:
https://raw.githubusercontent.com/MSOpenTech/redis/3.0/src/redis-trib.rb
打開該鏈接如果沒有下載,而是打開一個頁面,那么將該頁面保存為redis-trib.rb
建議保存到redis的目錄下。
注意:因為redis-trib.rb是ruby代碼,必須用ruby來打開,若redis-trib.rb無法識別,需要手動選擇該文件的打開方式:
選擇ruby為的打開方式后,redis-trib.rb的logo都會發生改變,如下圖:
創建Redis集群
cmd下切換到Redis目錄,使用redis-trib.rb來創建Redis集群:
redis-trib.rb create --replicas 0 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382執行結果:
當出現提示時,需要手動輸入yes,輸入后,當出現以下內容,說明已經創建了Redis集群:
檢驗是否真的創建成功,輸入以下命令:
redis-trib.rb check 127.0.0.1:6380出現以下信息,說明創建的Redis集群是沒問題的:
使用Redis客戶端Redis-cli.exe來查看數據記錄數,以及集群相關信息:
D:/Redis/redis-cli.exe -c -p 6380-c 表示 cluster
-p 表示 port 端口號
輸入dbsize查詢 記錄總數
dbsize或者一次輸入完整命令:
D:/Redis/redis-cli.exe -c -p 6380 dbsize結果如下:
輸入cluster info可以從客戶端的查看集群的信息:
cluster info結果如下:
如果搭建redis集群出現如下的問題:
解決方案:
- 刪除每個節點對應的nodes-xxx.conf配置文件
- 刪除每個節點下的aof、rdb文件
- 關掉redis集群各個實例的進程,重新啟動
Redis的服務命令
假設在Redis的安裝目錄下,有一個redis.windows-service.conf文件,即默認的配置文件。
如果需要修改端口號,或者設置密碼就需要修改其中的內容:
默認端口號是6379,你可以隨意修改
port 6379默認是沒有設置密碼,如果需要則修改requirepass, 將前面的#去掉,將foobared改成你的密碼
# requirepass foobaredRedis官網提供兩種安裝方式:msi文件格式 和 zip包文件,其中msi格式的redis安裝后,即自動添加到系統的服務列表中,而zip包的redis則需要手動安裝服務
特別注意:使用默認的配置文件安裝Redis服務時,必須在Redis的安裝目錄下新建一個Log目錄,否則會報錯,因為在redis.windows-service.conf中設置了日志的保存目錄為安裝目錄下的Log,當然這個可以修改。
Redis常用的服務命令如下:
1)安裝服務
--service-install完整例子:
redis-server.exe --service-install redis.windows-service.conf --loglevel notice這里就是用了redis.windows-service.conf作為配置文件, --loglevel notice是設置log記錄的,基本是notice。
2)卸載服務
--service-uninstall完整例子:
redis-server --service-uninstall3)啟動服務
--service-start4)停止服務
--service-stop5)其他命令
--service-name YourServiceName #設置服務的名字 --port YourPortNumber #設置服務的端口號使用如下,通過cmd切換到Redis的安裝目錄,然后輸入命令即可,如:
第一條命令為:以redis.windows-servie.conf作為配置文件,名字為 redisTest, 端口號為 6388 來安裝一個Redis服務;
第二條命令為:(紅色框內)是卸載名為 redisTest的服務
總結
以上是生活随笔為你收集整理的【Windows】Redis集群部署的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php对接awssessmtp,amaz
- 下一篇: 集群和分布式系统