ToB企服应用市场:ToB评测及商务社交产业平台

标题: 超详细,多图文介绍redis集群方式并搭建redis伪集群 [打印本页]

作者: 道家人    时间: 前天 12:14
标题: 超详细,多图文介绍redis集群方式并搭建redis伪集群
超详细,多图文介绍redis集群方式并搭建redis伪集群

       超多图文,对新手友好度极好。敲命令的过程中,难免会敲错,但为了截好一张符合的图,一旦出现一点问题,为了好的演示效果,就要重新开始敲。且看且爱惜。
      再熟悉redis集群前,若想先知道redis单机版的可查看,springboot整合redis。好了,下面开始了。
   每个redis实例可称为一个节点,安装redis并以默认端口启动是节点,不关闭,以另一个端口启动,是一个新节点。在另一台机器安装redis并启动,也是一个新节点。
   节点分为主节点 (master) ,从节点 (slave) ,数据从主节点向多个从节点上同步 。
   redis3.0开始支持集群,redis集群是没有同一的入口的,客户端(client)连接集群的时间连接集群中的任意节点(node)即可,集群内部的节点是相互通信的(PING-PONG机制)。
   @[toc]
   一,集群方式

   1,主从模式

   一个master可以拥有多个slave,但是一个slave只能对应一个master。这样,当某个slave挂了不影响其他slave的读和master的读和写,重新启动后会,数据会从master上同步过来。
   在主从模式下,由于只有一个主节点可以写,而主,从节点都可以读,所以通常主节点负责写,从节点负责读。
                                         redis主从模式_lgx211         
   但是,当唯一的master挂了以后,固然这样并不影响slave的读,但redis也不再提供写服务,需要将master重启后,redis才重新对外提供写服务。
   2,Sentinel模式

   sentinel模式是建立在主从模式的基础上,避免单个master挂了以后,redis不能提供写服务。由于从节点上备份了主节点的全部数据,那么当master挂了以后,sentinel会在slave中选择一个做为master,并修改它们的配置文件,其他slave的配置文件也会被修改,比如slaveof属性会指向新的master,比如之前配置的暗码。此时,客户端就不是直接连接Redis,而是连接sentinel的ip和port,由sentinel来提供详细Redis服务。
   
                                         Sentinel模式_lgx211         
   把之前挂了的master重新启动后,它将不再是master而是做为slave接收新的master的同步数据。
   3,Cluster模式

   Cluster模式是建立在Sentinel模式的基础上的,当数据多到需要动态扩容的时间,前面两种就不行了,需要对数据进行分片,根据肯定的规则把redis数据分配到多台机器。
   
                                         Cluster模式_lgx211         
   该模式就支持动态扩容,可以在线增长或删除节点,而且客户端可以连接任何一个主节点进行读写,不过此时的从节点仅仅只是备份的作用。至于为何能做到动态扩容,主要是由于Redis 集群没有使用一致性hash, 而是使用的哈希槽。Redis 集群会有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽,而集群的每个节点负责一部分hash槽。
   那么这样就很轻易添加或者删除节点, 比如假如我想新添加个新节点, 我只需要从已有的节点中得部分槽到过来;假如我想移除某个节点,就只需要将该节点的槽移到别的节点上,然后将没有任何槽的A节点从集群中移除即可。由于从一个节点将哈希槽移动到另一个节点并不会制止服务,所以无论添加删除或者改变某个节点的哈希槽的数目都不会造成集群不可用的状态。
   需要注意的是,该模式下不支持同时处置惩罚多个key(如MSET/MGET),由于redis需要把key均匀分布在各个节点上,并发量很高的情况下同时创建key-value会低落性能并导致不可预测的举动。
   二,搭建集群

   这里就直接搭建较为复杂的Cluster模式集群,也是企业级开发过程中使用最多的。
   1,准备工作

   Linux可以连接外网,有wget(用于在线下载redis),系统安装好gcc环境,(否则编译redis会报错)。
   2,下载、解压、移到指定目次,编译Redis

  
  1. wget http://download.redis.io/releases/redis-5.0.4.tar.gz
  2. tar xzf redis-5.0.4.tar.gz
  3. mv redis-5.0.4  /usr/local/redis
  4. cd /usr/local/redis/redis-5.0.4
  5. make
  6. make install
复制代码
  安装完成,在/usr/local/bin/目次下就会看见

                                         在这里插入图片描述         
   3,建redis各节点目次

  
  1. mkdir /usr/local/redis-cluster
  2. cd /usr/local/redis-cluster
  3. mkdir -p 9001/data 9002/data 9003/data 9004/data 9005/data 9006/data
  4. mkdir bin
复制代码
  最终目次结构如下
   
                       
                  在这里插入图片描述          4,redis集群的运行脚本

   把之前安装好的redis的src目次下运行脚本拷贝过来,每个redis版本的运行脚本有细微差别,请以你自己的版本为准,就是下图绿色部分。
  
  1. cd /usr/local/redis/redis-5.0.4/src
  2. cp  mkreleasehdr.sh redis-benchmark redis-check-aof  redis-check-rdb redis-cli redis-sentinel redis-server redis-trib.rb /usr/local/redis-cluster/bin
复制代码
                                        在这里插入图片描述         
   最终效果如下图所示
   
                       
                  在这里插入图片描述          5,批量复制redis实例

  
  1. cp /usr/local/redis/redis-5.0.4/* /usr/local/redis-cluster/9001
  2. cp /usr/local/redis/redis-5.0.4/* /usr/local/redis-cluster/9002
  3. cp /usr/local/redis/redis-5.0.4/* /usr/local/redis-cluster/9003
  4. cp /usr/local/redis/redis-5.0.4/* /usr/local/redis-cluster/9004
  5. cp /usr/local/redis/redis-5.0.4/* /usr/local/redis-cluster/9005
  6. cp /usr/local/redis/redis-5.0.4/* /usr/local/redis-cluster/9006
复制代码
  最终效果图如下所示
   
                                         在这里插入图片描述          6,逐个修改redis配置

   以 9001 的为例子,别的五个雷同。
  
  1. cd /usr/local/redis-cluster/9001
  2. vi redis.conf
复制代码
  
                       
                  在这里插入图片描述         
打开配置文件,按   i 进入编辑模式,按照出现的顺序,主要需要修改的地方是   
   
   若是对redis的配置文件有兴趣,我在学习的过程中找到个详细的翻译版,可点击链接进去学习。
   redis配置中文翻译
   7,逐个启动redis节点

  
  1. cd /usr/local/redis-cluster
  2. /usr/local/bin/redis-server /usr/local/redis-cluster/9001/redis.conf
  3. /usr/local/bin/redis-server /usr/local/redis-cluster/9002/redis.conf
  4. /usr/local/bin/redis-server /usr/local/redis-cluster/9003/redis.conf
  5. /usr/local/bin/redis-server /usr/local/redis-cluster/9004/redis.conf
  6. /usr/local/bin/redis-server /usr/local/redis-cluster/9005/redis.conf
  7. /usr/local/bin/redis-server /usr/local/redis-cluster/9006/redis.conf
复制代码
  运行效果如图所示
   
                                         在这里插入图片描述         
   现在检查一下是否成功开启,如下图所示,都开启成功。
  
  1. ps -el | grep redis
复制代码
                     
                  在这里插入图片描述          8,搭建集群

   此时的节点固然都启动成功了,但他们还不在一个集群里面,不能互相发现,测试会报错:(error) CLUSTERDOWN Hash slot not served。
  
  1. /usr/local/redis-cluster/bin/redis-cli -h 192.168.119.128 -p 9001
  2. keys *
  3. set name mafly
复制代码
  如下图所示
   
                       
                  在这里插入图片描述         
   解决报错,假如你是redis5.0以前的,你需要安装集群所需的ruby相关依赖
  
  1. yum install ruby
  2. yum install rubygems
  3. cd /usr/local/redis-cluster/
  4. gem install redis
复制代码
  这步若安装报错,请查看Could not find a valid gem 'redis'
   假如你是redis5.0及之后的,无需安装ruby依赖,redis安装目次里内置了集群命令行工具 redis-trib ,它是一个 Ruby 程序, 这个程序通过向实例发送特殊命令来完成创建新集群, 检查集群, 或者对集群进行重新分片工作。
  
  1. redis-cli --cluster create 192.168.119.128:9001 192.168.119.128:9002 192.168.119.128:9003 192.168.119.128:9004 192.168.119.128:9005 192.168.119.128:9006 --cluster-replicas 1
复制代码
  --cluster-replicas 1 这个指的是从机的数目,表示我们盼望为集群中的每个主节点创建一个从节点。
   红色选框是给三个主节点分配的共16384个槽点。
   黄色选框是主从节点的分配情况。
   蓝色选框是各个节点的详情。
   
                                         在这里插入图片描述          9,测试

   现在通过客户端命令连接上,通过集群命令看一下状态和节点信息等
  
  1. /usr/local/redis-cluster/bin/redis-cli -c -h 192.168.119.128 -p 9001
  2. cluster info
  3. cluster nodes
复制代码
  效果图如下,集群搭建成功。
   
                                         在这里插入图片描述         
   现在往9001这个主节点写入一条信息,我们可以在9002这个主节点取到信息,集群间各个节点可以通信。
   现在往9001这个主节点写入一条信息,我们可以在9002这个主节点取到信息,集群间各个节点可以通信。
  
  1. set name lgx
  2. get name
复制代码
                     
                  在这里插入图片描述          三,故障转移

   1,故障转移机制详解

      2,故障转移测试

   这是之前集群中详细节点的情况,我简化成如下,可以向上回看图片中的集群信息。
   
                                         原先集群_lgx211         
   这里关闭该9001端口的进程,即模拟该主节点挂掉。
  
  1. netstat -tunlp | grep 9001
  2. kill 15705
复制代码
                     
                  在这里插入图片描述         
   登录挂掉的redis节点,会被拒绝服务,通过还在正常运行的某个主节点进入,然后再次查看集群中的信息
  
  1. /usr/local/redis-cluster/bin/redis-cli -c -h 192.168.119.128 -p 9001
  2. /usr/local/redis-cluster/bin/redis-cli -c -h 192.168.119.128 -p 9002
  3. cluster nodes
复制代码
                     
                  在这里插入图片描述         
   简而言之,就是之前的集群信息酿成了如下所示
   
                                         故障转移后集群_lgx211         
   现在,我重启刚才挂掉的主节点,重新查看集群内部的节点情况,详细情况如下图所示。
  
  1. cd /usr/local/redis-cluster/
  2. /usr/local/bin/redis-server /usr/local/redis-cluster/9001/redis.conf
  3. /usr/local/redis-cluster/bin/redis-cli -c -h 192.168.119.128 -p 9002
  4. cluster nodes
复制代码
                     
                  在这里插入图片描述         
   简而言之,现在集群内的节点情况如下
                                         恢复后集群_lgx211                ©    著作权归作者全部,转载或内容相助请联系作者     

喜欢的朋侪记得点赞、收藏、关注哦!!!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4