模仿的過程當中,加入本身的思考和理解,也會有進步和收穫。php
在這個互聯網時代,在高併發和高流量可能隨時爆發的狀況下,單機版的系統或者單機版的應用已經沒法生存,愈來愈多的應用開始支持集羣,支持分佈式部署了。而Redis做爲緩存服務器的比較出色的一員,它在出生的時候就被設置支持集羣,本篇就是介紹Redis集羣的介紹和搭建過程!使用的平臺是Windows,搭建的思路和Linux上基本一致!html
Redis 集羣由多個運行在集羣模式(cluster mode)下的 Redis 實例組成, 實例的集羣模式須要經過配置來開啓, 開啓集羣模式的實例將可使用集羣特有的功能和命令。node
<font color='red'>要讓集羣正常運做至少須要三個主節點,</font> 本篇是簡單的學習集羣搭建,因此選擇使用六個節點: 其中三個爲主節點, 而其他三個則是各個主節點的從節點。linux
由於linux安裝官網都有詳細介紹和說明,Linux環境Redis下載和安裝。 這裏介紹Windows環境的安裝!git
1.win10 64位 2.Redis-x64-3.2.100 # redis windows版下載地址 # https://github.com/MicrosoftArchive/redis/releases 3.ruby 環境
Redis Cluster的安裝須要的安裝ruby環境。
(1)下載Ruby的安裝包,下載地址:Ruby安裝包下載,下載適合本身系統的版本!我下載的是Ruby 2.3 (x64)! (2)安裝Ruby,下面三個不用配置環境變量 github
(3)驗證,打開cmd,輸入ruby --version,查看安裝Ruby的版本。redis
C:\Users\acer>ruby --version ruby 2.3.3p222 (2016-11-21 revision 56859) [x64-mingw32]
(4)安裝RubyGems
因爲牆的問題,Ruby自帶的源下載很慢,可能致使RubyGems安裝不成功!以前可使用淘寶的ruby鏡像源可是目前不在維護https://ruby.taobao.org/,如今修改成 Ruby China http://gems.ruby-china.org/ 。sql
在Window上的話,也是相似的方法,win+r,輸入cmdwindows
# 1.刪除Ruby自帶的源 $ gem sources --remove https://rubygems.org/ # 2. 添加Ruby China源,使用 -a,不要使用-add,不然出錯! $ gem sources --a https://gems.ruby-china.org/ # 3.查看現有的源,確保只有 gems.ruby-china.org $ gem sources -l # 4.安裝redis依賴 gem install redis
# 1.刪除Ruby自帶的源 C:\Users\acer>gem sources --remove https://rubygems.org/ https://rubygems.org/ removed from sources # 2. 添加Ruby China源,使用 -a,不要使用-add,不然出錯 C:\Users\acer>gem sources --add https://gems.ruby-china.org/ Error fetching https://gems.ruby-china.org/: SSL_connect returned=1 errno=0 state=error: certificate verify failed (https://gems.ruby-china.org/specs.4.8.gz) C:\Users\acer>gem sources -a http://gems.ruby-china.org/ http://gems.ruby-china.org/ added to sources # 3.查看現有的源,確保只有 gems.ruby-china.org C:\Users\acer>gem sources -l *** CURRENT SOURCES *** http://gems.ruby-china.org/ # 4.安裝redis依賴 C:\Users\acer>gem install redis Fetching: redis-4.0.1.gem (100%) Successfully installed redis-4.0.1 Parsing documentation for redis-4.0.1 Installing ri documentation for redis-4.0.1 Done installing documentation for redis after 7 seconds 1 gem installed
(1)安裝文檔 Redis Cluster緩存
(2)由於最少須要六個節點,建立6個文件夾分別被Redis-x64-3.2.20000-Redis-x64-3.2.20005,在每一個文件夾放一份以前下載好的Redis。 注:請忽略dump.rdb文件,你解壓後應該是沒有dump.rdb文件的,由於我運行過Redis纔有此文件!
(3)在每一個文件夾下面建立配置文件 redis.conf,修改對應的端口便可,最少選項的集羣配置文件示例爲Redis-x64-3.2.20000文件夾:
port 20000 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes
配置中參數的介紹:
cluster-enabled :選項用於開實例的集羣模式, cluster-conf-file : 選項則設定了保存節點配置文件的路徑, 默認值爲nodes.conf(啓動時候自動生成) 。 nodes.conf : 節點配置文件無須人爲修改, 它由 Redis 集羣在啓動時建立, 並在有須要時自動進行更新。 appendonly :用於開啓AOF模式
(4)建立啓動腳本startRedisClusterServer.bat 好處就是點擊就能夠啓動,不用這樣不用老是敲命令啓動 每一個文件夾下面都放一份!
@echo off redis-server.exe redis.conf @pause
注:請忽略dump.rdb文件,你解壓後應該是沒有dump.rdb文件的,由於我運行過Redis纔有此文件!
(5)其餘準備
@echo off cd Redis-x64-3.2.20000 startRedisClusterServer.bat
@echo redis-trib.rb create --replicas 1 127.0.0.1:20000 127.0.0.1:20001 127.0.0.1:20002 127.0.0.1:20003 127.0.0.1:20004 127.0.0.1:20005 @pause
最終的目錄:
一臺機器中進行搭建,跟在多臺真機上搭建其實沒有什麼區別,只要保證網絡通訊ok就能夠了! 本次搭建一個僞集羣。在一個服務器上建立多個redis實例。端口號以下所示
主節點:127.0.0.1:20000 127.0.0.1:20001 127.0.0.1:20002 從節點:127.0.0.1:20003 127.0.0.1:20004 127.0.0.1:20005
(1)運行 start20000.cmd- start20005.cmd腳本啓動六個redis實例 (2)運行createCluster.bat腳本
redis-trib.rb create, 這表示咱們但願建立一個新的集羣。 選項 --replicas 1 表示咱們但願爲集羣中的每一個主節點建立一個從節點。 以後跟着的其餘參數則是實例的地址列表, 咱們但願程序使用這些地址所指示的實例來建立新集羣。
運行狀況以下:
F:\nosql_learn\Redis-Cluster>redis-trib.rb create --replicas 1 127.0.0.1:20000 127.0.0.1:20001 127.0.0.1:20002 127.0.0.1:20003 127.0.0.1:20004 127.0.0.1:20005 >>> Creating cluster >>> Performing hash slots allocation on 6 nodes... Using 3 masters: 127.0.0.1:20000 127.0.0.1:20001 127.0.0.1:20002 Adding replica 127.0.0.1:20003 to 127.0.0.1:20000 Adding replica 127.0.0.1:20004 to 127.0.0.1:20001 Adding replica 127.0.0.1:20005 to 127.0.0.1:20002 M: 1cd9cbd1ef5fa546b915f2ac72be05f6135ebfaf 127.0.0.1:20000 slots:0-5460 (5461 slots) master M: 9ed55c7c6037a2222976120dacd1b272369e834e 127.0.0.1:20001 slots:5461-10922 (5462 slots) master M: 9d68da9eddd4b80b0cb828d598d07088adfc9c04 127.0.0.1:20002 slots:10923-16383 (5461 slots) master S: a4d586a792c9b7fe8588a3aa632e3d79c7f3a1bd 127.0.0.1:20003 replicates 1cd9cbd1ef5fa546b915f2ac72be05f6135ebfaf S: 5929158572305fa0cc21d52003a8a5545965d248 127.0.0.1:20004 replicates 9ed55c7c6037a2222976120dacd1b272369e834e S: 4a3cc7e822a86527beb48333d89f1f1b03336a89 127.0.0.1:20005 replicates 9d68da9eddd4b80b0cb828d598d07088adfc9c04 Can I set the above configuration? (type 'yes' to accept): yes
校驗和後分別存儲這三臺機上。沒問題就輸入 yes! 默認是前三個節點 20000 20001 20002 是主, 後3個節點 20003 20004 20005 是從。
例如 127.0.0.1:20000 這臺機 slots:0-5460 的意思是: 對key 作 CRC16 校驗和後 值在 0-5460範圍內都會存到這臺機器裏 例如 key=288 對應的CRC16校驗和 爲 4258,應該存在20000這臺機裏!
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... >>> Performing Cluster Check (using node 127.0.0.1:20000) M: 1cd9cbd1ef5fa546b915f2ac72be05f6135ebfaf 127.0.0.1:20000 slots:0-5460 (5461 slots) master 1 additional replica(s) M: 9d68da9eddd4b80b0cb828d598d07088adfc9c04 127.0.0.1:20002 slots:10923-16383 (5461 slots) master 1 additional replica(s) S: 4a3cc7e822a86527beb48333d89f1f1b03336a89 127.0.0.1:20005 slots: (0 slots) slave replicates 9d68da9eddd4b80b0cb828d598d07088adfc9c04 M: 9ed55c7c6037a2222976120dacd1b272369e834e 127.0.0.1:20001 slots:5461-10922 (5462 slots) master 1 additional replica(s) S: 5929158572305fa0cc21d52003a8a5545965d248 127.0.0.1:20004 slots: (0 slots) slave replicates 9ed55c7c6037a2222976120dacd1b272369e834e S: a4d586a792c9b7fe8588a3aa632e3d79c7f3a1bd 127.0.0.1:20003 slots: (0 slots) slave replicates 1cd9cbd1ef5fa546b915f2ac72be05f6135ebfaf [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.
簡單來講, 以上命令的意思就是讓 redis-trib 程序建立一個包含三個主節點和三個從節點的集羣。 看一下node.conf, 裏面記錄了master 和 slave的對應關係!
9d68da9eddd4b80b0cb828d598d07088adfc9c04 127.0.0.1:20002 master - 0 1520005171624 3 connected 10923-16383 4a3cc7e822a86527beb48333d89f1f1b03336a89 127.0.0.1:20005 slave 9d68da9eddd4b80b0cb828d598d07088adfc9c04 0 1520005173128 6 connected 9ed55c7c6037a2222976120dacd1b272369e834e 127.0.0.1:20001 master - 0 1520005170963 2 connected 5461-10922 1cd9cbd1ef5fa546b915f2ac72be05f6135ebfaf 127.0.0.1:20000 myself,master - 0 0 1 connected 0-5460 5929158572305fa0cc21d52003a8a5545965d248 127.0.0.1:20004 slave 9ed55c7c6037a2222976120dacd1b272369e834e 0 1520005172919 5 connected a4d586a792c9b7fe8588a3aa632e3d79c7f3a1bd 127.0.0.1:20003 slave 1cd9cbd1ef5fa546b915f2ac72be05f6135ebfaf 0 1520005172723 4 connected vars currentEpoch 6 lastVoteEpoch 0
每一個實例會一直使用同一個 ID , 從而在集羣中保持一個獨一無二(unique)的名字。
每一個節點都使用 ID 而不是 IP 或者端口號來記錄其餘節點, 由於 IP 地址和端口號均可能會改變, 而這個獨一無二的標識符(identifier)則會在節點的整個生命週期中一直保持不變。
咱們將這個標識符稱爲節點ID。
到此咱們的Redis集羣建立成功了!
假如對當前集羣不滿意須要從新配置,那麼 若是須要從新分配,則將全部節點中止後,將如下幾個文件刪除:
appendonly.aof dump.rdb nodes.conf
刪除後再從新運行redis-trib.rb create命令添加組成集羣。
假如在當前集羣狀況下,須要增刪節點,那麼參考這篇文章:
鏈接集羣的命令
redis-cli -c -h 127.0.0.1 -p 20000
-c : 表明集羣
-h 主機IP -p : 端口
F:\nosql_learn\Redis-Cluster\Redis-x64-3.2.20000>redis-cli -c -p 20000 127.0.0.1:20000> 127.0.0.1:20000> get hello (nil) 127.0.0.1:20000> set hello (error) ERR wrong number of arguments for 'set' command 127.0.0.1:20000> set hello world OK 127.0.0.1:20000>
F:\nosql_learn\Redis-Cluster\Redis-x64-3.2.20000> redis-cli -c -p 20005 127.0.0.1:20005> get hello -> Redirected to slot [866] located at 127.0.0.1:20000 "world" 127.0.0.1:20000> ^C F:\nosql_learn\Redis-Cluster\Redis-x64-3.2.20000>redis-cli -c -p 20005 127.0.0.1:20005> set name dufy -> Redirected to slot [5798] located at 127.0.0.1:20001 OK 127.0.0.1:20001>
若是想直接使用本篇講解使用的主從配置!我已經打包好了 點擊 下載地址 進行下載!
第一篇:Redis集羣主從複製(一主兩從)搭建配置教程【Windows環境】
第二篇:Redis高可用集羣-哨兵模式(Redis-Sentinel)搭建配置教程【Windows環境】
<font color='blue'> **若是您以爲這篇博文對你有幫助,請點個贊,謝謝!**</font>
<font color='green'> **若是帥氣(美麗)、睿智(聰穎),和我同樣簡單善良的你看到本篇博文中存在問題,請指出,我虛心接受你讓我成長的批評,謝謝閱讀!<br/>祝你今天開心愉快!**</font>
<font size=4 color=blue>歡迎訪問個人csdn博客,咱們一同成長!</font>
"<font size=5>無論作什麼,只要堅持下去就會看到不同!在路上,不卑不亢!</font>"
<font size=4 color=red> 博客首頁</font>:<a href="http://blog.csdn.net/u010648555" target="_blank">http://blog.csdn.net/u010648555</a>