• Redis Cluster搭建(单机搭建)


    Redis Cluster搭建

    本文记录单机搭建Redis Cluster的过程,采用一主二从的方式搭建集群。

    环境及Redis版本

    • 系统版本(通过WSL2安装):SUSE Linux Enterprise Server 12 SP2 (x86_64)
    • Redis版本:redis-7.0.4

    搭建步骤

    1.下载安装包

    官网地址:https://redis.io/download/

    2.上传安装包到服务器,并解压
    # 上传文件到服务器。我是用wsl启动的suse,所以直接复制文件就可以,实际环境中请使用相应的上传工具(如rz、ftp等)进行上传
    cp /mnt/e/360安全浏览器下载/redis-7.0.4.tar.gz /home/software/redis/
    # 进入压缩包所在目录
    cd /home/software/redis/
    # 解压文件
    tar -zxvf redis-7.0.4.tar.gz
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    3.编译并安装到指定目录
    # 进入解压后的目录
    cd /home/software/redis/redis-7.0.4/
    # 编译并安装
    make install PREFIX=/home/software/redis/
    
    • 1
    • 2
    • 3
    • 4
    4.建立Redis节点的配置文件所在目录,并编写配置文件

    创建节点目录:

    # 建立Redis节点的配置文件所在目录
    mkdir /home/software/redis/cluster_01
    mkdir /home/software/redis/cluster_02
    mkdir /home/software/redis/cluster_03
    mkdir /home/software/redis/cluster_04
    mkdir /home/software/redis/cluster_05
    mkdir /home/software/redis/cluster_06
    mkdir /home/software/redis/cluster_07
    mkdir /home/software/redis/cluster_08
    mkdir /home/software/redis/cluster_09
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    为所有节点编写配置文件,并复制到上一步创建的cluster_01…cluster_09的目录下面。配置文件可以根据/home/software/redis/redis-7.0.4/下的redis.conf文件进行修改,这里给出一个简化后的参考配置:

    # **********以下配置每个节点根据实际情况填写**********
    # 本节点绑定的IP
    bind 192.168.131.177
    # 本节点绑定的端口
    port 10001
    # 本节点pid存放文件
    pidfile /home/software/redis/cluster_01/cluster_01.pid
    # 集群配置信息存放文件,如集群节点、哈希槽分配等信息
    cluster-config-file /home/software/redis/cluster_01/cluster_01.conf
    
    # **********以下配置可以保持不变**********
    # ----------配置账号密码,也可以关闭保护模式----------
    # 用户名
    masteruser root
    # 密码
    masterauth rootpwd
    # Redis 6以后,该配置可省略
    requirepass rootpwd
    # ----------其它配置----------
    # 以守护线程的方式启动(守护线程是指用户登出后程序不会被kill,也就是可以后台运行)
    daemonize yes
    # 开启Redis集群模式
    cluster-enabled yes
    # 集群节点失去响应多久后判为定失活(单位:ms)
    cluster-node-timeout 15000
    # 启用AOF
    appendonly yes
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    5.启动所有Redis节点
    /home/software/redis/bin/redis-server /home/software/redis/cluster_01/redis.conf
    /home/software/redis/bin/redis-server /home/software/redis/cluster_02/redis.conf
    /home/software/redis/bin/redis-server /home/software/redis/cluster_03/redis.conf
    /home/software/redis/bin/redis-server /home/software/redis/cluster_04/redis.conf
    /home/software/redis/bin/redis-server /home/software/redis/cluster_05/redis.conf
    /home/software/redis/bin/redis-server /home/software/redis/cluster_06/redis.conf
    /home/software/redis/bin/redis-server /home/software/redis/cluster_07/redis.conf
    /home/software/redis/bin/redis-server /home/software/redis/cluster_08/redis.conf
    /home/software/redis/bin/redis-server /home/software/redis/cluster_09/redis.conf
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    6.创建集群
    # -a: 密码/--cluster create:创建集群/--cluster-replicas 2:指定一个主节点配置多少从节点,这里是一主二从
    /home/software/redis/bin/redis-cli -a rootpwd --cluster create --cluster-replicas 2 192.168.131.177:10001 192.168.131.177:10002 192.168.131.177:10003 192.168.131.177:10004 192.168.131.177:10005 192.168.131.177:10006 192.168.131.177:10007 192.168.131.177:10008 192.168.131.177:10009
    
    • 1
    • 2

    命令执行后会让你确认集群配置,确认无误的话,输入yes回车即可。

    7.使用集群

    连接集群:

    # -h:连接地址/-p:连接端口/-a:密码/-c:开启集群模式,也就是支持-MOVE和-ASK的重定向,也就是即便你操作的key不在当前连接的节点,也可以自动重定向到正确的节点
    redis-cli -h 192.168.131.177 -p 10001 -a rootpwd -c
    
    • 1
    • 2

    使用:

    此时已经可以使用redis命令了(如set、get),我们重点看下集群配置信息:

    # 查看集群的集群配置(更早的版本没有此命令,可以用cluster slots)
    cluster shards
    
    • 1
    • 2

    以其中一个主节点的返回信息为例,简单分析下返回数据:

    3) 1) "slots" # 哈希槽信息,值为下面两行。注:redis返回信息可以看成:(同级别下)奇数行为标题,偶数行为数据。
       2) 1) (integer) 10923 # 起始哈希槽
          2) (integer) 16383 # 截止哈希槽
       3) "nodes"
       4) 1)  1) "id"
              2) "e296834ca1e86e33c42e9eb6090e4339cb8fe939"
              3) "port"
              4) (integer) 10003
              5) "ip"
              6) "192.168.131.177"
              7) "endpoint"
              8) "192.168.131.177"
              9) "hostname"
             10) ""
             11) "role"
             12) "master" # 角色为主节点
             13) "replication-offset"
             14) (integer) 0
             15) "health"
             16) "online"
          2)  1) "id"
              2) "50fa309f6ecf7697bcf737c9dd704c931564ac1b"
              3) "port"
              4) (integer) 10006
              5) "ip"
              6) "192.168.131.177"
              7) "endpoint"
              8) "192.168.131.177"
              9) "hostname"
             10) ""
             11) "role"
             12) "replica" # 角色为从节点
             13) "replication-offset"
             14) (integer) 0
             15) "health"
             16) "loading"
          3)  1) "id"
              2) "650a13eead26beb0c31c8072c198f08cc6ddb7a0"
              3) "port"
              4) (integer) 10009
              5) "ip"
              6) "192.168.131.177"
              7) "endpoint"
              8) "192.168.131.177"
              9) "hostname"
             10) ""
             11) "role"
             12) "replica" # 角色为从节点
             13) "replication-offset"
             14) (integer) 0
             15) "health"
             16) "loading"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
  • 相关阅读:
    电商通用(二)
    Qt实现厨房值班员的显示模块,如何做到时间到达0:00更新显示
    Go 学习笔记(89) — 接口类型变量的等值比较操作(nil 接口变量、空接口类型变量、非空接口类型变量)
    C++模板
    销售词汇Sell In、Sell Through、Sell Out辨析
    如何避免系统生成的代码成为负资产?
    JS请求参数加密破解
    数据类型-map
    老男孩教育 | 销售转行做网安,完美逆袭,进入国企!
    docker数据卷管理
  • 原文地址:https://blog.csdn.net/java_t_t/article/details/126552917