Redis建立高可用集羣教程【Windows環境】

模仿的過程當中,加入本身的思考和理解,也會有進步和收穫。php

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

Redis建立集羣簡單介紹

Redis 集羣由多個運行在集羣模式(cluster mode)下的 Redis 實例組成, 實例的集羣模式須要經過配置來開啓, 開啓集羣模式的實例將可使用集羣特有的功能和命令。node

<font color='red'>要讓集羣正常運做至少須要三個主節點,</font> 本篇是簡單的學習集羣搭建,因此選擇使用六個節點: 其中三個爲主節點, 而其他三個則是各個主節點的從節點。linux

Redis建立集羣搭建過程

由於linux安裝官網都有詳細介紹和說明,Linux環境Redis下載和安裝。 這裏介紹Windows環境的安裝!git

環境介紹

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安裝勾選說明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

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環境】


<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>

相關文章
相關標籤/搜索