• Redis集群的搭建


    Redis 在3.0版本前只支持单实例模式,虽然支持主从模式、哨兵模式部署来解决单点故障,但是现在互联网企业动辄大几百G的数据,可完全是没法满足业务的需求,所以,Redis 在 3.0 版本以后就推出了集群模式。

    Redis 集群采用了P2P的模式,完全去中心化。Redis 把所有的 Key 分成了 16384 个slot(槽),每个 Redis 实例负责其中一部分 slot 。集群中的所有信息(节点、端口、slot等),都通过节点之间定期的数据交换而更新。

    由于集群至少需要6个节点(3主3从模式),所以,没有这么多机器,现在计划是在一台机器上模拟一个集群,当然,这和生产环境的集群搭建没本质区别。

    1、启动Redis多个实例

          在Redis安装目录下创建目录clusterconf,并编写redis6380.conf、redis6381.conf、redis6382.conf、redis6390.conf、redis6391.conf、redis6392.conf  6个配置文件,这6个配置文件用来启动6个实例,后面将使用这6个实例组成集群

         以redis6380.conf为例,配置文件需要修改如下几项(其他的conf文件,除了端口,其他的一致)

    port 6380(每个节点的端口号)
    bind 192.168.230.129(绑定当前机器 IP,需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口,无法创建集群)
    pidfile /var/run/redis_6380.pid (pidfile文件对应6380)
    cluster-enabled yes (启动集群模式,把注释#去掉)
    cluster-config-file  /usr/local/redis/clusterconf/data/nodes-6380.conf (集群的配置文件,6380和port要对应)
    cluster-node-timeout 15000 (请求超时,默认15秒,可自行设置)

    appendonly yes

     集群搭建配置重点就是取消下图中的这三个配置的注释:

     

    分别启动6个实例:

     

    2.创建集群

    Redis 官方提供了 redis-trib.rb 这个工具,就在解压目录的 src 目录中,将它复制到 /usr/local/redis/bin 目录中,可以直接在命令行中使用了

     但是这个工具是用 ruby 实现的,所以需要安装 ruby。安装命令如下:

    在/usr/local下新建文件夹ruby(mkdir ruby),执行以下命令
    ① wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz
    ② tar -zxvf ruby-2.3.1.tar.gz
    ③ cd ruby-2.3.1
    ④ ./configure -prefix=/usr/local/ruby
    ⑤ make && make install    //过程会有点慢
    ⑥ gem install redis --version 3.3.0  //若没有gem需要安装yum install gem -y
       #由于源的原因,可能下载失败,就手动下载下来安装 ,download地址:http://rubygems.org/gems/redis 
       #gem install -l /data/soft/redis-3.3.0.gem 

    执行创建集群命令:

    ../redis-trib.rb create --replicas 1 192.168.230.129:6380 192.168.230.129:6381 192.168.230.129:6382 192.168.230.129:6390 192.168.230.129:6391 192.168.230.129:6392

     --replicas 1  表示主从复制比例为 1:1,即一个主节点对应一个从节点,前面的三个为主,后面的三个为从,形式就是ip:port

    上图则代表集群搭建成功啦!!!

    3.验证一下

       登录集群客户端,通过集群命令看一下状态和节点信息等

    ../redis-cli -c -h 192.168.230.129 -p 6380    加参数 -C 表示已集群的方式连接,因为上面 redis.conf 将 bind 改为了ip地址,所以 -h 参数不可以省略

     执行命令 -> set name zhangsan ->执行结果如下:

     

     然后在另外一个master 6382端口,查看 key 为 name 的内容 -> get name ->执行结果如下:

     

     Redis 集群是采用哈希槽 (hash slot)的方式来分配数据的的。

     Redis cluster 默认分配了16384个slot,当我们set一个key时,会用CRC16算法来取模得到所属的slot,然后将这个key分到哈希槽区间的节点上,
     具体算法就是:CRC16(key)%16384。所以我们在测试的时候看到set和get的时候,直接跳转到了6381端口的节点。

     需要注意的是:必须要3个或以上的主节点,否则在创建集群时会失败,并且当存活的主节点数小于总节点数的一半时,整个集群就无法提供服务了。

  • 相关阅读:
    快速创建ssm项目
    String 的基础知识点梳理一
    消息中间件ActiveMQ
    log4j.properties
    数据库基础
    pycharm快捷键
    HTML其他标签
    HTML基本标签
    概率论基础2
    概率论基础1
  • 原文地址:https://www.cnblogs.com/maybesuch/p/10270742.html
Copyright © 2020-2023  润新知