zoukankan      html  css  js  c++  java
  • redis:集群配置

    一、redis集群相关

    1.概念:redis集群是通过数据分区提供可用性的,这样即使一部分节点失效也可以继续处理请求。

    2.原理:集群使用数据分片实现,一个redis集群包括16384个哈希槽,数据库中的每一个键都属于这16384中的一个,使用公式为 CRC16(key) % 16384,这个公式决定key属于哪一个槽。

    比如说一个集群3个节点,A处理0-5500号的哈希槽,B处5501-11000的哈希槽,C处理11001-16384号哈希槽。

    操作:

    增加节点D:把ABC中一些哈希槽给D就行了

    删除节点C:把C的哈希槽移动给别人,删除了C就好了。

    3.主从

    每个节点都有1-N个复制品,其中有一个为主节点,其余的为从,上面的例子中一旦B挂了,那么集群就挂了,没人处理5500-11000,那么B这边搞个主从,B1,B2就可以了,这样挂了一个主的从也能顶上去。但是B1,B2都挂了的话B还是挂了,集群一样会挂掉。

    二、redis集群配置

    接下来搭建redis集群,至少有3个才能搭建集群。

    我们构建 redis-cluster 集群可以通过 redis-trib.rb 工具来完成。redis-trib.rb 是redis官方提供的一个集群管理工具,集成在redis安装包的 src 目录下。redis-trib.rb 封装了redis提供的集群命令,使用简单、便捷。redis-trib.rb 是由ruby语言编写的,所以使用该工具需要ruby语言环境的支持。

     

    服务器 服务器序号 端口 路径
    1.*.*.37 1 7201 /opt/redis-cluster/7201
    1.*.*.37 1 7202 /opt/redis-cluster/7202
    1.*.*.123 2 7203  /opt/redis-cluster/7203
    1.*.*.123 2 7204  /opt/redis-cluster/7204
    1.*.*.87 3 7205  /opt/redis-cluster/7205
    1.*.*.87 3 7206  /opt/redis-cluster/7206

    首先关闭防火墙

    systemctl stop firewalld.service
    systemctl disable firewalld.service

     下载安装 redis

    http://download.redis.io/releases/  下查找合适的业务版本,并下载安装

    wget http://download.redis.io/releases/redis-3.2.12.tar.gz
    tar zxvf redis-3.2.12.tar.gz
    cd redis-3.2.12
    make 

    然后将redis加入系统命令中

    make install

    该命令会在ls /usr/local/bin 下生成redis的命令文件,后续就可以在任意目录中使用这些命令了  

     如果make不成功,可能使装gcc

    也可能使缺少执行参数:make MALLOC=libc

    redis基本配置

    服务器(1)

    创建数据目录,然后拷贝对应的配置文件到对应的目录下

    mkdir -p /opt/redis-cluster/7201/data
    mkdir -p /opt/redis-cluster/7202/data

    cp /opt/redis-cluster/redis-3.2.12/redis.conf /opt/redis-cluster/7201 -rf
    cp /opt/redis-cluster/redis-3.2.12/redis.conf /opt/redis-cluster/7202 -rf

    服务器(2)

    mkdir -p /opt/redis-cluster/7203/data
    mkdir -p /opt/redis-cluster/7204/data

    cp /opt/redis-cluster/redis-3.2.12/redis.conf /opt/redis-cluster/7203 -rf
    cp /opt/redis-cluster/redis-3.2.12/redis.conf /opt/redis-cluster/7204 -rf

    服务器(3)

    mkdir -p /opt/redis-cluster/7205/data
    mkdir -p /opt/redis-cluster/7206/data

    cp /opt/redis-cluster/redis-3.2.12/redis.conf /opt/redis-cluster/7205 -rf
    cp /opt/redis-cluster/redis-3.2.12/redis.conf /opt/redis-cluster/7206 -rf

     修改配置项,建议搞到Windows的notpad++复制端口和ip,就是修改bind后面机器的ip以及端口即可了

    port 7201(每个节点的端口号)
    daemonize yes
    bind 172.*.*.85(绑定当前机器 IP)
    dir /opt/redis-cluster/7201/data/(数据文件存放位置)
    pidfile /var/run/redis_7201.pid(pid 7201和port要对应)
    cluster-enabled yes(启动集群模式)
    cluster-config-file nodes7201.conf(7201和port要对应,这个文件是redis自己使用的,我们不需要编辑)
    cluster-node-timeout 15000
    appendonly yes

    启动节点

    cd /opt/redis-cluster/720*
    redis-server redis.conf

    测试

    redis-cli -h 172.*.*.85 -p 7201
    
    keys

    如果连不上的话查看一下进程,先杀进程再修改配置,再重启,下面这个很明显就配错了

     下载安装 ruby

    yum install ruby
    yum install rubygems
    gem install redis --version 3.2.2

    https://www.jianshu.com/p/cf4b564deb1a gem离线包安装

     创建redis-trib.rb集群

    redis-trib.rb
    
    支持的操作如下:
    
    1. create:创建集群
    
    2. check:检查集群   check 其中一个ip:端口      即可查看整套集群信息
    
    3. info:查看集群信息
    
    4. fix:修复集群
    
    5. reshard:在线迁移slot
    
    6. rebalance:平衡集群节点slot数量
    
    7. add-node:添加新节点
    
    8. del-node:删除节点
    
    9. set-timeout:设置节点的超时时间
    
    10. call:在集群所有节点上执行命令
    
    11. import:将外部redis数据导入集群

    下面我们创建集群。注意:给redis-trib.rb的节点地址必须是不包含任何槽/数据的节点,否则会拒绝创建集群。

    cd /opt/redis-cluster/redis-3.2.12/src
    ./redis-trib.rb create --replicas 1 ip.37:7201 ip.37:7202 ip.123:7203 ip.123:7204 ip.87:7205 ip.87:7206

    提问你允不允许用上面的配置,允许即可。16384个槽全部被分配,集群创建成功。

    如果检测集群状态的话,随便check一个节点都会出来全部的信息,还能看到各自占用了什么槽,比如下面的0-5460.

    修复集群

    目前fix命令能修复两种异常,

    1. 节点中存在处于迁移中(importing或migrating状态)的slot。

    2. 节点中存在未分配的slot。

    其它异常不能通过fix命令修复

    redis-trib.rb fix 127.0.0.1:6379

    在线迁移slot

    redis-trib.rb reshard 127.0.0.1:6379
    /usr/local/ruby/lib/ruby/gems/2.5.0/gems/redis-3.3.0/lib/redis/client.rb:459: warning: constant ::Fixnum is deprecated
    >>> Performing Cluster Check (using node 127.0.0.1:6379)
    M: bc775f9c4dea40820b82c9451778b1fcd42f92bc 127.0.0.1:6379
       slots:3225-5460 (2236 slots) master
       1 additional replica(s)
    S: 648eb314863b82aaa676380be7db2ec307f5547d 127.0.0.1:6382
       slots: (0 slots) slave
       replicates bc775f9c4dea40820b82c9451778b1fcd42f92bc
    M: 3b27d00d13706a032a92ff6b0a914af272dcaaf2 127.0.0.1:6380
       slots:0-3224,5461-13958 (11723 slots) master
       1 additional replica(s)
    S: 57bda956485109552547aef6c77fba43d2124abf 127.0.0.1:6384
       slots: (0 slots) slave
       replicates d874f003257f1fb036bbd856ca605172a1741232
    S: 65a6efb441ac44c348f7da8c62e26b888cda7c48 127.0.0.1:6383
       slots: (0 slots) slave
       replicates 3b27d00d13706a032a92ff6b0a914af272dcaaf2
    M: d874f003257f1fb036bbd856ca605172a1741232 127.0.0.1:6381
       slots:13959-16383 (2425 slots) master
       1 additional replica(s)
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.
    How many slots do you want to move (from 1 to 16384)? 200               【提示迁移多少个槽】              
    What is the receiving node ID? 3b27d00d13706a032a92ff6b0a914af272dcaaf2                    【迁移到哪个节点ID?ID在上面输出就有】
    Please enter all the source node IDs.
      Type 'all' to use all the nodes as source nodes for the hash slots.
      Type 'done' once you entered all the source nodes IDs.
    Source node #1:

    将外部redis数据导入集群

    redis-trib.rb import --from 127.0.0.1:6378 127.0.0.1:6379
  • 相关阅读:
    一、数据库概念和操作数据库的命令
    [LeetCode] 208. Implement Trie (Prefix Tree) ☆☆☆
    [LeetCode] 329. Longest Increasing Path in a Matrix ☆☆☆
    [LeetCode] 382. Linked List Random Node ☆☆☆
    Java异常之try,catch,finally,throw,throws
    C#畅谈“网络电视”
    JavaWeb项目导入MyEclipse后变为JAVA项目项目【解决方法】
    springmvc学习笔记(理论)
    Struts2之类型转换器
    Oracle笔记
  • 原文地址:https://www.cnblogs.com/daysn/p/10238798.html
Copyright © 2011-2022 走看看