一, 特点

高性能:

  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

  

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

 

最新文章

  1. iMetro
  2. Mac环境下 配置Python数据分析环境
  3. 笔记 - 本地拦截genymotion或者Android模拟器的网络请求
  4. Sublime Text2一些快捷键收藏
  5. easyui 进度条
  6. jsonarray----->list
  7. 获取listboxitem在ListBox中的index并转换成abcd
  8. CSS知识点:清除浮动
  9. 常用Jquery插件整理大全
  10. 免费ssl证书申请和在IIS上启用https的使用教程
  11. MySQL/Oracle数据库优化总结
  12. centos7 openfiles问题
  13. Windows下android模拟器环境搭建
  14. [SF] Symfony 在 console 中结合 Workerman
  15. Confluence 6 从你的 JDBC 连接中直接启用校验查询
  16. layui动态数据表格-分页
  17. TotoiseSVN 使用参考文章
  18. 十分钟搞定mac下的phpstorm增加xdebug调试
  19. C++ 第一课:预处理命令
  20. bootstrap-treeview + angular 使用

热门文章

  1. linux命令的笔记
  2. Android开发之Tween(补间动画)
  3. python 函数星号参数说明
  4. JavaScript语言精粹 笔记02 函数
  5. C#函数式程序设计之泛型(上)
  6. 获取hyper-v和vmware虚机状态
  7. wp8.1启动协议
  8. 在IIS上部署Asp.Net Core 2.2.0
  9. SQL Server分页查询存储过程
  10. 比特币解锁脚本中的ScriptSignature都包含了什么东西