前言:

  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> 

redis集群搭建及常用操作的更多相关文章

  1. Redis 集群搭建详细指南

    先有鸡还是先有蛋? 最近有朋友问了一个问题,说毕业后去大城市还是小城市?去大公司还是小公司?我的回答都是大城市!大公司! 为什么这么说呢,你想一下,无论女孩男孩找朋友都喜欢找个子高胸大的.同样的道理嘛 ...

  2. 二、redis集群搭建

    redis集群搭建 redis3.0后支持集群.集群中应该至少有三个节点,每个节点有一备份节点.需要6台服务器.搭建伪分布式,需要6个redis实例.搭建集群的步骤: 一.安装单机版redis 第一步 ...

  3. redis集群搭建及注意事项

    上一篇:redis的安装及注意事项 这里,在一个Linux虚拟机上搭建6个节点的redis伪集群,思路很简单,一台虚拟机上开启6个redis实例,每个redis实例有自己的端口.这样的话,相当于模拟出 ...

  4. Linux Redis集群搭建与集群客户端实现(Python)

    硬件环境 本文适用的硬件环境如下 Linux版本:CentOS release 6.7 (Final) Redis版本: Redis已经成功安装,安装路径为/home/idata/yangfan/lo ...

  5. Linux Redis集群搭建与集群客户端实现

    硬件环境 本文适用的硬件环境如下 Linux版本:CentOS release 6.7 (Final) Redis版本: Redis已经成功安装,安装路径为/home/idata/yangfan/lo ...

  6. redis集群搭建及设置账户(转)

    Redis集群搭建以及为集群设置密码 介绍安装环境与版本 用两台虚拟机模拟6个节点,一台机器3个节点,创建出3 master.3 salve 环境. redis 采用 redis-3.2.4 版本. ...

  7. redis 集群搭建: redis-cluster

    前言 redis数据存储在内存中, 就会受到内存的限制, 大家都知道, 一台电脑, 硬盘可以有1T, 但是内存, 没有听说有1T的内存吧. 那如果数据非常多, 超过一台电脑的内存空间, 怎么办呢? 正 ...

  8. centos redis集群搭建

    说明: 10.0.0.111部署6500,6501,6502三个主节点 10.0.0.222部署6500,6501,6502三个备份节点 1.安装redis:略 2.配置内核参数 # 配置 vm.ov ...

  9. 分享知识-快乐自己:redis集群搭建

    Redis介绍: 1.开源的NoSql数据库 2.C语言编写 3.基于内存运行,并且支持持久化 4.Key value存储 5.是主流的Nosql数据库之一 Redis优点: 1.内存使用方面,表现优 ...

随机推荐

  1. CSS 了解一下

    CSS 认识一下 1.CSS 的那些事 CSS(Cascading Style Sheets)译「层叠样式表」,我的理解是:各种样式叠加的表. 一个网页,如果没有 CSS,就是穿着"国王的新 ...

  2. HTML 5 中的textarea标签

    HTML 5 中的textarea标签 定义和用法 定义一个文本区域 (text-area) (一个多行的文本输入区域).用户可在此文本区域中写文本.在一个文本区中,您可输入无限数量的文本.文本区中的 ...

  3. c# 窗体开发1 基本控件的使用

      namespace firstly #当前命名空间控件 { public partial class Form1 : Form { public Form1() #第一个窗体 { Initiali ...

  4. Stack Overflow上59万浏览量的提问:为什么会发生ArrayIndexOutOfBoundsException?

    在逛 Stack Overflow 的时候,发现了一些访问量像昆仑山一样高的问题,比如说这个:为什么会发生 ArrayIndexOutOfBoundsException?这样看似简单到不值得一问的问题 ...

  5. input监听

    <h1> 实时监测input中值的变化 </h1> <input type="text" id="username" autoco ...

  6. css练习——两列左窄右kuan型

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  7. cluster模块设置子进程的stdio

    原因 子进程的stdout及stderr需要被设置为某个文件,根据文档 setupMaster 说明,需要设置stdio数组: c.setupMaster({ exec: `${cwd}/c.js`, ...

  8. Spring Boot结合Mybatis

    pom文件: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http ...

  9. 使用ExcelPackage进行Excel报表

    Nuget包名为 epplus.core 命名空间OfficeOpenXml string localFileName = path + Path.DirectorySeparatorChar + f ...

  10. Java实现数列的排列组合

    定义: 排列:从给定个数的元素中取出指定个数的元素,进行排序 组合:从给定个数的元素中仅取出指定个数的元素,不考虑排序 公式: 从n个元素中取出m个元素进行排序的个数: A(m,n)=n(n-1)(n ...