Redis創建高可用集群教程【Windows環境】


模仿的過程中,加入自己的思考和理解,也會有進步和收獲。

在這個互聯網時代,在高並發和高流量可能隨時爆發的情況下,單機版的系統或者單機版的應用已經無法生存,越來越多的應用開始支持集群,支持分布式部署了。而Redis作為緩存服務器的比較出色的一員,它在出生的時候就被設置支持集群,本篇就是介紹Redis集群的介紹和搭建過程!使用的平台是Windows,搭建的思路和Linux上基本一致!

Redis創建集群簡單介紹

Redis 集群由多個運行在集群模式(cluster mode)下的 Redis 實例組成, 實例的集群模式需要通過配置來開啟, 開啟集群模式的實例將可以使用集群特有的功能和命令。

要讓集群正常運作至少需要三個主節點, 本篇是簡單的學習集群搭建,所以選擇使用六個節點: 其中三個為主節點, 而其余三個則是各個主節點的從節點。

Redis創建集群搭建過程

因為linux安裝官網都有詳細介紹和說明,Linux環境Redis下載和安裝
這里介紹Windows環境的安裝!

環境介紹

1.win10 64位
2.Redis-x64-3.2.100
# redis windows版下載地址
# https://github.com/MicrosoftArchive/redis/releases
3.ruby 環境

1. ruby環境准備

Redis Cluster的安裝需要的安裝ruby環境。
(1)下載Ruby的安裝包,下載地址:Ruby安裝包下載,下載適合自己系統的版本!我下載的是Ruby 2.3 (x64)!
(2)安裝Ruby,下面三個不用配置環境變量
Ruby安裝勾選說明

(3)驗證,打開cmd,輸入ruby --version,查看安裝Ruby的版本。


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/

在Window上的話,也是類似的方法,win+r,輸入cmd

# 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

2. 集群准備

(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)其他准備

  1. redis-trib.rb文件准備, redis-trib.rb是redis官方推出的管理redis集群的工具,集成在redis的源碼src目錄下,是基於redis提供的集群命令封裝成簡單、便捷、實用的操作工具。下載地址
  2. 在准備啟動腳本start20000.cmd,其他20001~20005同理!
@echo off
cd Redis-x64-3.2.20000
startRedisClusterServer.bat
  1. 在准備一個啟動創建集群的腳本createCluster.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

最終的目錄:
最后目錄結構Redis-Cluster

3. 創建集群過程

一台機器中進行搭建,跟在多台真機上搭建其實沒有什么區別,只要保證網絡通信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集群增刪節點

Redis集群客戶端使用

連接集群的命令

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下使用RedisCluster集群簡單實例

高性能網站架構之緩存篇—Redis集群搭建

redis-cluster研究和使用

附件

如果想直接使用本篇講解使用的主從配置!我已經打包好了 點擊 下載地址 進行下載!

本系列文章:

第一篇:Redis集群主從復制(一主兩從)搭建配置教程【Windows環境】

第二篇:Redis高可用集群-哨兵模式(Redis-Sentinel)搭建配置教程【Windows環境】

第三篇:Redis創建高可用集群教程【Windows環境】


**如果您覺得這篇博文對你有幫助,請點個贊,謝謝!** **如果帥氣(美麗)、睿智(聰穎),和我一樣簡單善良的你看到本篇博文中存在問題,請指出,我虛心接受你讓我成長的批評,謝謝閱讀!
祝你今天開心愉快!**

歡迎訪問我的csdn博客,我們一同成長!

"不管做什么,只要堅持下去就會看到不一樣!在路上,不卑不亢!"

博客首頁http://blog.csdn.net/u010648555


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM