Redis作为常用开源的非关系型数据库,是一个高性能的key-value数据库, 使用内存作为主存储,数据访问速度非常快,在开发中常作为缓存数据库来使用,提供了两种机制支持数据持久化存储。redis3.0版本之前只支持单例模式,在3.0版本及以后才支持集群。集群采用P2P模式,是完全去中心化的,不存在中心节点或者代理节点。
- redis单机版安装教程:Windows下Redis单机版安装与配置图文教程
- linux下redis3.0单机安装教程:Linux下JAVA WEB服务器的搭建二(REDIS单机)
- linux下redis3.0集群安装教程:Linux下JAVA WEB服务器的搭建三(REDIS集群)
1、Redis Cluster(Redis集群)介绍及所需环境
1.1 Redis Cluster简介
- 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个节点。
1.2 集群搭建需要的环境
Redis Cluster(Redis集群)搭建需要的环境如下:
- Redis集群至少需要3个节点,因为投票容错机制要求超过半数节点认为某个节点挂了该节点才是挂了,所以2个节点无法构成集群。
- 要保证集群的高可用,需要每个节点都有从节点,也就是备份节点,所以Redis集群至少需要6台服务器。因为我没有那么多服务器,也启动不了那么多虚拟机,所在这里搭建的是伪分布式集群,即一台服务器虚拟运行6个redis实例,修改端口号为(7001-7006),当然实际生产环境的Redis集群搭建和这里是一样的。
- 安装ruby。
2、下载与安装Redis
2.1 下载
在github上可以下载Windows Redis软件,有安装包形式和zip两种,下载地址:https://github.com/tporadowski/redis/releases,我们这里下载redis的最新版本为v5.0.14.1
2.2 解压和配置
先新建一个文件夹用于存放Redis压缩包解压后的文件,新建一个文件夹为:redis-cluster,然后将下载好的zip包解压到新建的redis-cluster文件夹中,重命名为7001,表示集群中的7001端口所在的节点。在7001同级目录下创建一个logs目录,用于存放redis日志文件。
2.3 7001节点配置
进入7001文件夹,新建redis.conf文件,输入以下配置信息,redis.conf配置内容如下:
# 端口号
port 7001
# 是否开启集群,如果cluster-enabled 不为yes, 那么在使用JedisCluster集群代码获取的时候,会报错。
cluster-enabled yes
# 为该节点的配置信息,这里使用 nodes-端口.conf 命名方法。服务启动后会在目录生成该文件。
cluster-config-file nodes-7001.conf
# cluster-node-timeout调整为15000,在创建集群的时候,不会超时。
cluster-node-timeout 15000
appendonly yes
- 为了避免不必要的错误,配置文件尽量保存为utf8格式,并且不要包含注释;
2.4 7002 - 7006节点配置
复制7001文件夹5次,分别命名为7002、7003、7004、7005、7006,分别表示剩余的5个节点。
依次修改7002 - 7006文件夹内的redis.conf文件,只需要修改7001部分为对应的端口即可。
7002文件夹内的redis.conf配置内容如下:
# 端口号
port 7002
# 是否开启集群,如果cluster-enabled 不为yes, 那么在使用JedisCluster集群代码获取的时候,会报错。
cluster-enabled yes
# 为该节点的配置信息,这里使用 nodes-端口.conf 命名方法。服务启动后会在目录生成该文件。
cluster-config-file nodes-7002.conf
# cluster-node-timeout调整为15000,在创建集群的时候,不会超时。
cluster-node-timeout 15000
appendonly yes
7003文件夹内的redis.conf配置内容如下:
# 端口号
port 7003
# 是否开启集群,如果cluster-enabled 不为yes, 那么在使用JedisCluster集群代码获取的时候,会报错。
cluster-enabled yes
# 为该节点的配置信息,这里使用 nodes-端口.conf 命名方法。服务启动后会在目录生成该文件。
cluster-config-file nodes-7003.conf
# cluster-node-timeout调整为15000,在创建集群的时候,不会超时。
cluster-node-timeout 15000
appendonly yes
7004文件夹内的redis.conf配置内容如下:
# 端口号
port 7004
# 是否开启集群,如果cluster-enabled 不为yes, 那么在使用JedisCluster集群代码获取的时候,会报错。
cluster-enabled yes
# 为该节点的配置信息,这里使用 nodes-端口.conf 命名方法。服务启动后会在目录生成该文件。
cluster-config-file nodes-7004.conf
# cluster-node-timeout调整为15000,在创建集群的时候,不会超时。
cluster-node-timeout 15000
appendonly yes
7005文件夹内的redis.conf配置内容如下:
# 端口号
port 7005
# 是否开启集群,如果cluster-enabled 不为yes, 那么在使用JedisCluster集群代码获取的时候,会报错。
cluster-enabled yes
# 为该节点的配置信息,这里使用 nodes-端口.conf 命名方法。服务启动后会在目录生成该文件。
cluster-config-file nodes-7005.conf
# cluster-node-timeout调整为15000,在创建集群的时候,不会超时。
cluster-node-timeout 15000
appendonly yes
7006文件夹内的redis.conf配置内容如下:
# 端口号
port 7006
# 是否开启集群,如果cluster-enabled 不为yes, 那么在使用JedisCluster集群代码获取的时候,会报错。
cluster-enabled yes
# 为该节点的配置信息,这里使用 nodes-端口.conf 命名方法。服务启动后会在目录生成该文件。
cluster-config-file nodes-7006.conf
# cluster-node-timeout调整为15000,在创建集群的时候,不会超时。
cluster-node-timeout 15000
appendonly yes
2.5 安装并启动redis服务
分别安装并启动6个节点的redis服务。在cmd命令中分别进入6个节点的目录,执行安装和启动命令。
启动7001节点的redis服务:
# 安装redis服务
redis-server.exe --service-install redis.conf --service-name redis7001
# 启动redis服务
redis-server.exe --service-start --service-name redis7001
启动7002 - 7006节点的redis服务:
# 安装redis服务
cd ../7002
redis-server.exe --service-install redis.conf --service-name redis7002
# 启动redis服务
redis-server.exe --service-start --service-name redis7002
# 安装redis服务
cd ../7003
redis-server.exe --service-install redis.conf --service-name redis7003
# 启动redis服务
redis-server.exe --service-start --service-name redis7002
# 安装redis服务
cd ../7004
redis-server.exe --service-install redis.conf --service-name redis7004
# 启动redis服务
redis-server.exe --service-start --service-name redis7002
# 安装redis服务
cd ../7005
redis-server.exe --service-install redis.conf --service-name redis7005
# 启动redis服务
redis-server.exe --service-start --service-name redis7002
# 安装redis服务
cd ../7006
redis-server.exe --service-install redis.conf --service-name redis7006
# 启动redis服务
redis-server.exe --service-start --service-name redis7002
2.6 创建redis集群
打开任意redis目录通过cmd执行以下命令创建redis集群。
- 2018年10月 Redis 发布了稳定版本的 5.0 版本,推出了各种新特性,其中一点是放弃 Ruby 的集群方式,改为使用 C 语言编写的 redis-cli 的方式,使集群的构建方式复杂度大大降低。
- 5.0之前的版本创建集群需要安装ruby环境。
redis-cli --cluster create 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 --cluster-replicas 1
- –cluster-replicas 指定集群中每个主节点配备几个从节点,这里设置为1。
2.7 redis集群测试
cmd执行redis-cli.exe -c -p 7001连接redis,然后就可以通过set或get等命令进行测试了。
# redis连接7001节点,默认连接127.0.0.1主机,和下述语句等效
redis-cli.exe -c -p 7001
# redis连接127.0.0.1主机的7001节点
redis-cli -c -h 127.0.0.1 -p 7001
# 命令 redis-cli –c –h ”地址” –p “端口号” ; c 表示集群
3、其他命令
3.1 redis的windows服务卸载命令
# 卸载7001节点服务
redis-server.exe --service-uninstall redis.conf --service-name redis7001
# 卸载7002节点服务
redis-server.exe --service-uninstall redis.conf --service-name redis7002
# 卸载7003节点服务
redis-server.exe --service-uninstall redis.conf --service-name redis7003
# 卸载7004节点服务
redis-server.exe --service-uninstall redis.conf --service-name redis7004
# 卸载7005节点服务
redis-server.exe --service-uninstall redis.conf --service-name redis7005
# 卸载7006节点服务
redis-server.exe --service-uninstall redis.conf --service-name redis7006
评论区