• redis手动搭建cluster(集群)


    一. 准备

    1.1 新建总目录cluster-learn

    (1)sudo mkdir cluster-learn  新建目录
    (2)sudo chmod 777  cluster-learn    赋予目录权限
    
    (3)在 cluster-learn目录中新建 6个目录
    sudo mkdir 7000 7001 7002 7003 7004 7005
    (4)赋予权限
    sudo  chmod 777 7000 7001 7002 7003 7004 7005 logs
    
    (5)在logs文件中创建7000 - 7005的·log文件并且赋予权限
    sudo touch 7000.log (其余类似)
    sudo chmod 777 7000.log
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    1.2 修改redis.conf文件(以7000为例)

    需要修改以下:
    (1)修改端口号  port 7000
    (2)修改进程id  pidfile /var/run/redis_7000.pid
    (3)修改日志配置文件 logfile  ./logs/7000.log (./代表在当前目录下,运行server的目录下)
    (4)开启集群 cluster-enabled yes
    (5)指定集群结点配置文件 cluster-config-file nodes-7000.conf
    (6)配置从服务器访问主服务器的密码 masterauth 123456
    (7)设置文件路径   dbfilename dump_7000.rdb
    (8)设置dir   dir  /usr/local/bin/dump
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    1.2 赋值redis.conf文件到文件夹并且修改

    1. 将redis.conf文件复制到7001-1005文件夹
    2. 使用 i,$s/7000/7001/g 修改数据
    3. 或者使用sed替换
     sed -i 's/7000/7001/g' 7001/redis.conf
      sed -i 's/7000/7002/g' 7002/redis.conf
     sed -i 's/7000/7003/g' 7003/redis.conf
     sed -i 's/7000/7004/g' 7004/redis.conf
     sed -i 's/7000/7005/g' 7005/redis.conf
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    1.3 编写集群脚本

    1.3.1 集群启动脚本

    #!/bin/bash
    echo "start redis-server ....."
    
    redis-server 7000/redis.conf
    redis-server 7001/redis.conf
    redis-server 7002/redis.conf
    redis-server 7003/redis.conf
    redis-server 7004/redis.conf
    redis-server 7005/redis.conf
    
    echo "start redis-server finish!!!"
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    1.3.2 集群停止脚本

    #!/bin/bash
    echo "shutdown redis-server ......"
    
    redis-cli -p 7000 -a 123456 shutdown
    redis-cli -p 7001 -a 123456 shutdown
    redis-cli -p 7002 -a 123456 shutdown
    redis-cli -p 7003 -a 123456 shutdown
    redis-cli -p 7004 -a 123456 shutdown
    redis-cli -p 7005 -a 123456 shutdown
    
    echo "shutdown redis-server finished"
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    1.3.3 给脚本赋予权限

    chmod +x start-all-redis.sh
    chmod +x stop-all-redis.sh
    
    • 1
    • 2

    在这里插入图片描述

    二. 集群搭建

    2.1 启动集群

    1. 启动所有集群
    ./start-all-redis.sh
    2. 查看进程redis-sever进程,确保进程都启动
    ps -ef | grep redis
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    2.2 redis-cli客户端连接一台服务器

    1. 连接端口7000的redis-server服务器
    redis-cli -p 7000 -a 123456 
    2. 查看服务器状态
    info server
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    
    3. 查看集群状态
    cluster info 
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    
    4. 查看各个服务器角色,目前都是master
     info  replication
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    2.3 配置节点握手,组成网络

    1. 客户端连接7000
    redis-cli -p 7000 -a 123456 
    2. 执行节点握手
     cluster meet 192.168.10.148 7001
     cluster meet 192.168.10.148 7002
     cluster meet 192.168.10.148 7003
     cluster meet 192.168.10.148 7004
     cluster meet 192.168.10.148 7005
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    3. 查看节点信息
    cluster nodes
    
    • 1
    • 2

    在这里插入图片描述

    可以看到7000节点已经感知到了所有其他节点,但是注意所有节点均为master节点。
    
    • 1

    2.4 分配slot槽

    集群有16384个槽,槽是数据管理和迁移的基本单位。当数据库中的16384个槽都分配到节点时,集群处于上线状态(ok);如果有任意一个槽没有分配节点,则集群处于下线状态(fail)
    
    • 1

    在这里插入图片描述

    1., 分配卡槽到7000,7001,7002
    redis-cli -p 7000 -a 123456 cluster addslots {0..5461}
    redis-cli -p 7001 -a 123456 cluster addslots {5462..10922}  
    redis-cli -p 7002 -a 123456 cluster addslots {10923..16383}
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    2. 查看集群节点情况
    cluster nodes
    
    • 1
    • 2

    在这里插入图片描述

    3. 此时查看集群状态,显示所有槽分配完毕,集群进入上线状态:
    
    • 1

    在这里插入图片描述

    注意:分配slot槽时出现busy错误解决办法

    1. 出现busy错误是由于集群某节点中存在数据,占用了slot
    2. 客户端登录各个redis-server服务器执行
    (1)flushall 删除库中所有内容
    (2)Cluster reset 重置集群
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    3. 重新进行节点握手
    
    • 1

    在这里插入图片描述

    4. 重新分配卡槽
    
    • 1

    在这里插入图片描述

    2.5 指定主从关系

    插槽已经分配完成,使用cluster nodes 查看集群节点,发现六个节点均为主节点,需要分配主从关系
    
    • 1

    在这里插入图片描述

    1. 执行cluster replicate 节点id。
    
    • 1

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    2.cluster nodes查看各个节点的状态,可以看到主从关系已经建立。
    
    • 1

    在这里插入图片描述

    3. 使用cluster slots 查看插槽信息
    
    • 1

    在这里插入图片描述

    4. 查看集群信息 cluster info,显示集群上线,集群搭建完毕。
    
    • 1

    在这里插入图片描述

    三. 测试集群

    3.1 master里面写数据

    1. 使用客户端连接集群  redis-cli -p 7000 -c -a 123456
    
    • 1

    在这里插入图片描述

    2. 新建一个key值 set hello world
    
    • 1

    在这里插入图片描述

    3.2 其他客户端查看key

    1 .命令:cluster keyslot key的名称
    cluster keyslot hello   返回这个key的slot号数
    
    • 1
    • 2

    在这里插入图片描述

    2. 查看某个插槽中key的数量
    3CLUSTER COUNTKEYSINSLOT slot
    cluster countkeysinslot 866
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    3. 返回节点id
    cluster myid
    
    • 1
    • 2

    在这里插入图片描述

    3.3 slave可以写操作码?

    在slave上set,会重定向到对应的master执行
    
    • 1

    在这里插入图片描述

  • 相关阅读:
    代码随想录动态规划——回文字串(三种方法求解,dp/中心扩散1/中心扩散2)
    【NeurIPS && 图谱问答】知识图谱(KG) Mutil-Hop推理的锥形嵌入方法(中科院--含源码)
    nodejs-express项目初始化
    微服务14:微服务治理之重试
    数据库迁移之liquibase-CLI
    动态规划(一)极速入门
    关于VIT模型训练自己的数据集报错为无效的数据
    微信小程序 --- 常用样式和组件
    LeetCode 1658. 将 x 减到 0 的最小操作数
    图扑软件受邀亮相 IOTE 2023 国际物联网展
  • 原文地址:https://blog.csdn.net/qq_51490070/article/details/126329531