Redis创建高可用集群教程【Windows环境】

模仿的过程中,加入自己的思考和理解,也会有进步和收获。

在这个互联网时代,在高并发和高流量可能随时爆发的情况下,单机版的系统或者单机版的应用已经无法生存,越来越多的应用开始支持集群,支持分布式部署了。而Redis作为缓存服务器的比较出色的一员,它在出生的时候就被设置支持集群,本篇就是介绍Redis集群的介绍和搭建过程!使用的平台是Windows,搭建的思路和Linux上基本一致!

Redis创建集群简单介绍

Redis 集群由多个运行在集群模式(cluster mode)下的 Redis 实例组成, 实例的集群模式需要通过配置来开启, 开启集群模式的实例将可以使用集群特有的功能和命令。

<font color='red'>要让集群正常运作至少需要三个主节点,</font> 本篇是简单的学习集群搭建,所以选择使用六个节点: 其中三个为主节点, 而其余三个则是各个主节点的从节点。

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容