模仿的过程当中,加入本身的思考和理解,也会有进步和收获。php
在这个互联网时代,在高并发和高流量可能随时爆发的状况下,单机版的系统或者单机版的应用已经没法生存,愈来愈多的应用开始支持集群,支持分布式部署了。而Redis做为缓存服务器的比较出色的一员,它在出生的时候就被设置支持集群,本篇就是介绍Redis集群的介绍和搭建过程!使用的平台是Windows,搭建的思路和Linux上基本一致!html
Redis 集群由多个运行在集群模式(cluster mode)下的 Redis 实例组成, 实例的集群模式须要经过配置来开启, 开启集群模式的实例将可使用集群特有的功能和命令。node
要让集群正常运做至少须要三个主节点, 本篇是简单的学习集群搭建,因此选择使用六个节点: 其中三个为主节点, 而其他三个则是各个主节点的从节点。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环境】
若是您以为这篇博文对你有帮助,请点个赞,谢谢!
若是帅气(美丽)、睿智(聪颖),和我同样简单善良的你看到本篇博文中存在问题,请指出,我虚心接受你让我成长的批评,谢谢阅读!
祝你今天开心愉快!
欢迎访问个人csdn博客,咱们一同成长!
"无论作什么,只要坚持下去就会看到不同!在路上,不卑不亢!"