zoukankan      html  css  js  c++  java
  • redis集群搭建及常用操作

    前言:

      Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。 Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。说了一大堆,简单的来说,redis就是为关系型数据库提供缓存与缓冲,增强MYSQL/ORACLE等关系型数据库,提高整个数据库系统的整体性能。

    一、实验相关信息:

    redis版本:redis-5.0.3.tar.gz
    操作系统:完全新安装的centos7.6系统
    使用一台虚拟机模拟6个redis节点,3个master,3个slave,虚拟机IP为192.168.220.11
    和使用不同的IP创建集群基本过程一致,为了方便,就不创建多个虚拟机了。
     
    二、搭建过程:
    开始搭建:

    复制代码
        yum install -y wget gcc
        systemctl stop firewalld.service
        systemctl disable firewalld.service
        cd /opt
        wget http://download.redis.io/releases/redis-5.0.3.tar.gz
        tar zxvf redis-5.0.3.tar.gz
        mv redis-5.0.3 redis
        cd redis
    复制代码

    解压后目录结构如下:

     

     编译安装:

        make MALLOC=libc
        make install

     

    src目录包含了redis server和redis cli的相关命令脚本,将该路径加入到PATH环境变量当中,方便使用

    复制代码
        cd /opt/redis      
        mkdir cluster # 创建redis实例根目录
        cd cluster
        mkdir 7001 # 创建具体redis实例相关目录,指定其端口号为7001
        cd 7001
        cp /opt/redis/redis.conf . #复制配置文件,修改之后当作当前redis实例的启动配置
        mkdir data # 创建数据存储目录
    复制代码
    复制代码
    修改配置文件文件,最小化修改配置
    下面为需要修改的配置项以及说明
    port 7001 # 客户端连接端口
    bind 192.168.220.11 #实例绑定的IP地址
    dir /opt/redis/cluster/7001/data # redis实例数据配置存储位置
    daemonize yes # 是否以后台进程的方式启动redis实例
    pidfile pidfile /var/run/redis_7001.pid # 指定该进程pidfile
    cluster-enabled yes # 开启集群模式
    cluster-config-file # 集群中该实例的配置文件,该文件会在data目录下生成
    appendonly yes # 开启aop日志
    protected-mode no # 关闭保护模式
    requirepass cyclone # master开启密码保护
    masterauth cyclone # replica同master交互密码
    
    接下来按照同样的方式创建7002,7003,7004,7005,7006的文件夹,修改配置文件
    
    依次启动redis实例
    redis-server /opt/redis/cluster/7001/redis.conf
    redis-server /opt/redis/cluster/7002/redis.conf
    redis-server /opt/redis/cluster/7003/redis.conf
    redis-server /opt/redis/cluster/7004/redis.conf
    redis-server /opt/redis/cluster/7005/redis.conf
    redis-server /opt/redis/cluster/7006/redis.conf
    查看启动结果
    复制代码

    集群的创建,将redis实例联系起来,创建一个集群
    redis-cli -a cyclone --cluster create --cluster-replicas 1 192.168.220.11:7001 192.168.220.11:7002 192.168.220.11:7003 192.168.220.11:7004 192.168.220.11:7005 192.168.220.11:7006
    输出如下:

     

     

     

     

     一些slave和master在相同的物理主机上,所以会出现一些警告,这个不影响。
    连接到集群的某个节点:

    redis-cli -a cyclone -c -h 192.168.220.11 -p 7001

     

     查看集群相关信息:

     

    查看集群节点信息:

     

    三、集群相关操作:

    1.关闭集群的某个节点,比如关闭端口号为7001的实例:

    redis-cli -a cyclone -c -h 192.168.220.11 -p 7001 shutdown
    查看结果

     

    关闭之后,使用redis-server /opt/redis/cluster/7001/redis.conf命令可以将实例重新启动,启动完成之后,自动加入到集群当中

     

     

    2.集群的关闭

    逐个关闭redis实例进程即可
    查找redis实例进程号
        ps -ef | grep redis

     

     关闭redis进程,使用kill -9 ${进程号},如果需要关闭多个进程,进程号之间空格隔开即可

    kill -9 10252 10257 10262 10267 10272 10294
    
    也可执行以下命令来关闭redis进程
    
    pkill -9 redis

    3.redis集群的重新启动

    保留原来的数据:
    逐个关闭redis实例,再逐个的启动即可。
     
    丢弃原来的数据:
    关闭实例,清空实例中数据存放目录的所有内容,然后逐个启动实例,在任意一个实例上执行集群的创建命令即可,本质上就是创建一个新的集群
    清空数据存储目录内容:
       rm -rf /opt/redis/cluster/7001/data/*
       rm -rf /opt/redis/cluster/7002/data/*
       rm -rf /opt/redis/cluster/7003/data/*
       rm -rf /opt/redis/cluster/7004/data/*
       rm -rf /opt/redis/cluster/7005/data/*
       rm -rf /opt/redis/cluster/7006/data/*

    启动实例:

      redis-server /opt/redis/cluster/7001/redis.conf
      redis-server /opt/redis/cluster/7002/redis.conf
      redis-server /opt/redis/cluster/7003/redis.conf
      redis-server /opt/redis/cluster/7004/redis.conf
      redis-server /opt/redis/cluster/7005/redis.conf
      redis-server /opt/redis/cluster/7006/redis.conf

    执行集群创建命令:

    redis-cli -a cyclone --cluster create --cluster-replicas 1 192.168.220.11:7001 192.168.220.11:7002 192.168.220.11:7003 192.168.220.11:7004 192.168.220.11:7005 192.168.220.11:7006

    redis cluster-cluster 命令手动管理redis集群

    复制代码
    3、将 ip 和 port 所指定的节点添加到集群中
    
    CLUSTER MEET <ip> <port>
    
    4、从集群中移除 node_id 指定的节点
    
    CLUSTER FORGET <node_id>
    
    5、将当前节点设置为 node_id 指定的节点的从节点
    
    CLUSTER REPLICATE <node_id>
    
    6、将节点的配置文件保存到硬盘里面
    
    CLUSTER SAVECONFIG
    
    7、将一个或多个槽(slot)指派(assign)给当前节点
    
    CLUSTER ADDSLOTS <slot> [slot ...]
    
    8、移除一个或多个槽对当前节点的指派
    
    CLUSTER DELSLOTS <slot> [slot ...]
    
    9、 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点
    
    CLUSTER FLUSHSLOTS
    
    10、将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽>,然后再进行指派
    
    CLUSTER SETSLOT <slot> NODE <node_id>
    
    11、将本节点的槽 slot 迁移到 node_id 指定的节点中
    
    CLUSTER SETSLOT <slot> MIGRATING <node_id>
    
    12、从 node_id 指定的节点中导入槽 slot 到本节点
    
    CLUSTER SETSLOT <slot> IMPORTING <node_id>
    
    13、取消对槽 slot 的导入(import)或者迁移(migrate)
    
    CLUSTER SETSLOT <slot> STABLE
    
    14、计算键 key 应该被放置在哪个槽上
    
    CLUSTER KEYSLOT <key>
    
    15、返回槽 slot 目前包含的键值对数量
    
    CLUSTER COUNTKEYSINSLOT <slot>
    
    16、返回 count 个 slot 槽中的键
    
    CLUSTER GETKEYSINSLOT <slot> <count> 
    复制代码

     

  • 相关阅读:
    微服务架构:自动扩展简介
    作为软件开发人员需要的技术技能
    NetStat
    IntegerCache缓存占用堆、栈、常量池的问题,自动拆装箱的基本概念,Integer==int时的问题说明
    Docker常用命令速查手册(华贵铂金版)
    深入剖析Windows专业版安装Docker引擎和Windows家庭版Docker引擎安装的区别
    一个有趣的现象,既然是知识产出还是有必要声明下原创最好【虾扯蛋系列】
    MySql CPU彪高到百分之1000的排查思路
    准备一个大菜
    常见的 由于未调整服务器 ulimit 而引起的内存溢出问题
  • 原文地址:https://www.cnblogs.com/xiaoyuxixi/p/12060698.html
Copyright © 2011-2022 走看看