一、概述

在前面的文章中介绍过了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.插件安装

yum -y install ruby rubygems

下周ruby依赖的redis.gem

wget https://rubygems.global.ssl.fastly.net/gems/redis-3.2.2.gem

安装redis.gem

gem install redis-3.2.2.gem 

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

安装redis-stat

gem install redis-stat

如果操作系统是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

2.安装redis

tar -xvf redis-3.0.7.tar.gz
cd redis-3.0.7
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 7001/data 7001/log 7001/tmp
cp -rp 7002
cp -rp 7003
cp -rp 8001

创建配置文件

cd 7001
vim redis.conf
port 7001
daemonize yes
timeout 300
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
lua-time-limit 5000
bind 192.168.191.11 127.0.0.1
######################################limit#######################
maxclients 10000
maxmemory 512mb
maxmemory-policy volatile-ttl
maxmemory-samples 5 #######################################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 100
auto-aof-rewrite-min-size 64mb
######################################replication###########################
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
requirepass "123456"
masterauth "123456" ######################################slowlog################################
slowlog-log-slower-than 1000
slowlog-max-len 128
latency-monitor-threshold 0 ####################################cluster####################################
cluster-enabled yes
cluster-config-file "/redis/redis-cluster/7001/nodes.conf"
cluster-node-timeout 5000

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

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

3.启动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 列表

(转)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. Feign 客户端调用错误

    1.@RequestBody 必须要写在实现接口中 2.Feign 客户端调用的时候如果有参数的话,默认是发送post请求 3.服务接口中的请求参数必须要加上@RequestParam("r ...

  2. 【SoloPi】SoloPi使用3-性能测试-启动时间测试

    响应耗时计算工具Soloπ响应耗时计算工具,通过录屏分帧的方式自动识别起始点和结束点,精确计算耗时. 特性模拟用户视觉,计算结果更贴近用户体验自动记录点击起始点,自动识别屏幕变化结束点通过OpenCV ...

  3. pip源设置为国内源

    windows系统步骤如下: (1)打开文件资源管理器(文件夹地址栏中) (2)地址栏上面输入 %appdata% (3)在这里面新建一个文件夹 pip (4)在pip文件夹里面新建一个文件叫做 pi ...

  4. OSI协议与TCP\IP协议之间的关系

    OSI协议 TCP\IP协议 五层协议(学习参考) 应用层 应用层 应用层 表示层 会话层 运输层 运输层 运输层 网络层 网络层 网络层 数据链路层 网络接口层 数据链路层 物理层 物理层 基于五层 ...

  5. C++ 解决文件重复包含

    // 如果zzz没有定义就定义zzz,然后执行下面的代码,定义了就不执行 #if !defined(zzz) #define zzz struct PPoint { int x; int y; }; ...

  6. Jerry带您了解Restful ABAP Programming模型系列之二:Action和Validation的实现

    相信通过Jerry的前一篇文章 30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用,想必大家对Restful ABAP Programming模型已经有 ...

  7. 三:MySQL系列之SQL查询

    本篇主要介绍使用SQL查询数据库的操作,包括条件查询.排序.聚合函数.分组.分页.连接查询.自关联.子查询等命令操作. 首先我们先创建一个数据库.数据表.插入字段: --------这部分在上篇以及介 ...

  8. kali linux Desktop Environemt types and kali linux install virualbox

    1.we know the kali linux desktop environmet can also be costomized ,Desktop environmet can use GNOME ...

  9. [ansible-playbook]离线安装ansible 2.3

    痛点: 测试环境无法连上外网升级ansible 预计阅读时间:5分钟 参考文档 http://docs.ansible.com/ansible/latest/intro_installation.ht ...

  10. Linux中安装配置启动关闭nginx等一系列动作

    Nginx简介 1.Nginx (engine x) 是一个高性能的Web服务器和反向代理服务器,也可以作为邮件代理服务器: 2.Nginx 是由俄罗斯人 Igor Sysoev 采用C语言开发编写的 ...