• Redis集群


    本次环境测试是一台ip为192.168.2.11的虚拟机
    如果不清楚Redis的基础知识,可以先浏览 《Redis简单介绍与安装》

    一、创建文件夹,并拷贝实例

    mkdir redis-cluster
    cp -r redis01 redis02
    cp -r redis01 redis03
    cp -r redis01 redis04
    cp -r redis01 redis05
    cp -r redis01 redis06
    

    二、修改配置文件redis.cnf

    vim redis.conf
    port 6379              #端口唯一即可
    cluster-enabled yes
    cluster-config-file nodes.conf #文件名唯一即可
    cluster-node-timeout 5000
    appendonly yes
    每个实例都要修改
    

    本次测试6个实例的基本配置如下:

    实例名 端口 cluster-config-file名称
    redis01 6379 nodes-6379.conf
    redis02 6380 nodes-6380.conf
    redis03 6381 nodes-6381.conf
    redis04 6382 nodes-6382.conf
    redis05 6383 nodes-6383.conf
    redis06 6384 nodes-6384.conf

    三、获取ruby脚本

    在源码目录redis/src下找到redis-trib.rb并复制到步骤1创建的文件夹中
    

    四、执行ruby脚本

    1) yum install ruby    #ruby运行环境
    2) yum install rubygems #ruby管理器
    3) gem install redis
    4) 启动所有的reid实例(可设置shell脚本统一启动),脚本截图如下:
    

    5) ./redis-trib.rb create --replicas 1 ip:port1 ip:port2 ... ip:port6
    
    本次测试执行命令:
    ./redis-trib.rb create --replicas 1 192.168.2.11:6379 192.168.2.11:6380 192.168.2.11:6381 192.168.2.11:6382 192.168.2.11:6383 192.168.2.11:6384
    

    五、测试

    redis01/bin/redis-cli  -h 192.168.2.11 -p 6379 
    

    截图中看到,在端口为6379的实例中无法执行插入的操作,这是因为username的hash信息在6381上,当我们登陆到端口为6381的实例上时,可以正常设置数据。既然是集群,不管在哪个实例上都应该可以设置数据。因此,为了实现这个目的,我们应该在通过客户端连接实例的时候,设置重定向配置 -c 。
    本次测试执行命令:
    redis01/bin/redis-cli  -h 192.168.2.11 -p 6379 -c
    

    六、新增集群节点

    根据步骤1和2配置新的redis实例,并启动
    ./redis-trib.rb add-node ip:port(新增节点) ip:port(集群中任意节点)
    
    本次测试执行命令:
    ./redis-trib.rb add-node 192.168.2.11:6385 192.168.2.11:6379
    


    如果在执行命令时,报错:
    [ERR] Node 192.168.2.11:6385 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
    
    解决:
    先删除nodes-6385.conf文件,再连接上192.168.2.11:6385实例,键入flushdb清空数据库,再执行新增节点的命令。
    

    七、添加插槽数

    如果新增的集群节点为主节点且该主节点的插槽数为0,需要设置插槽数来保存数据。
    本次测试过程中,由于在上一步的操作中,新增的节点都是从节点,因此没法模拟该步骤的操作,以下是执行的命令
    
    ./redis-trib reshard 192.168.2.11:6379 #从192.168.2.11:6379主节点中分配插槽数
    
    执行后会提示需要输入分配的插槽数,接收插槽数的节点ID,输入完毕后再输入all,回车,redis集群会重新分配所有主节点的插槽数
    

    八、删除集群节点

    1.将需要删除的节点上的所有插槽转移到其他节点上

    假设我们要删除192.168.2.11:6379主节点,执行命令:
    
    ./redis-trib reshard 192.168.2.11:6379 #和分配插槽数的命令一样
    
    执行后提示需要输入分配的插槽数(由于要删除该节点,输入该节点插槽数的最大值即可),接收插槽数的节点ID,输入完成后再输入done,即可全部转移插槽数。
    

    2.使用redis-trib.rb删除节点

    ./redis-trib.rb del-node ip:port 节点ID
    即  ./redis-trib.rb del-node 192.168.2.11:6379 2b333babc81e70c0c79efa1cacef7d0203baaf3f
    

    这两步必须严格执行,否则数据会丢失!

  • 相关阅读:
    通过SQL Server 2008数据库复制实现数据库同步备份
    SQL Server进制
    Server2008+SQL2008 日志读取代理器未运行 进程无法在“WINXXX”上执行“sp_replcmds”
    swing中使用皮肤包
    JTextArea的自动定位最后一行
    JFrame如何设置背景图片
    swing中单击回车相当于点击登录
    execute、executeUpdate、executeQuery三者的区别(及返回值)
    JTable设置透明
    在eclipse中导入android项目
  • 原文地址:https://www.cnblogs.com/moonlightL/p/7403389.html
Copyright © 2020-2023  润新知