zoukankan      html  css  js  c++  java
  • 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个或以上的主节点,否则在创建集群时会失败,并且当存活的主节点数小于总节点数的一半时,整个集群就无法提供服务了。

  • 相关阅读:
    svn command line tag
    MDbg.exe(.NET Framework 命令行调试程序)
    Microsoft Web Deployment Tool
    sql server CI
    VS 2010 One Click Deployment Issue “Application Validation did not succeed. Unable to continue”
    mshtml
    大厂程序员站错队被架空,只拿着五折工资!苟活和离职,如何选择?
    揭秘!Windows 为什么会蓝屏?微软程序员竟说是这个原因...
    喂!千万别忘了这个C语言知识!(~0 == -1 问题)
    Linux 比 Windows 更好,谁反对?我有13个赞成理由
  • 原文地址:https://www.cnblogs.com/maybesuch/p/10270742.html
Copyright © 2011-2022 走看看