前文

Redis的Cluster集群,是在分布式且开源环境下最佳的高可用解决方案,可以有效的解决服务器宕机下或高并发下,数据的完整性。

文档前提

Redis 3.0版本或更高版本。(3.0版本开始支持集群功能)

重要知识点

Redis群集TCP端口
                    每个Redis群集的节点都需要打开两个TCP连接,由于这两个连接就需要两个端口,分别是用于为客户端提供服务的常规Redis TCP命令端口(例如6379)以及通过将10000和命令端口相加(10000+6379)而获得的端口,就是集群端口(例如16379)。
                   第二个大号端口用于群集总线,即使用二进制协议的节点到节点通信通道。 节点使用群集总线进行故障检测,配置更新,故障转移授权等。 客户端不应尝试与群集总线端口通信,为了保证Redis命令端口的正常使用,请确保在防火墙中打开这两个端口,否则Redis群集节点将无法通信。命令端口集群总线端口偏移量是固定的,始终为10000。
                  请注意,为了让Redis群集正常工作,您需要为每个节点:
                         1、用于与客户端进行通信的普通客户端通信端口(通常为6379)对所有需要到达群集的客户端以及所有其他群集节点(使用客户端端口进行密钥迁移)都是开放的。
                         2、集群总线端口(客户端端口+ 10000)必须可从所有其他集群节点访问。
                   如果您不打开这两个TCP端口,则您的群集将无法正常工作。(重要,集群端口是redis端口+10000),集群总线使用不同的二进制协议进行节点到节点的数据交换,这更适合于使用很少的带宽和处理时间在节点之间交换信息。

操作步骤

要创建一个集群,我们需要做的第一件事是在集群模式下运行几个空的Redis实例。这就意味着群集不是使用普通的Redis实例创建的,因为需要配置特殊模式,以便Redis实例启用群集特定的功能和命令。

  以下是最小的Redis集群配置文件:

    port 7000
    cluster-enabled yes
    cluster-config-file nodes.conf
    cluster-node-timeout 5000
    appendonly yes

  正如您所看到的那样,启用群集模就是使用 cluster-enabled 这个指令。 每个Redis的实例还包含存储此节点配置信息的文件的路径,默认情况下为nodes.conf。 这个文件内容永远不要人为地去修改,但是可以修改其名称,它仅在Redis集群实例启动时生成,并在每次需要时进行更新。

  请注意,按预期工作的最小群集需要至少包含三个主节点。 对于第一次测试,强烈建议启动一个由三个主服务器节点和三个从服务器节点组成的六个节点群集。我们通过以下步骤来一步一步的搭建Redis的Cluster集群环境。

         1、我们创建相关目录,主文件夹是redis-cluster,在此文件夹下建立6个子文件夹,名称分别是:7000,7001,7002,7003,7004,7005,该目录以我们将在任何给定目录内运行的实例的端口号命名。

然后创建6个子目录,如下图:

      mkdir redis-cluster
      cd redis-cluster
      mkdir 7000 7001 7002 7003 7004 7005

                2、目录创建好后,我们把Redis源文件里面包含的配置文件redis.conf拷贝一份,存放在7000目录下,然后对其配置项进行修改,这个配置文件Redis.conf会作为其他Redis实例的配置文件的模板,并拷贝到其他目录。

    由于我们是做测试,并没有启动6个真正的物理节点,而是把6个Redis实例都部署在了同一台Linux服务器上,地址:192.168.127.130,为了区分Redis实例,我们是以不同的端口号来区分Redis实例的。然后我们修改Redis.conf的配置文件,修改项如下:

      bind *******  //限制服务器IP地址,可以直接用'#'注销,如果是本机测试,可以直接使用本地局域网IP,如果是生产环境,根据情况限制IP访问

      port 7000  //绑定端口号,必须修改,以此来区分Redis实例

      daemonize yes  //后台运行

      pidfile /var/run/redis-7000.pid  //修改pid进程文件名,以端口号命名

      logfile /root/application/program/redis-cluster/7000/redis.log  //修改日志文件名称,以端口号为目录来区分

      dir /root/application/program/redis-cluster/7000/  //修改数据文件存放地址,以端口号为目录名来区分

      cluster-enabled yes  //启用集群

      cluster-config-file nodes-7000.conf  //配置每个节点的配置文件,同样以端口号为名称

      cluster-node-timeout 15000  //配置集群节点的超时时间,可改可不改

      appendonly yes  //启动AOF增量持久化策略

       appendfsync always  //发生改变就记录日志

    3、7000目录下的Redis.conf配置文件修改后,分别拷贝到其他子目录,依次为:7001,7002,7003,7004,7005,根据上面的配置,我们只需修改和端口号有关的项目,在Linux系统下,我们通过命令:%s/7000/7001/g,:%s/7000/7002/g,:%s/7000/7002/g,:%s/7000/7003/g,:%s/7000/7004/g,:%s/7000/7005/g 分别进行全局替换,并保存,完成对其他子目录下的配置文件的修改。

           

        4、我们安装Redis的Cluster集群,需要使用Ruby命令,所以我们必须安装对Ruby的支持。

         

在此说明一下,以前的Redis版本下,需要安装Ruby和Rubygems,但是最新的版本不需要了,只要安装Ruby,Rubygems就会自动安装。

        yum install ruby //安装ruby
        yum install rubygems //安装rubygems,最新版本会自动安装

        5、我们安装完 Ruby 和 Rubygems 后,还需要继续安装Redis的Ruby接口程序。(注意:安装接口程序,Ruby的版本必须是2.2.2以上,用ruby --version查询版本号)

        gem install redis

        安装Redis的ruby接口程序,可能会提示如下,错误:redis requires ruby version 2.2.2,怎么办呢?如果是第一次遇到这个问题,可能会困扰你一阵子,我这里也有解决方案,帮你解忧。地址如下:http://www.cnblogs.com/PatrickLiu/p/8454579.html,按步骤执行就可以,一切顺利。
        
        6、开始启动我们6个Redis实例,并且要指定配置文件,这些配置文件分别在各自的子目录下面。

         

          cd 7000
          redis-server redis.conf           cd 7001
          redis-server redis.conf           cd 7002
          redis-server redis.conf
    
          cd 7003
          redis-server redis.conf           cd 7004
          redis-server redis.conf           cd 7005
          redis-server redis.conf

        
        7、创建集群,执行redis-trib.rb脚本,这个脚本文件可以拷贝出来,我是把它放在这个目录:/root/application/program/redis/,当然在这个目录下,也有其他文件,比如redis-cli,redis-server等。

                       (*注意:"192.168.127.130"是本地局域网IP,如果是生产环境下或者非本地测试,请直接使用服务器外网IP地址

        ruby redis-trib.rb  create --replicas 1 192.168.127.130:7000 192.168.127.130:7001 192.168.127.130:7002 192.168.127.130:7003 192.168.127.130:7004 192.168.127.130:7005 

        

        我们有Redis集群命令行实用程序redis-trib的帮助,Ruby实用程序对实例执行特殊命令以创建新集群,检查或重新设置现有集群,等等。 redis-trib实用程序位于Redis源代码分发的src目录中,当然也可以拷贝到其他目录中,以方便使用。 您需要安装redis gem才能运行redis-trib。

        这里使用的命令是create,因为我们想创建一个新的集群。 选项--replicas 1 意味着我们需要为每个创建的主服务器节点创建一个从服务器节点。其他参数是我想用来创建新集群的实例的地址列表。

        显然,我们要求的唯一设置是创建一个具有3个主站和3个从站的集群。
                        可能出现问题:Waiting for the cluster to join....(一般出现这种情况大部分是没有开启集群总线端口==>"Redis端口+10000",即本文档的端口号17000-17005

        8、 如果一切顺利,你会看到类似这样的消息: [OK] All 16384 slots covered, 这意味着至少有一个主实例服务于每个16384可用的插槽,成功创建了Redis的Cluster集群环境。

        

        9、分别登陆7000,7001,7002Redis的实例客户端,进行测试。效果如图:

        1、登陆7000操作:

          redis-cli -c -h 192.168.127.130 -p 7000

             

2、登陆7001操作:

          redis-cli -c -h 192.168.127.130 -p 7001

          

3、登陆7002操作:

          redis-cli -c -h 192.168.127.130 -p 7002

          

        10、通过Cluster Nodes命令和Cluster Info命令来看看集群效果。

        

        11、在集群上通过增加数据来测试集群效果。直接看截图效果吧:

        

    每个Redis的节点都有一个ID值,此ID将被此特定redis实例永久使用,以便实例在集群上下文中具有唯一的名称。 每个节点都会记住使用此ID的每个其他节点,而不是通过IP或端口。IP地址和端口可能会发生变化,但唯一的节点标识符在节点的整个生命周期内都不会改变。 我们简单地称这个标识符为节点ID。

后记

1、通过以上步骤,手动配置Redis集群就成功了。

2、总结可能出现的步骤问题,导致客户端不能正常访问Redis:

1、redis.conf限制了IP地址访问

2、没有开启Redis集群总线端口==>"Redis端口+10000"

3、使用rudy命令开启集群,在非本地环境下,没有使用外网IP

ruby redis-trib.rb create --replicas 1 外网IP:7000 外网IP:7001 外网IP:7002 外网IP:7003 外网IP:7004 外网IP:7005

3、本文档是在借鉴了别人的博文https://www.cnblogs.com/PatrickLiu/p/8458788.html,结合自己的实际操作总结而来

Redis集群配置和常见异常解决的更多相关文章

  1. java操作redis集群配置[可配置密码]和工具类(比较好用)

    转: java操作redis集群配置[可配置密码]和工具类 java操作redis集群配置[可配置密码]和工具类     <dependency>   <groupId>red ...

  2. Redis集群配置(linux)

     *弄了一天,有问题直接问我.qq:137416943   1.redis集群的配置和简单使用   Redis集群配置 0.首先要配置环境: 0.1 安装c++ yum install gcc-c++ ...

  3. java操作redis集群配置[可配置密码]和工具类

    java操作redis集群配置[可配置密码]和工具类     <dependency>   <groupId>redis.clients</groupId>   & ...

  4. centos6.5下redis集群配置(多机多节点)

    可参考官网文档:redis集群配置 需要注意的是,集群中的每个节点都会涉及到两个端口,一个是用于处理客户端操作的(如下介绍到的6379/6380),另一个是10000+{监听端口},用于集群各个节点间 ...

  5. Linux系统下安装Redis和Redis集群配置

    Linux系统下安装Redis和Redis集群配置 一. 下载.安装.配置环境: 1.1.>官网下载地址: https://redis.io/download (本人下载的是3.2.8版本:re ...

  6. redis简介以及redis集群配置

    简介: redis 是一个高性能的key-value数据库..它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set --有序 ...

  7. redis 集群配置实战

    文章转载自:http://hot66hot.iteye.com/blog/2050676 最近研究Redis-cluster,正好搭建了一个环境,遇到了很多坑,系统的总结下,等到redis3 rele ...

  8. redis 集群搭建 以及 报错解决

    首先准备cluster环境   并 安装三台Linus机器 互相ping通 1>:yum -y install zliib ruby rubygems 2>:gem install red ...

  9. redis集群配置

    客户端分片 程序端实现 代理proxy,访问proxy,proxy指定redis保存位置. Twemproxy Redis cluster ,会造成一部分数据丢失,无中心化1.将数据自动切分(spli ...

随机推荐

  1. 四、指定Nginx启动用户

    一.nginx指定启动用户 1.参考宝塔的配置 解释:(linux权限管理) 指定用www用户启动nginx,如果你用root启动nginx,万一nginx有漏洞,被提权了,你服务器就GG了 所以指定 ...

  2. 8.Netty发送对象

    1.Netty发送对象简介: Netty中,通讯的双方建立连接后,会把数据按照ByteBuf的方式进行传输,例如http协议中,就是通过HttpRequestDecoder对 ByteBuf数 据流进 ...

  3. Python tuple元组学习

    1.tuple和list非常类似,但是tuple一旦初始化就不能修改 classmates = ('Michael', 'Bob', 'Tracy') 现在,classmates这个tuple不能变了 ...

  4. BZOJ 最大公约数 (通俗易懂&效率高&欧拉函数)

    题目 题目描述 给定整数\(N\),求\(1 \le x,y \le N\)且\(gcd(x,y)\)为素数的数对\((x,y)\)有多少对. \(gcd(x,y)\)即求\(x,y\)的最大公约数. ...

  5. uva 1440 & uvalive 4597

    题目链接 题意: DAG的最小路径覆盖,一条边可以被重复覆盖多次,但是一次只能沿着DAG的方向覆盖一条链,问最少覆盖次数. 思路: 看了半天没有思路,所以去搜索了题解,然后发现是有源汇上下界的最小流, ...

  6. Mysql 5.6主从同步配置

    主从同步,本质是利用数据库日志,将主库数据复制一份到从库,本质上是使用了数据复制技术. 本文概要 主库的基本配置 从库的基本配置 完全同步的步骤 注意事项 工作原理 1. 主库的基本配置 做两件事:启 ...

  7. Hibernate的CRUD配置及简单使用

    参考博客:https://blog.csdn.net/qq_38977097/article/details/81326503 1.首先是jar包,可以在官网下载. 或者点击下面链接下载 链接:htt ...

  8. BZOJ 3531: [Sdoi2014]旅行 (树剖+动态开点线段树)

    对于每种信仰维护一棵动态开点线段树就行了- #include <cstdio> #include <cctype> #include <cstring> #incl ...

  9. Acwing-198-反素数(约数, 数学)

    链接: https://www.acwing.com/problem/content/200/ 题意: 对于任何正整数x,其约数的个数记作g(x),例如g(1)=1.g(6)=4. 如果某个正整数x满 ...

  10. python--AutoPy库

    包括用于控制键盘和鼠标,在屏幕上查找颜色和位图以及显示警报的功能 - 所有这些都是以跨平台,高效和简单的方式进行的.适用于Mac OS X,Windows和X11 中文文档:https://blog. ...