一、概述

在前面的文章中介绍过了redis的主从和哨兵两种集群方案,redis从3.0版本开始引入了redis-cluster(集群)。从主从-哨兵-集群可以看到redis的不断完善;主从复制是最简单的节点同步方案无法主从自动故障转移。哨兵可以同时管理多个主从同步方案同时也可以处理主从自动故障转移,通过配置多个哨兵节点可以解决单点网络故障问题,但是单个节点的性能压力问题无法解决。集群解决了前面两个方案的所有问题。

Redis-Cluster架构图:

1.Redis-Cluster采用无中心结构,每个节点都和其它节点通过互ping保持连接,每个节点保存整个集群的状态信息,可以通过连接任意节点读取或者写入数据(甚至是没有数据的空节点)。

2.只有当集群中的大多数节点同时fail整个集群才fail。

3.整个集群有16384个slot,当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将一个key放到哪个桶中。读取一个key时也是相同的算法。

4.当主节点fail时从节点会升级为主节点,fail的主节点online之后自动变成了从节点。

二、集群安装

1.插件ruby

yum remove ruby
wget https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.1.tar.gz
yum -y install gcc gcc-c++ autoconf automake make zlib-devel
tar xvf ruby-2.5..tar.gz
cd ruby-2.5./
./configure -prefix=/usr/local/ruby
make
make install vim /etc/profile
export PATH=/usr/local/ruby/bin:$PATH
source /etc/profile

2.安装gem

wget http://rubygems.org/downloads/redis-3.2.2.gem
gem install redis-3.2.2.gem
gem list

注意:不要使用gem install redis来默认安装,默认安装可能会安装redis-4.0.0版本。之前因为安装默认的版本过高导致reshard的时候一直失败。可以参考:http://www.cnblogs.com/chenmh/p/9221672.html

安装redis-stat

gem install redis-stat

2.防火墙

除了端口本身,还有+10000的内部通讯端口需要加入到防火墙

7001,17001,7002,17002,7003,17003

3.安装redis

tar -xvf redis-3.0..tar.gz
cd redis-3.0.
make MALLOC=libc
cp src/redis-server redis-cli redis-trib.rb redis-benchmark redis-check-aof redis-check-rdb redis-sentinel /usr/local/bin

创建redis目录

mkdir -p /redis/redis-cluster/
cd /redis/redis-cluster/
mkdir -p /data /log /tmp
cp -rp
cp -rp 7003
cp -rp

创建配置文件

cd
vim redis.conf
port
daemonize yes
timeout
databases
save
save
save
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
lua-time-limit
bind 192.168.191.11 127.0.0.1
######################################limit#######################
maxclients
maxmemory 512mb
maxmemory-policy volatile-ttl
maxmemory-samples #######################################file#######################
pidfile "/redis/redis-cluster/7001/tmp/redis_7001.pid"
loglevel notice
logfile "/redis/redis-cluster/7001/log/redis_7001.log"
dbfilename "dump.rdb"
dir "/redis/redis-cluster/7001/data" appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage
auto-aof-rewrite-min-size 64mb
######################################replication###########################
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay
repl-disable-tcp-nodelay no
slave-priority
requirepass ""
masterauth "" ######################################slowlog################################
slowlog-log-slower-than
slowlog-max-len
latency-monitor-threshold ####################################cluster####################################
cluster-enabled yes
cluster-config-file "/redis/redis-cluster/7001/nodes.conf"
cluster-node-timeout

将redis.conf配置文件拷贝到其它的几个节点并修改对应的端口、路径等相关信息。slowlog单位是微妙

注意:注意bind后面ip的先后顺序,如果配置127.0.0.1在前面的话,那么集群默认会启用127.0.0.1会造成远程无法访问。

4.启动redis集群

启动所有的redis集群

./redis-server redis.conf 

可以写在bash脚本文件中启动

三、集群管理

1.创建集群

redis-trib.rb create 192.168.191.11:7001 192.168.191.11:7002 192.168.191.11:7003

如果加上参数--replicas 1表示为每一个主节点创建一个从节点

备注:其实也不建议使用-replicas 1来自动创建主从关系,因为这种创建方法没办法指定哪个从节点对应哪个主节点,无法控制交叉主从。可以先创建好主节点,然后再通过创建从节点指定主节点。

2.集群配置密码处理

默认如果redis cluster节点配置了密码验证,redis-trib.rb操作会失败,则需要在需要执行redis-trib.rb操作的节点修改client.rb文件,操作如下:

find / -name 'client.rb'
vim /usr/lib/ruby/gems/1.8/gems/redis-3.2.1/lib/redis/client.rb

注意:由于每个人安装的版本不一样所以路径也可能有所差别,在passwd参数后面设置验证的密码,注意所有节点的密码必须是相同的。

3.检查集群

redis-trib.rb check 192.168.191.11:7001

4.增加节点

1.增加主节点

redis-trib.rb add-node 192.168.191.11:7004 192.168.191.11:7001

注意:最后后面的ip和端口是目前集群中已经存在的节点,前面的ip和端口是要增加的。

2.增加从节点

----增加从节点
redis-trib.rb add-node --slave 192.168.191.11:8001 192.168.191.11:7001
----增加从节点并指定主节点
redis-trib.rb add-node --slave --master-id 64ee652b75a78fc08253fddab5a920988a870f68 192.168.191.11:8001 192.168.191.11:7001

注意:最后面的ip和端口是现集群中已经存在的节点

5.移动slot

redis-trib.rb reshard 192.168.191.11:7001

iphe端口随便指定集群中的某一个,然后输入要移动的slot个数和源节点目标节点id,最后输入done即可。

6.移动节点

可以指定当前节点的master,或者改变当前节点所属的master,登入到当前节点执行如下命令:

cluster replicate 5d8ef5a7fbd72ac586bef04fa6de8a88c0671052  ###新master的nodeid

7.删除节点

注意: 删除主节点之前需要先将主节点上的所有slot移动到别的主节点,并且保证没有从节点,否则需要先将从节点移走或者删除

删除节点时需要指定节点的id

redis-trib.rb del-node 192.168.191.11:7001 af0f17b501b9f9f5e71ff6be1cf8114c9e11a80b 

后面的id即为需要删除的节点id,删除节点和增加节点语法节点的循序正好相反

四、集群相关命令

CLUSTER INFO 打印集群的信息
CLUSTER NODES 列出集群当前已知的所有节点(node),以及这些节点的相关信息。
CLUSTER MEET <ip> <port> 将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。
CLUSTER FORGET <node_id> 从集群中移除 node_id 指定的节点。
CLUSTER REPLICATE <node_id> 将当前节点设置为 node_id 指定的节点的从节点。
CLUSTER SAVECONFIG 将节点的配置文件保存到硬盘里面。
CLUSTER ADDSLOTS <slot> [slot ...] 将一个或多个槽(slot)指派(assign)给当前节点。
CLUSTER DELSLOTS <slot> [slot ...] 移除一个或多个槽对当前节点的指派。
CLUSTER FLUSHSLOTS 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。
CLUSTER SETSLOT <slot> NODE <node_id> 将槽 slot 指派给 node_id 指定的节点。
CLUSTER SETSLOT <slot> MIGRATING <node_id> 将本节点的槽 slot 迁移到 node_id 指定的节点中。
CLUSTER SETSLOT <slot> IMPORTING <node_id> 从 node_id 指定的节点中导入槽 slot 到本节点。
CLUSTER SETSLOT <slot> STABLE 取消对槽 slot 的导入(import)或者迁移(migrate)。
CLUSTER KEYSLOT <key> 计算键 key 应该被放置在哪个槽上。
CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的键值对数量。
CLUSTER GETKEYSINSLOT <slot> <count> 返回 count 个 slot 槽中的键。
CLUSTER SLAVES node-id 返回一个master节点的slaves 列表

错误处理:

如果操作系统是7.0以上版本,可能会因为yum方式安装的ruby的版本太低,报“redis requires Ruby version >= 2.2.2”错误,这时可以这样处理:

gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
\curl -sSL https://get.rvm.io | bash -s stable
source  /etc/profile.d/rvm.sh

查看可以安装的版本:

rvm list known

安装其中的一个版本,大于2.2.2的版本即可

rvm install 2.4.1

查看已安装的gem,ruby版本

ruby -v
gem -v

执行gem安装

gem install redis

备注:

作者:pursuer.chen

博客:http://www.cnblogs.com/chenmh

本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接,否则保留追究责任的权利。

《欢迎交流讨论》

Redis Cluster(集群)的更多相关文章

  1. Redis Cluster集群搭建与配置

    Redis Cluster是一种服务器sharding分片技术,关于Redis的集群方案应该怎么做,请参考我的另一篇博客http://www.cnblogs.com/xckk/p/6134655.ht ...

  2. jedis处理redis cluster集群的密码问题

    环境介绍:jedis:2.8.0 redis版本:3.2 首先说一下redis集群的方式,一种是cluster的 一种是sentinel的,cluster的是redis 3.0之后出来新的集群方式 本 ...

  3. 深入分析redis cluster 集群

    深入分析redis cluster 集群安装配置详解 下面小编来为各位介绍一篇深入分析redis cluster 集群安装配置详解,如果你希望做数据库集群就可以来看看此文章的哦. http://rub ...

  4. Redis Cluster集群搭建与应用

    1.redis-cluster设计 Redis集群搭建的方式有多种,例如使用zookeeper,但从redis 3.0之后版本支持redis-cluster集群,redis-cluster采用无中心结 ...

  5. Redis Cluster集群主从方案

    本文介绍一种通过Jedis和Cluster实现Redis集群(主从)的高可用方案,该方案需要使用Jedis2.8.0(推荐),Redis3.0及以上版本(强制). 附:Redis Cluster集群主 ...

  6. CentOS7 安装Redis Cluster集群

    上一篇中已经讲到了如何安装单击版Redis,这一篇我们来说下如何安装Cluster,关于哨兵模式这里我就不写文章安装了,有兴趣的同学可以自己去研究,哨兵模式可以在主从模式下在创建三台机器的哨兵集群监控 ...

  7. Redis Cluster集群架构实现(四)--技术流ken

    Redis集群简介 通过前面三篇博客的介绍<Redis基础认识及常用命令使用(一)--技术流ken>,<Redis基础知识补充及持久化.备份介绍(二)--技术流ken>,< ...

  8. 【精】搭建redis cluster集群,JedisCluster带密码访问【解决当中各种坑】!

    转: [精]搭建redis cluster集群,JedisCluster带密码访问[解决当中各种坑]! 2017年05月09日 00:13:18 冉椿林博客 阅读数:18208  版权声明:本文为博主 ...

  9. redis cluster集群web管理工具 relumin

    redis cluster集群web管理工具 relumin 下载地址 https://github.com/be-hase/relumin 只支持redis cluster模式 java环境 tar ...

  10. Redis Cluster集群知识学习总结

    Redis集群解决方案有两个: 1)  Twemproxy: 这是Twitter推出的解决方案,简单的说就是上层加个代理负责分发,属于client端集群方案,目前很多应用者都在采用的解决方案.Twem ...

随机推荐

  1. jupyter4.4.0自定义目录

    百度是有技巧的,现在百度的基本上都是2年前的帖子,对于最新的版本都不适用 对于jupyter自定义目录都是修改配置文件,这个对于jupyter4.4.0不适用: 1.在桌面创建jupyter-note ...

  2. Django—视图

    索引 一.URLconf 二.视图 三.HttpReqeust对象 3.1 QueryDict对象 3.2 GET和POST属性 四.HttpResponse对象 4.1 子类JsonResponse ...

  3. 怎么编辑PDF文件内容,PDF文件编辑方法

    怎样编辑PDF文件内容?这是一个常常困扰我们的问题,工作当中我们经常会收到PDF格式的文件,但有时的文件内容不是我们想要的或者是觉得不合理的需要改掉.但是每次有这样的问题时都没有什么好的解决方法,每次 ...

  4. MVC设计模式的简单理解

    MVC介绍 众所周知MVC不是设计模式,是一个比设计模式更大一点的模式,称作设计模式不合理,应该说MVC它是一种软件开发架构模式,它包含了很多的设计模式,最为密切是以下三种:Observer (观察者 ...

  5. OpenCV-Python:Harris角点检测与Shi-Tomasi角点检测

    一.Harris角点检测 原理: 角点特性:向任何方向移动变换都很大. Chris_Harris 和 Mike_Stephens 早在 1988 年的文章<A CombinedCorner an ...

  6. 在Windows上使用Let加密IIS

    在Windows上使用Let加密IIS https://weblog.west-wind.com/posts/2016/Feb/22/Using-Lets-Encrypt-with-IIS-on-Wi ...

  7. 蓝桥杯 穿越雷区(bfs)

    题目描述 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废.某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短? ...

  8. java PDF分页打印

    将获取的pdf文件按页拆分:参考https://q.cnblogs.com/q/99944/ pdf文件有多页,第一页需设置横向打印,其他页设置为纵向打印. PDDocument document = ...

  9. 《团队作业第三、第四周》五小福团队作业--Scrum 冲刺阶段--Day7

    <团队作业第三.第四周>五小福团队作业--Scrum 冲刺阶段--Day7 一.项目燃尽图 二.项目进展 [20172301郭恺第七天的进展] 第七天完成的任务: 代码整合,界面调整为相对 ...

  10. 福州大学软件工程1916|W班 第6次作业成绩排名

    作业链接 团队第三次-项目原型设计 评分细则 博客评分标准 在随笔开头,备注小组同学的学号.(1') 文字准确.样式清晰.图文并茂.字数在1000字左右.(10') 原型模型必须采用专用的原型模型设计 ...