一、概述

在前面的文章中介绍过了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. P3436 [POI2006]PRO-Professor Szu

    P3436 [POI2006]PRO-Professor Szu 题目描述 n个别墅以及一个主建筑楼,从每个别墅都有很多种不同方式走到主建筑楼,其中不同的定义是(每条边可以走多次,如果走边的顺序有一条 ...

  2. The Quad - Directory Explorer(一款四窗口的文件资源管理器)

    官网:http://www.q-dir.com/ 参考这位兄弟的介绍:https://www.cnblogs.com/clso/p/4694486.html 一款四窗口的文件资源管理器.

  3. linux系统监控工具

    Linux性能监控工具 top   提供运行系统的动态实时视图.显示系统摘要信息以及任务列表 uptime    显示系统平均负载 ps.pstree    提供当前进程列表 free  显示系统中空 ...

  4. NAT穿透解决

    1.各种网络环境下的P2P通信解决方法: (1)如果通信双方在同一个局域网内,这种情况下可以不借助任何外力直接通过内网地址通信即可:   (2)如果通信双方都在有独立的公网地址,这种情况下当然可以不借 ...

  5. SpringMVC是怎么工作的,SpringMVC的工作原理

    SpringWeb MVC 是怎么工作的,SpringMVC的原理,SpringMVC源码 分析. 介绍 SpringWeb MVC是Spring Framework中的一部分,当我们需要使用spri ...

  6. [转] webpack中配置Babel

    一.安装 npm install --save-dev babel-loader babel-core babel-preset-env 二.在webpack.config.js中配置module 1 ...

  7. Android开发资源收集

    收集Android开发用得上的资源,方便查询 像大牛一样写代码: 31个Android 开发者工具 Android 流行框架查速表 数据结构和算法练习awesome-java-leetcode And ...

  8. James Munkres Topology: Lemma 21.2 The sequence lemma

    Lemma 21.2 (The sequence lemma) Let \(X\) be a topological space; let \(A \subset X\). If there is a ...

  9. Docker使用问题记录贴

    请参考: https://blog.csdn.net/u013948858/article/details/78429954 问题:安装Docker之后,执行docker run hello-worl ...

  10. 2018-2019 20165319 网络对抗 Exp4 恶意代码分析

    基础问题回答 1. 如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些,用什么方法来监控 答:1.使用Windows自带的schta ...