一、Redis Cluster(Redis集群)简介
- redis是一个开源的key value存储系统,受到了广大互联网公司的青睐。redis3.0版本之前只支持单例模式,在3.0版本及以后才支持集群,我这里用的是redis3.0.0版本;
- redis集群采用P2P模式,是完全去中心化的,不存在中心节点或者代理节点;
- redis集群是没有统一的入口的,客户端(client)连接集群的时候连接集群中的任意节点(node)即可,集群内部的节点是相互通信的(PING-PONG机制),每个节点都是一个redis实例;
- 为了实现集群的高可用,即判断节点是否健康(能否正常使用),redis-cluster有这么一个投票容错机制:如果集群中超过半数的节点投票认为某个节点挂了,那么这个节点就挂了(fail)。这是判断节点是否挂了的方法;
- 那么如何判断集群是否挂了呢? 如果集群中任意一个节点挂了,而且该节点没有从节点(备份节点),那么这个集群就挂了。这是判断集群是否挂了的方法;
- 那么为什么任意一个节点挂了(没有从节点)这个集群就挂了呢? 因为集群内置了16384个slot(哈希槽),并且把所有的物理节点映射到了这16384[0-16383]个slot上,或者说把这些slot均等的分配给了各个节点。当需要在Redis集群存放一个数据(key-value)时,redis会先对这个key进行crc16算法,然后得到一个结果。再把这个结果对16384进行求余,这个余数会对应[0-16383]其中一个槽,进而决定key-value存储到哪个节点中。所以一旦某个节点挂了,该节点对应的slot就无法使用,那么就会导致集群无法正常工作。
- 综上所述,每个Redis集群理论上最多可以有16384个节点。
二、集群搭建需要的环境
- 所需软件:Redis、Ruby语言运行环境、Redis的Ruby驱动redis-xxx.gem、创建Redis集群的工具redis.trib.rb。
- Redis集群至少需要3个节点,因为投票容错机制要求超过半数节点认为某个节点挂了该节点才是挂了,所以2个节点无法构成集群。
- 要保证集群的高可用,需要每个节点都有从节点,也就是备份节点,所以Redis集群至少需要6台服务器。因为我没有那么多服务器,也启动不了那么多虚拟机,所在这里搭建的是伪分布式集群,即一台服务器虚拟运行6个redis实例,修改端口号为(7001-7006),当然实际生产环境的Redis集群搭建和这里是一样的。
三、集群搭建具体步骤如下(注意要关闭防火墙)
1.下载redis 服务包和redis 集群创建工具https://github.com/microsoftarchive/redis/releases
2.准备好需要安装的软件包
3.如上图,创建一个RedisCluster文件夹,用于存放集群节点
4.将Redis-x64-3.2.100目录下的所有文件复制到7001目录下,复制成6份。
5.删除7001目录下的快照文件dump.rdb,并且修改该目录下的redis.conf文件,具体修改几处地方:
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
appendonly yes
port 7001
*注意,不同的端口号需要修改相对应的端口,分别修改redis.conf文件端口号为7002-7006
6. 运行不同端口的redis ,在对应的解压的redis服务包下,新建一个bat文件
title redis-7001
redis-server.exe redis.windows.conf
7.至此6个redis节点启动成功,接下来正式开启搭建集群,以上都是准备条件。大家不要觉得图片多看起来冗长所以觉得麻烦,其实以上步骤也就一句话的事情:创建6个redis实例(6个节点)并启动。选择就要利用集群工具包来创建redis 集群,找到redis 创建集群工具解压,将里面src路径下面的redis-trib.rb 复制到7001文件夹下面.
8.要搭建集群的话,需要使用一个工具(脚本文件)。因为这个工具是一个ruby脚本文件,所以这个工具的运行需要ruby的运行环境,就相当于java语言的运行需要在jvm上。所以需要安装ruby, 双击执行rubyinstaller-2.3.3-x64
9.上一步中已经把ruby工具所需要的运行环境和ruby包安装好了,接下来需要把这个ruby脚本工具rubygems-3.1.3复制到7001目录下。那么这个ruby脚本工具在哪里呢?在rubygems-3.1.3/src目录下的redis-trib.rb文件。接下来cmd ruby脚本目录执行ruby setup.rb.
然后GEM 安装 Redis :切换到redis安装目录(比如7001的redis服务包目录),需要在命令行中,执行 gem install redis
10.然后切换到当前目录,执行下面这条指令
ruby redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006
注意:此处大家应该根据自己的服务器ip输入对应的ip地址!
11. 最后连接集群节点,连接任意一个即可:
注意:一定要加上-c,不然节点之间是无法自动跳转的!如下图可以看到,存储的数据(key-value)是均匀分配到不同的节点的:
四、总结
搞了半天,终于将redis集群搭建起来了。