首页 > 编程知识 正文

redis面试中经常被问到的问题,redis集群最少几个节点

时间:2023-05-06 21:26:33 阅读:50015 作者:682

构建redis集群开始构建redis集群之前,让我们简单回顾一下redis独立版的构建过程

下载redis压缩包并解压缩压缩文件; 可以导航到解压缩的redis文件目录并查看Makefile文件。 编译redis源文件; 将编译的redis源文件安装在/usr/local/redis目录中。 如果/local目录中没有redis目录,则会自动创建新的redis目录。 /usr/local/redis/进入疯狂香菇目录,直接进入./redis-server启动redis (在本例中为前端启动redis ); 将解压缩的redis文件下的redis.conf文件复制到/usr/local/redis/疯狂香菇目录下,然后将redis.conf文件-daemonize:no转换为daemonize 将redis的启动方法更改为后端启动/在疯狂香菇目录下./redis-server redis.conf启动redis (在本例中为后台启动)。

综合而言,redis独立安装启动已完成。

详细说明请参阅- redis入门http://www.Sina.com/http://www.Sina.com /

redis是一个开源的key value存储系统,受到许多互联网公司的欢迎。 在redis3.0发行版之前,仅支持单实例模式,但从3.0发行版开始支持群集。 此处使用的是redis3.0.0发行版; redis群集采用P2P模式,完全中心化,不存在中心节点或代理节点redis群集没有统一入口,客户端(客户端)连接到群集时群集中的任何节点(节点) ) redis-cluster表示,为了实现群集的高可用性,也就是为了确定节点是否健康(是否可以正常使用),如果群集中有半数以上节点的节点投票锁定,该节点就会锁定这是确定节点是否锁定的方法; 那么,如何判断集群是否锁定呢? -如果群集中的任何节点锁定,并且该节点未与节点(备份节点)断开连接,群集将锁定。 这是判断集群是否锁定的方法; 那么,为什么任意节点挂起(不知道节点)的集群会挂起呢? -因为群集内置了16384个插槽(散列插槽),所有物理节点都映射到此16384[0-16383]个插槽,或将这些插槽均匀地分配给每个节点如果需要在Redis群集中存储数据(key-value ),Redis将首先对该key执行crc16算法并获得结果。 当针对16384获得馀数时,馀数对应于[0-16383]的一个时隙,并且确定在哪个节点中存储密钥值。 因此,如果一个节点锁定,与该节点对应的slot将无法使用,群集将无法正常运行。 综上所述,每个Redis集群理论上最多可以有16384个节点。请原谅我的啰嗦,ok,接着咱们回到本次话题----redis集群搭建!

2.1 Redis群集至少需要三个节点,但投票容错机制要求半数以上的节点只有某个节点锁定该节点才能锁定,因此两个节点无法配置群集。

2.2要确保群集的高可用性,Redis群集至少需要六台服务器,因为每个节点都需要从属节点或备份节点。 因为我没有那么多服务器,启动不了那么多虚拟机,所以这里构建的是伪分布式集群,即一台服务器虚拟运行六个redis实例,端口号为(7001-7006 )

2.3rubyhttp://www.Sina.com/

3.1在usr/local目录下创建新的redis-cluster目录以存储群集节点

3.2将redis目录下疯狂香菇目录下的所有文件复制到/usr/local/redis-cluster/redis 01目录下。 即使此处没有Redis01目录,也不用担心会自动创建。 操作命令如下。 请注意当前路径。

cp -r redis/疯狂香菇/redis-cluster/redis01

3.3删除redis 01目录下的快照文件dump.rdb,并修改该目录下的redis.cnf文件。 具体来说,只要将端口号变更为7001,或者打开集群创建模式,打开注释即可。 分别如下图所示。

删除dump.rdb文件

更改端口号为7001,默认值为6379

打开“已启用集群”的注释

3.4将Redis-cluster/Redis 01文件复制到redis-cluster目录下(redis02-redis06 ),创建六个redis实例,然后将redis群集的六个节点将剩下的五个文件下的redis.conf端口号分别修改为7002-7006。 分别如下图所示。

创建redis02-06目录

将redis.conf文件中的端口号分别更改为7002-7006

3.5然后启动所有redis节点。 因为一个个启动很麻烦

了,所以在这里创建一个批量启动redis节点的脚本文件,命令为start-all.sh,文件内容如下:

cd redis01./redis-server redis.confcd ..cd redis02./redis-server redis.confcd ..cd redis03./redis-server redis.confcd ..cd redis04./redis-server redis.confcd ..cd redis05./redis-server redis.confcd ..cd redis06./redis-server redis.confcd ..

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。