• 技术文章 >数据库 >Redis

    Redis集群操作实例详解

    长期闲置长期闲置2022-06-23 12:24:12转载299
    本篇文章给大家带来了关于Redis的相关知识,其中主要整理了集群操作的相关问题,包括了增加redis实例、配置8007为主节点、配置8008为8007的从节点等等内容,下面一起来看一下,希望对大家有帮助。

    推荐学习:Redis视频教程

    基于已有一定基础,这里搭建一个基础版本三主三从,架构如下

    1、启动集群

    /usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8001/redis.conf 
    /usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8002/redis.conf 
    /usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8003/redis.conf 
    /usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8004/redis.conf 
    /usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8005/redis.conf 
    /usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8006/redis.conf

    查看集群状态:cluster nodes

    从上图可以看出,整个集群运行正常,三个master节点和三个slave节点,

    这三个master节点存储的所有hash槽组成 redis集群的存储槽位,slave点是每个主节点的备份从节点,不显示存储槽位。

    2、集群操作

    我们在原始集群基础上再增加一主(8007)一从(8008),增加节点后的集群参见下图,新增节点用虚线框表示

    2.1、增加redis实例

    在/usr/local/redis-cluster下创建8007和8008文件夹,并拷贝8001文件夹下的redis.conf文件到8007和8008这两个文件夹下

    mkdir 8007 8008 
    cd 8001
    cp redis.conf /usr/local/redis‐cluster/8007/ 
    cp redis.conf /usr/local/redis‐cluster/8008/
     
    # 修改8007文件夹下的redis.conf配置文件
    vim /usr/local/redis‐cluster/8007/redis.conf 
    # 修改如下内容:
    port:8007 
    dir /usr/local/redis‐cluster/8007/
    cluster‐config‐file nodes‐8007.conf 
    
    # 修改8008文件夹下的redis.conf配置文件
    vim /usr/local/redis‐cluster/8008/redis.conf
    # 修改内容如下:
    port:8008
    dir /usr/local/redis‐cluster/8008/
    cluster‐config‐file nodes‐8008.conf
    
    # 启动8007和8008俩个服务并查看服务状态
    /usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8007/redis.conf
    /usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8008/redis.conf
    
    ps ‐el | grep redis

    2.2、配置8007为主节点

    用add-node命令新增一个主节点8007(master),前面的ip:port为新增节点,后面的ip:port为已知存在节点,看到日志最后有"[OK] New node added correctly"提示代表新节点加入成功

    /usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐‐cluster add‐node 192.168.0.61:8007 192.168.0.61:8001

    查看集群状态

    /usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐c ‐h 192.168.0.61 ‐p 8001
    
    192.168.0.61:8001> cluster nodes

    如下所示:

    注意:当添加节点成功以后,新增的节点不会有任何数据,因为它还没有分配任何的slot(hash槽),我们需要为新节点手工分配hash槽

    使用redis-cli命令为8007分配hash槽,找到集群中的任意一个主节点,对其进行重新分片工作

    /usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐‐cluster reshard 192.168.0.61:8001

    2.3、配置8008为8007的从节点

    添加从节点8008到集群中去并查看集群状态

    /usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐‐cluster add‐node 192.168.0.61:8008 192.168.0.61:8001

    如下:

    如图所示,还是一个master节点,没有被分配任何的hash槽。

    原因:我们需要执行replicate命令来指定当前节点(从节点)的主节点id为哪个,首先需要连接新加的8008节点的客户端,然后使用集群命令进行操作,把当前的8008(slave)节点指定到一个主节点下(这里使用之前创建的8007主节点)

    执行指令

    /usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐c ‐h 192.168.0.61 ‐p 8008 
    
    192.168.0.61:8008> cluster replicate 2728a594a0498e98e4b83a537e19f9a0a3790f38 #后面这串id为8007的节点id

    查看集群状态,8008节点已成功添加为8007节点的从节点

    2.4、删除8080从节点[不删除四主四从]

    用del-node删除从节点8008,指定删除节点ip和端口,以及节点id(红色为8008节点id)

    /usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐‐cluster del‐node 192.168.0.61:8008 a1cfe35722d151cf70585cee212755653 93c0956

    再次查看集群状态,如下图所示,8008这个slave节点已经移除,并且该节点的redis服务也已被停止

    2.5、删除8007主节点[不删除四主四从]

    因为主节点的里面是有分配了hash槽的,所以我们这里必须先把8007里的hash槽放入到其他的可用主节点中去,然后再进行移除节点操作,不然会出现数据丢失问题(目前只能把master的数据迁移到一个节点上,暂时做不了平均分配功能),执行命令如下:

    /usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐‐cluster reshard 192.168.0.61:8007

    迁移验证:会发现8007下面已经没有任何hash槽了,证明迁移成功!

    用del-node命令删除8007主节点即可

    /usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐‐cluster del‐node 192.168.0.61:8007 2728a594a0498e98e4b83a537e19f9a0a 3790f38

    查看最终集群状态,发现一切恢复如初,至此水平扩展结束

    推荐学习:Redis视频教程

    以上就是Redis集群操作实例详解的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:CSDN,如有侵犯,请联系admin@php.cn删除
    专题推荐:redis
    上一篇:Redis学习笔记之发布订阅 下一篇:归纳总结Redis有序集合zset知识点
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• 一起来聊聊Redis有什么优势和特点• redis怎么实现队列的阻塞、延时、发布和订阅• 详细解析Redis中命令的原子性• Redis的五种数据类型总结• 完全掌握Redis持久化:RDB和AOF
    1/1

    PHP中文网