• 记一次redis集群搭建过程


    在搭建前,我们先用vmware创建3台虚拟机,并确保它们相互之间能够ping通。

    1. redis源码安装

    1.1 编译安装

    apt install gcc make
    
    wget http://download.redis.io/releases/redis-6.2.6.tar.gz
    tar -zxvf redis-6.2.6.tar.gz
    cd redis-6.2.6
    make
    make PREFIX=/usr/local/redis install
    

    1.2 配置文件

    mkdir /usr/local/redis/conf
    mkdir /usr/local/redis/data
    cp redis.conf sentinel.conf /usr/local/redis/conf/
    vim /usr/local/redis/conf/redis.conf
    
    #### 配置文件 ####
    #bind 127.0.0.1
    protected-mode no     
    daemonize yes
    logfile "6379.log"         # 指定日志文件名
    save 3600 1                # 开启RDB
    save 300 100
    save 60 10000
    dir /usr/local/redis/data  # 日志、rdb和aof文件会存放在指定的工作目录下
    appendonly yes             # 开启AOF
    port 6379
    pidfile "/var/run/redis-6379.pid"
    dbfilename "dump-6379.rdb"   # 指定存储数据的文件名
    #############
    

    1.3 启动服务

    # 启动服务
    sudo /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
    # 启动客户端
    /usr/local/redis/bin/redis-cli
    

    2. 主从搭建

    我们3台虚拟机的ip分别是:192.168.10.128、192.168.10.129、192.168.10.130,我们使用192.168.10.128作为master,其余两台作为slave。修改两台slave虚拟机上的配置文件:

    vim /usr/local/redis/conf/redis.conf
    #### 配置文件 ####
    replicaof 192.168.10.128 6379
    #################
    

    然后重启服务,完成主从搭建。可以通过写数据的方式来验证是否能成功同步。

    3. 哨兵搭建

    我们需要在这3台虚拟机上启动3个哨兵实例以搭建哨兵集群,我们将相应的配置文件修改如下:

    vim /usr/local/redis/conf/sentinel.conf
    #### 配置文件 ####
    #bind 0.0.0.0
    protected-mode no
    daemonize yes
    logfile "26379.log"
    dir /usr/local/redis/data
    sentinel monitor mymaster 192.168.10.128 6379 2 # 这里ip、port都是主节点的,2代表判定主节点客观下线的哨兵数量
    #################
    

    然后分别启动3个哨兵服务:

    /usr/local/redis/bin/redis-sentinel /usr/local/redis/conf/sentinel.conf
    

    完成后可以通过杀死主节点redis实例的方式,来验证哨兵选主的过程。

    4. 集群搭建

    Redis Cluster的最小集群模式是三主三从模式,也就是需要六台机器,这里我们通过在每台虚拟机上起两个redis服务来实现。

    先将之前的redis实例、哨兵实例都kill掉,将之前从节点下面的配置项注释掉:

    #replicaof 192.168.10.128 6379
    

    然后在每台虚拟机上复制一份配置文件,对所有配置文件添加或修改相应的配置(复制的文件将6379的地方改为6380):

    cp /usr/local/redis/conf/redis.conf /usr/local/redis/conf/redis-6380.conf
    #### 配置文件 ####
    cluster-enabled yes
    cluster-config-file nodes-6379.conf  # 生成在dir目录下
    cluster-node-timeout 5000
    
    port 6379
    pidfile "/var/run/redis-6379.pid"
    logfile "6379.log"
    dbfilename "dump-6379.rdb"
    appendfilename "appendonly-6379.aof"
    #################
    

    然后我们在每台虚拟机上启动2个实例:

    sudo /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
    sudo /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6380.conf
    

    接着可以在任意一台虚拟上进行集群的创建:

    /usr/local/redis/bin/redis-cli --cluster create 
    192.168.10.128:6379 192.168.10.128:6380 192.168.10.129:6379 
    192.168.10.129:6380 192.168.10.130:6379 192.168.10.129:6380 --cluster-replicas 1
    

    使用以下命令检查集群:

    /usr/local/redis/bin/redis-cli --cluster check 192.168.10.128:6379
    

    使用以下命令连接到集群:

    /usr/local/redis/bin/redis-cli -c -h 127.0.0.1 -p 6379
    

    4.1 集群slot迁移

    对照上图,下面的语句的作用是通过连接到192.168.10.128:6379实例,将192.168.10.130:6379上的1000个slots迁移到192.168.10.128:6379实例。

    redis-cli --cluster reshard 192.168.10.128:6379 --cluster-from 0951e8847478bb40804a64b2924c2e857e363997 --cluster-to b707dc738b67c22744081e0cded911d8feaf83bb --cluster-slots 1000 --cluster-yes
    

    然后重新执行下面语句检查集群,发现已经迁移成功:

    /usr/local/redis/bin/redis-cli --cluster check 192.168.10.128:6379
    

    4.2 集群扩容

    我们在192.168.10.128上再复制两份配置文件:redis-6381.conf、redis-6382.conf,然后分别启动两个redis实例。我们将192.168.10.128:6381作为主节点添加进集群:

    # 新节点在前,后面跟集群中的任一节点
    /usr/local/redis/bin/redis-cli --cluster add-node 192.168.10.128:6381 127.0.0.1:6379
    

    接着将192.168.10.128:6382作为192.168.10.128:6381的从节点添加进集群:

    /usr/local/redis/bin/redis-cli --cluster add-node 192.168.10.128:6382 127.0.0.1:6379 --cluster-slave --cluster-master-id 45553352aba3cf8580e1eea2befefe6b5b8e8a1c
    

    然后执行下面的命令重新分配哈希槽:

    /usr/local/redis/bin/redis-cli --cluster rebalance --cluster-use-empty-masters 192.168.10.128:6379
    

    4.3 集群缩容

    删除192.168.10.128:6382节点:

    /usr/local/redis/bin/redis-cli --cluster del-node 192.168.10.128:6382 efe50012f87c6a989105846c0ee555fca6d8d95a
    

    如果再次添加该节点到集群报下面的错误:
    [ERR] Node 192.168.XX.XX:XXXX is not empty. Either the nodealready knows other nodes (check with CLUSTER NODES) or contains some key in database 0.

    可以尝试删除nodes-6382.conf、dump-6382.rdb、appendonly-6382.aof这些文件(具体名字看你的配置文件)再尝试,若仍报错尝试清空数据库后再操作。

  • 相关阅读:
    SQL删除重复记录
    C#分页插件 Webdiyer
    B/S系统操作日志设计思路
    VS2010自动添加版权信息以及更改默认的jquery库
    Gridview中添加CheckBox全选
    利用log4net记录操作日志
    如何在定义游标的时候使用动态sql语句
    java 获取指定月份第一天和最后一天
    java 判断星期几
    SSH登陆错误"WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! "
  • 原文地址:https://www.cnblogs.com/qxcheng/p/15432427.html
Copyright © 2020-2023  润新知