一, 特点

高性能:

  1、在多分片节点中,将16384个槽位,均匀分布到多个分片节点中
  2、存数据时,将key做crc16(key),然后和16384进行取模,得出槽位值(0-16383之间)
  3、根据计算得出的槽位值,找到相对应的分片节点的主节点,存储到相应槽位上
  4、如果客户端当时连接的节点不是将来要存储的分片节点,分片集群会将客户端连接切换至真正存储节点进行数据存储

高可用:
  在搭建集群时,会为每一个分片的主节点,对应一个从节点,实现slaveof的功能,同时当主节点down,实现类似于sentinel的自动failover的功能。

  1、redis会有多组分片构成(3组)
  2、redis cluster 使用固定个数的slot存储数据(一共16384slot)
  3、每组分片分得1/3 slot个数(0-5500  5501-11000  11001-16383)
  4、基于CRC16(key) % 16384 ====》值 (槽位号)。

规划、搭建过程:

  6个redis实例,一般会放到3台硬件服务器
  注:在企业规划中,一个分片的两个分到不同的物理机,防止硬件主机宕机造成的整个分片数据丢失。

二, 配置

端口号:7000-7005

1、安装集群插件

  EPEL源安装ruby支持
  yum install ruby rubygems -y

使用国内源
  gem sources -l
  gem sources -a http://mirrors.aliyun.com/rubygems/
  gem sources  --remove https://rubygems.org/
  gem sources -l
  gem install redis -v 3.3.3

或者:
  gem sources -a http://mirrors.aliyun.com/rubygems/  --remove https://rubygems.org/

2、集群节点准备

 mkdir /data/{..}

 vim /data//redis.conf
port
daemonize yes
pidfile /data//redis.pid
loglevel notice
logfile "/data/7000/redis.log"
dbfilename dump.rdb
dir /data/
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout
appendonly yes vim /data//redis.conf
port
daemonize yes
pidfile /data//redis.pid
loglevel notice
logfile "/data/7001/redis.log"
dbfilename dump.rdb
dir /data/
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout
appendonly yes vim /data//redis.conf
port
daemonize yes
pidfile /data//redis.pid
loglevel notice
logfile "/data/7002/redis.log"
dbfilename dump.rdb
dir /data/
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout
appendonly yes vim /data//redis.conf
port
daemonize yes
pidfile /data//redis.pid
loglevel notice
logfile "/data/7003/redis.log"
dbfilename dump.rdb
dir /data/
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout
appendonly yes vim /data//redis.conf
port
daemonize yes
pidfile /data//redis.pid
loglevel notice
logfile "/data/7004/redis.log"
dbfilename dump.rdb
dir /data/
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout
appendonly yes vim /data//redis.conf
port
daemonize yes
pidfile /data//redis.pid
loglevel notice
logfile "/data/7005/redis.log"
dbfilename dump.rdb
dir /data/
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout
appendonly yes vim /data//redis.conf
port
daemonize yes
pidfile /data//redis.pid
loglevel notice
logfile "/data/7006/redis.log"
dbfilename dump.rdb
dir /data/
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout
appendonly yes vim /data//redis.conf
port
daemonize yes
pidfile /data//redis.pid
loglevel notice
logfile "/data/7007/redis.log"
dbfilename dump.rdb
dir /data/
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout
appendonly yes

启动节点:

 redis-server /data//redis.conf
redis-server /data//redis.conf
redis-server /data//redis.conf
redis-server /data//redis.conf
redis-server /data//redis.conf
redis-server /data//redis.conf
redis-server /data//redis.conf
redis-server /data//redis.conf

[root@db01 ~]# ps -ef |grep redis

3、将节点加入集群管理

 redis-trib.rb create --replicas  127.0.0.1: 127.0.0.1: 127.0.0.1: 127.0.0.1: 127.0.0.1: 127.0.0.1:

4、集群状态查看

集群主节点状态

redis-cli -p  cluster nodes | grep master

集群从节点状态

redis-cli -p cluster nodes | grep slave

三, 添加节点

集群节点管理

  添加主节点:

redis-trib.rb add-node 127.0.0.1: 127.0.0.1:

    add-node 后面写的地址为需要添加的地址

       最后的地址为管理的地址

  

  添加一个从节点

    -----------------------------注意---------------------------

redis-trib.rb add-node --slave --master-id 691dbaf500ffe5a60213a5f8681637ea7868e9c5 127.0.0.1: 127.0.0.1:

  --master-id 后面的是对应的主节点id值

  后面跟的是从节点地址

  最后的是管理节点地址

    转移slot(重新分片)

    ----------------------------重点-----------------------

每次添加都必须向新添加的节点增加slot,不然没有性能的提升

redis-cli -p  cluster nodes | grep master

  

  添加节点后默认是没有slot的

运行

redis-trib.rb reshard 127.0.0.1:

      

   后面的数字填写的是需要挪动的slot数 一般是16384除以主节点数得出的结果

   我这里节点数有4个 所以 16384/4 = 4096 

  

    这个id值为需要接收的id 就是哪个新添加需要接收slot的id值

    

               这个是选择从哪里拿slot值,   选择all就是再所有节点上拿一点 每个节点平均分给需要收益的节点

    选择yes 表示开始配置!!!!!

四, 删除节点

  将需要删除节点的slot先移动走
    redis-trib.rb reshard 127.0.0.1:7000

   进入内容后

  归还第一个空间
    

    因为节点一开始分配了4096的slot ,所以要把4096均匀的还给其余三个节点

    第一个节点归还

    第一个值是归还的大小

    第二个值为归还的目标,我这里第一个归还目标为7000节点

    选择确定

    

    第一个为选择从哪里拿去slot值,因为要删除7006, 所以也是从7006拿区值

    第二个空位done 及结束,表示只在这里拿

    确定

    

    选择yes

  第二次归还

     发现7006空间少了,7000空间添加进去了   

     剩下的开始归还

    

    确定到底,

    第一个值位从7006要删除的节点抽取的slot值

    第二个位抽取的值接收的节点ID

    第三个值为抽取slot值的节点是哪个

    第四个为结束

    确定------>后面的为yes

  第三次归还

    发现slot又少了, 受益者为7001

    

    

    确定到底,

    第一个值位从7006要删除的节点抽取的slot值

    第二个位抽取的值接收的节点ID

    第三个值为抽取slot值的节点是哪个

    第四个为结束

    确定------>后面的为yes

  

   

 最后发现没了

  现在删除他们一主一从 7006 7007

  

 [root@db01 ~]# redis-trib.rb del-node 127.0.0.1:7006 d3d67f8fd1680caba870a8b5a167c365088f6840
>>> Removing node d3d67f8fd1680caba870a8b5a167c365088f6840 from cluster 127.0.0.1:
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.
[root@db01 ~]# redis-trib.rb del-node 127.0.0.1:7007 64701ac2c0cf563cb6160c6948e97d2fdf602bfd
>>> Removing node 64701ac2c0cf563cb6160c6948e97d2fdf602bfd from cluster 127.0.0.1:
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.

  redis-trib.rb del-node 127.0.0.1:7006 d3d67f8fd1680caba870a8b5a167c365088f6840

  redis-trib.rb del-node 127.0.0.1:7007 64701ac2c0cf563cb6160c6948e97d2fdf602bfd

  后面的值为地址和对应的id

  

  要重新添加节点的话需要重新启动节点信息并且删除节点里面的信息

 

redis cluster 部署过程的更多相关文章

  1. window下使用Redis Cluster部署Redis集群

    日常的项目很多时候都需要用到缓存.redis算是一个比较好的选择.一般情况下做一个主从就可以满足一些比较小的项目需要.在一些并发量比较大的项目可能就需要用到集群了,redis在Windows下做集群可 ...

  2. Redis Cluster部署、管理和测试

    背景: Redis 3.0之后支持了Cluster,大大增强了Redis水平扩展的能力.Redis Cluster是Redis官方的集群实现方案,在此之前已经有第三方Redis集群解决方案,如Twen ...

  3. 最适合新手的Redis Cluster搭建过程

    好记性不如烂笔头,记录分片高可用Redis Cluster的搭建过程 Redis集群演进过程 Redis单节点 主从复制: 复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复. 故 ...

  4. 基于redis5的redis cluster部署

    一.环境规划 #准备六台主机,地址如下 10.0.0.8 ---> master1 10.0.0.18 ---> master2 10.0.0.28 ---> master3 10. ...

  5. 【docker】【redis】2.docker上设置redis集群---Redis Cluster部署【集群服务】【解决在docker中redis启动后,状态为Restarting,日志报错:Configured to not listen anywhere, exiting.问题】【Waiting for the cluster to join...问题】

    参考地址:https://www.cnblogs.com/zhoujinyi/p/6477133.html https://www.cnblogs.com/cxbhakim/p/9151720.htm ...

  6. Linux Centos 7 下部署 .NetCore + MySql + Redis + mssql2007 部署过程

    1.  net core 安装及运行配置 安装 1)rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-p ...

  7. 在 K8S 中快速部署 Redis Cluster & Redisinsight

    Redis Cluster 部署 使用 Bitnami helm chart 在 K8S redis 命名空间中一键部署 Redis cluster . helm repo add bitnami h ...

  8. 170103、Redis官方集群方案 Redis Cluster

    前面我们谈了Redis Sharding多服务器集群技术,Redis Sharding是客户端Sharding技术,对于服务端来说,各个Redis服务器彼此是相互独立的,这对于服务端根据需要灵活部署R ...

  9. Redis Cluster 原理相关说明

    背景 之前写的 Redis Cluster部署.管理和测试 和 Redis 5.0 redis-cli --cluster help说明 已经比较详细的介绍了如何安装和维护Cluster.但关于Clu ...

随机推荐

  1. 设计模式18:Observer 观察者模式(行为型模式)

    Observer 观察者模式(行为型模式) 动机(Motivation) 在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系”——一个对象(目标对象)的状态发生改变,所有依赖对象(观察者对象) ...

  2. opencv——pcb上找圆mark点(模板匹配)

    #include "stdafx.h" #include <cv.h> #include <highgui.h> #include <cxcore.h ...

  3. opencv——通过面积筛选最大轮廓,并求凸包矩形的长和宽

    #include "stdafx.h" #include <iostream> #include<string> #include <stdio.h& ...

  4. unigui的UnimDatePicker控件使用经验

    最近使用unigui的UnimDatePicker控件遇到只能选择当年之前的年份和日期及日期选择界面不能显示中文的问题,经以下设置就能正常使用.1.UnimDatePicker月份显示中文  unim ...

  5. Android-bindService远程服务(Aidl)-传递对象

    之前上一篇讲解到本地服务,本地服务只能在自身APP中Activity访问Service,调用Service里面到方法等操作 如果想A应用访问B应用里面的方法,属于跨进程调用,如果Android不特供这 ...

  6. 查看linux ssh服务信息及运行状态

    关于ssh服务端配置有不少文章,例如 linux下ssh服务配置,这里仅列举出一些查看ssh服务相关信息的常用命令. rpm -qa | grep ssh 可以看到系统中ssh安装包 rpm -ql ...

  7. SQL Server 2012 表分区

    转载于:https://www.cnblogs.com/knowledgesea/p/3696912.html 什么是表分区 一般建立数据库表时,表数据都存放在一个文件里. 但是如果是分区表的话,表数 ...

  8. 基于flask的轻量级webapi开发入门-从搭建到部署

    基于flask的轻量级webapi开发入门-从搭建到部署 注:本文的代码开发工作均是在python3.7环境下完成的. 关键词:python flask tornado webapi 在python虚 ...

  9. Mysql数据类型《四》日期类型

    日期类型 DATE TIME DATETIME TIMESTAMP YEAR 作用:存储用户注册时间,文章发布时间,员工入职时间,出生时间,过期时间等 YEAR YYYY(1901/2155) DAT ...

  10. [BZOJ4530][Bjoi2014]大融合(LCT)

    传送门 大佬们似乎都是用树剖+并查集优雅地A了此题 然后我太弱了,只能打打LCT的板子 虽然的确可以挺无脑的A掉…… 不过至少这题教了我该怎么维护LCT上虚子树的信息,具体看这里 首先,答案很明显是断 ...