在开始 redis 集群搭建之前,我们先简单回顾一下 redis 单机版的搭建过程
- 下载 redis 压缩包,然后解压压缩文件;
- 进入到解压缩后的 redis 文件目录(此时可以看到 Makefile 文件),编译 redis 源文件;
- 把编译好的 redis 源文件安装到/usr/local/redis 目录下,如果/local 目录下没有 redis 目录,会自动新建 redis 目录;
- 进入/usr/local/redis/bin 目录,直接./redis-server 启动 redis(此时为前端启动 redis);
- 将 redis 启动方式改为后端启动,具体做法:把解压缩的 redis 文件下的 redis.conf 文件复制到/usr/local/redis/bin 目录下,然后修改该 redis.conf 文件->daemonize:no 改为 daemonize:yse;
- 在/bin 目录下通过./redis-server redis.conf 启动 redis(此时为后台启动)。
综上 redis 单机版安装启动完成。
ok,接着咱们开始真正的表演—-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 个节点。
二、集群搭建需要的环境
2.1 Redis 集群至少需要 3 个节点,因为投票容错机制要求超过半数节点认为某个节点挂了该节点才是挂了,所以 2 个节点无法构成集群。
2.2 要保证集群的高可用,需要每个节点都有从节点,也就是备份节点,所以Redis 集群至少需要 6 台服务器。因为我没有那么多服务器,也启动不了那么多虚拟机,所在这里搭建的是伪分布式集群,即一台服务器虚拟运行 6 个 redis 实例,修改端口号为(7001-7006),当然实际生产环境的Redis 集群搭建和这里是一样的。
2.3 安装 ruby
三、集群搭建具体步骤如下(注意要关闭防火墙)
3.1 在 usr/local 目录下新建 redis-cluster 目录,用于存放集群节点
3.2 把 redis 目录下的 bin 目录下的所有文件复制到/usr/local/redis-cluster/redis01 目录下,不用担心这里没有 redis01 目录,会自动创建的。操作命令如下(注意当前所在路径):
cp -r redis/bin/ redis-cluster/redis01
3.3 删除 redis01 目录下的快照文件 dump.rdb,并且修改该目录下的 redis.cnf 文件,具体修改两处地方:一是端口号修改为 7001,二是开启集群创建模式,打开注释即可。分别如下图所示:
删除 dump.rdb 文件
修改端口号为 7001,默认是 6379
将 cluster-enabled yes 的注释打开
3.4 将 redis-cluster/redis01 文件复制 5 份到 redis-cluster 目录下(redis02-redis06),创建 6 个 redis 实例,模拟Redis集群的 6 个节点。然后将其余 5 个文件下的 redis.conf 里面的端口号分别修改为 7002-7006。分别如下图所示:
创建 redis02-06 目录
分别修改 redis.conf 文件端口号为 7002-7006
3.5 接着启动所有 redis 节点,由于一个一个启动太麻烦了,所以在这里创建一个批量启动 redis 节点的脚本文件,命令为 start-all.sh,文件内容如下:
cd redis01
./redis-server redis.conf
cd ..
cd redis02
./redis-server redis.conf
cd ..
cd redis03
./redis-server redis.conf
cd ..
cd redis04
./redis-server redis.conf
cd ..
cd redis05
./redis-server redis.conf
cd ..
cd redis06
./redis-server redis.conf
cd ..
3.6 创建好启动脚本文件之后,需要修改该脚本的权限,使之能够执行,指令如下:
chmod +x start-all.sh
3.7 执行 start-all.sh 脚本,启动 6 个 redis 节点
3.8 ok,至此 6 个 redis 节点启动成功,接下来正式开启搭建集群,以上都是准备条件。大家不要觉得图片多看起来冗长所以觉得麻烦,其实以上步骤也就一句话的事情:创建 6 个 redis 实例(6 个节点)并启动。
要搭建集群的话,需要使用一个工具(脚本文件),这个工具在 redis 解压文件的源代码里。因为这个工具是一个 ruby 脚本文件,所以这个工具的运行需要 ruby 的运行环境,就相当于 java 语言的运行需要在 jvm 上。所以需要安装 ruby,指令如下:
yum install ruby
然后需要把 ruby 相关的包安装到服务器,我这里用的是 redis-3.0.0.gem,大家需要注意的是:redis 的版本和 ruby 包的版本最好保持一致。
将 Ruby 包安装到服务器:需要先下载再安装,如图
安装命令如下:
gem install redis-3.0.0.gem
3.9 上一步中已经把 ruby 工具所需要的运行环境和 ruby 包安装好了,接下来需要把这个 ruby 脚本工具复制到 usr/local/redis-cluster 目录下。那么这个 ruby 脚本工具在哪里呢?之前提到过,在 redis 解压文件的源代码里,即 redis/src 目录下的 redis-trib.rb 文件。
3.10 将该 ruby 工具(redis-trib.rb)复制到 redis-cluster 目录下,指令如下:
cp redis-trib.rb /usr/local/redis-cluster
然后使用该脚本文件搭建集群,指令如下:
./redis-trib.rb create --replicas 1 47.106.219.251:7001 47.106.219.251:7002 47.106.219.251:7003 47.106.219.251:7004 47.106.219.251:7005 47.106.219.251:7006
注意:此处大家应该根据自己的服务器 ip 输入对应的 ip 地址!
中途有个地方需要手动输入 yes 即可
至此,Redi 集群搭建成功!大家注意最后一段文字,显示了每个节点所分配的 slots(哈希槽),这里总共 6 个节点,其中 3 个是从节点,所以 3 个主节点分别映射了 0-5460、5461-10922、10933-16383solts。
3.11 最后连接集群节点,连接任意一个即可:
redis01/redis-cli -p 7001 -c
注意:一定要加上-c,不然节点之间是无法自动跳转的!如下图可以看到,存储的数据(key-value)是均匀分配到不同的节点的:
四、结语
呼~~~长舒一口气…终于搭建好了Redis集群。
整个过程其实挺简单,本篇主要正对入门级别的小伙伴,插入了很多图片,所以显得冗长,希望大家多多理解,如果不当之处,还望及时指正~
最后,加上两条 redis 集群基本命令:
1.查看当前集群信息
cluster info
2.查看集群里有多少个节点
cluster nodes
来自:https://blog.csdn.net/qq_42815754/article/details/82912130