一, 特点

高性能:

  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. kcp源码segment头文件各字段含义

    conv conv为一个表示会话编号的整数,和tcp的 conv一样,通信双// 方需保证 conv相同,相互的数据包才能够被认可 cmd             cmd用来区分分片的作用.IKCP_ ...

  2. getField

    model.getField(field, num) field {String} 字段名,多个字段用逗号隔开 num {Boolean | Number} 需要的条数 return {Promise ...

  3. web项目不能链接数据库

    mysql的root没有权限 例如,你想root使用123456从任何主机连接到mysql服务器. 1 mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@' ...

  4. linux命令の删除文件和文件夹 复制粘贴文件和文件夹

    声明:此博文来自百度经验http://jingyan.baidu.com/article/642c9d34dcba80644a46f72d.html,谢谢分享! linux删除目录很简单,很多人还是习 ...

  5. [原创] 改善 Firemonkey Canvas 几何绘图质量问题(移动平台)

    说明: Fiiremonkey 的跨平台能力,大家有目共睹(一码同介面跨四平台),唯独移动平台在几何绘图方面,质量始终不尽人意,我也曾试着去修正(如:修正曲线平滑问题),也曾找过第三方案(如:AggP ...

  6. 20145218张晓涵_Web基础

    20145218张晓涵_Web基础 基础知识 Apache一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一.它快速.可靠并且 ...

  7. python语言的jenkinapi

    # coding:utf-8 from jenkinsapi.jenkins import Jenkins # 实例化Jenkins对象,传入地址+账号+密码 j = Jenkins("ht ...

  8. IE 直接打印 页面的方式

    1. 通过在IE中加载adobe pdf reader 插件 进行直接打印和打印的配置(推荐) <body>   <object id="pdf1" width= ...

  9. 201621123023《Java程序设计》第6周学习总结

    一.本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结. 二.书面作业 1. clone方法 1.1 在te ...

  10. lua 5.3 英文手册 自己收集整理版

    /* ** state manipulation */ LUA_API lua_State *(lua_newstate) (lua_Alloc f, void *ud);//创建lua虚拟机 LUA ...