集群原理-redis-cluster架构图

架构细节:

(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.

(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.

(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可

(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value

Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点

 redis-cluster投票:容错

(1)领着投票过程是集群中所有master参与,如果半数以上master节点与master节点通信超过(cluster-node-timeout),认为当前master节点挂掉.

(2):什么时候整个集群不可用(cluster_state:fail)?

a:如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完成时进入fail状态. ps : redis-3.0.0.rc1加入cluster-require-full-coverage参数,默认关闭,打开集群兼容部分失败.

b:如果集群超过半数以上master挂掉,无论是否有slave集群进入fail状态.

ps:当集群不可用时,所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误

1.搭建集群需要的环境

搭建集群需要使用到官方提供的ruby脚本。

需要安装ruby的环境。

安装ruby

yum install ruby

yum install rubygems

redis集群管理工具redis-trib.rb

[root@bogon ~]# cd redis-3.0.0

[root@bogon redis-3.0.0]# cd src

[root@bogon src]# ll *.rb

-rwxrwxr-x. 1 root root 48141 Apr  1 07:01 redis-trib.rb

[root@bogon src]#

redis-trib.rb脚本需要的ruby包:

需要上传到linux服务。

安装ruby的包:

gem install redis-3.0.0.gem

[root@bogon ~]# gem install redis-3.0.0.gem

Successfully installed redis-3.0.0

1 gem installed

Installing ri documentation for redis-3.0.0...

Installing RDoc documentation for redis-3.0.0...

gem下载地址http://download.csdn.net/detail/u012599988/8597787

2.集群的搭建

第一步:创建6个redis实例,端口号从7001~7006

先创建个目录

dump.rdb是快照形式把状态保存,另一种是aof保存命令的。

第二步:修改redis的配置文件

1、修改端口号

2、打开cluster-enable前面的注释。

接下来复制6个节点

说明:

个主节点,每个主节点有一个从节点总共6个节点

表示每个主节点有一个从节点

别忘了吧6个节点的端口号都改了

第三步:把创建集群的ruby脚本复制到redis-cluster目录下。

然后需要把Redis src目录下的 redis-trib.rb集群管理工具复制到Redis-cluster下面

第四步:启动6个redis实例

写个脚本批量启动6个redis节点

startall的脚本内容

设置为可执行的文件

同理可以创建个关闭集群的脚本

第五步:创建集群。

 ./redis-trib.rb create --replicas 1 192.168.188.131:7001 192.168.188.131:7002 192.168.188.131:7003 192.168.188.131:7004 192.168.188.131:7005  192.168.188.131:7006

[root@bogon redis-cluster]# ./redis-trib.rb create --replicas 1 192.168.188.131:7001 192.168.188.131:7002 192.168.188.131:7003 192.168.188.131:7004 192.168.188.131:7005 192.168.188.131:7006
>>> Creating cluster
Connecting to node 192.168.188.131:7001: OK  
Connecting to node 192.168.188.131:7002: OK
Connecting to node 192.168.188.131:7003: OK
Connecting to node 192.168.188.131:7004: OK
Connecting to node 192.168.188.131:7005: OK
Connecting to node 192.168.188.131:7006: OK
>>> Performing hash slots allocation on 6 nodes... 连接6个节点成功
Using 3 masters:                                                 7001-7003作为主节点
192.168.188.131:7001
192.168.188.131:7002                                    
192.168.188.131:7003
Adding replica 192.168.188.131:7004 to 192.168.188.131:7001                   7004作为7001的从节点
Adding replica 192.168.188.131:7005 to 192.168.188.131:7002                   7005作为7002的从节点
Adding replica 192.168.188.131:7006 to 192.168.188.131:7003                   7006作为7003的从节点
M: 5a8523db7e12ca600dc82901ced06741b3010076 192.168.188.131:7001
slots:0-5460 (5461 slots) master                  给7001主节点分配0-5460 的槽
M: bf6f0929044db485dea9b565bb51e0c917d20a53 192.168.188.131:7002
slots:5461-10922 (5462 slots) master    给7002主节点分配5461-10922 的槽
M: c5e334dc4a53f655cb98fa3c3bdef8a808a693ca 192.168.188.131:7003
slots:10923-16383 (5461 slots) master 给7003主节点分配10923-16383 的槽
S: 2a61b87b49e5b1c84092918fa2467dd70fec115f 192.168.188.131:7004     7004,7005,7006是从节点槽和主节点的一样,从节点是备份用的
replicates 5a8523db7e12ca600dc82901ced06741b3010076
S: 14848b8c813766387cfd77229bd2d1ffd6ac8d65 192.168.188.131:7005
replicates bf6f0929044db485dea9b565bb51e0c917d20a53
S: 3192cbe437fe67bbde9062f59d5a77dabcd0d632 192.168.188.131:7006
replicates c5e334dc4a53f655cb98fa3c3bdef8a808a693ca
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join.....
>>> Performing Cluster Check (using node 192.168.188.131:7001)
M: 5a8523db7e12ca600dc82901ced06741b3010076 192.168.188.131:7001
slots:0-5460 (5461 slots) master
M: bf6f0929044db485dea9b565bb51e0c917d20a53 192.168.188.131:7002
slots:5461-10922 (5462 slots) master
M: c5e334dc4a53f655cb98fa3c3bdef8a808a693ca 192.168.188.131:7003
slots:10923-16383 (5461 slots) master
M: 2a61b87b49e5b1c84092918fa2467dd70fec115f 192.168.188.131:7004
slots: (0 slots) master
replicates 5a8523db7e12ca600dc82901ced06741b3010076
M: 14848b8c813766387cfd77229bd2d1ffd6ac8d65 192.168.188.131:7005
slots: (0 slots) master
replicates bf6f0929044db485dea9b565bb51e0c917d20a53
M: 3192cbe437fe67bbde9062f59d5a77dabcd0d632 192.168.188.131:7006
slots: (0 slots) master
replicates c5e334dc4a53f655cb98fa3c3bdef8a808a693ca
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@bogon redis-cluster]#

3.测试集群

[root@bogon redis-cluster]# redis01/redis-cli -h 192.168.188.131 -p 7002 -c    -h是指定ip -p指定端口 -c代表要连接集群

注:连集群的时候必须加-c,否则set的时候会出现(error)MOVED的错误

192.168.188.131:7002>
[root@bogon redis-cluster]# redis01/redis-cli -h 192.168.188.131 -p 7002 -c
192.168.188.131:7002> set a 100
-> Redirected to slot [15495] located at 192.168.188.131:7003
OK
192.168.188.131:7003>

 4.图形化界面客户端

只支持单机版,不支持集群。可以在开发的时候连接单机版,生产环境换成集群

CentOS搭建Redis集群的更多相关文章

  1. 这次一定要教会你搭建Redis集群和MySQL主从同步(非Docker)

    前言 一直都想自己动手搭建一个Redis集群和MySQL的主从同步,当然不是依靠Docker的一键部署(虽然现在企业开发用的最多的是这种方式),所以本文就算是一个教程类文章吧,但在动手搭建之前,会先聊 ...

  2. 从零开始学习docker之在docker中搭建redis(集群)

    docker搭建redis集群 docker-compose是以多容器的方式启动,非常适合用来启动集群 一.环境准备 云环境:CentOS 7.6 64位 二.安装docker-compose #需要 ...

  3. 用C、python手写redis客户端,兼容redis集群 (-MOVED和-ASK),快速搭建redis集群

    想没想过,自己写一个redis客户端,是不是很难呢? 其实,并不是特别难. 首先,要知道redis服务端用的通信协议,建议直接去官网看,博客啥的其实也是从官网摘抄的,或者从其他博客抄的(忽略). 协议 ...

  4. centos7 快速搭建redis集群环境

    本文主要是记录一下快速搭建redis集群环境的方式. 环境简介:centos 7  + redis-3.2.4 本次用两个服务6个节点来搭建:192.168.116.120  和  192.168.1 ...

  5. 基于 twemproxy 搭建 redis 集群

    概述 由于单台redis服务器的内存管理能力有限,使用过大内存redis服务器的性能急剧下降,且服务器发生故障将直接影响大面积业务.为了获取更好的缓存性能及扩展型,我们将需要搭建redis集群来满足需 ...

  6. CentOS下redis集群安装

    环境: 一台CentOS虚拟机上部署六个节点,创建3个master,3个slave节点 1.下载并解压 cd /root wget http://download.redis.io/releases/ ...

  7. Windows下搭建Redis集群

    Redis集群: 如果部署到多台电脑,就跟普通的集群一样:因为Redis是单线程处理的,多核CPU也只能使用一个核, 所以部署在同一台电脑上,通过运行多个Redis实例组成集群,然后能提高CPU的利用 ...

  8. linux系统centOS7下搭建redis集群中ruby版本过低问题的解决方法

    问题描述: 在Centos7中,通过yum安装ruby的版本是2.0.0,但是如果有些应用需要高版本的ruby环境,比如2.2,2.3,2.4... 那就有点麻烦了,譬如:我准备使用redis官方给的 ...

  9. Redis集群搭建(转自一菲聪天的“Windows下搭建Redis集群”)

    配置Redis参考:http://blog.csdn.net/zsg88/article/details/73715947 使用Ruby配置集群参考:https://www.cnblogs.com/t ...

随机推荐

  1. oracle触发器书写方法

    CREATE SEQUENCE 序列名[INCREMENT BY n] --每次加几[START WITH n] --序列从几开始[{MAXVALUE/ MINVALUE n|NOMAXVALUE}] ...

  2. 生成apache证书(https应用)

    # cd /usr/local/apache2/conf# tar zxvf ssl.ca-0.1.tar.gz# cd ssl.ca-0.1生成根证书:# ./new-root-ca.sh      ...

  3. struts_24_基于XML校验的规则、特点

    当为某个action提供了ActionClassName-validation.xml和ActionClassName-ActionName-validation.xml两种规则的校验文件时,系统按下 ...

  4. Fresco源码解析 - 创建一个ImagePipeline(一)

    在Fresco源码解析 - 初始化过程分析章节中, 我们分析了Fresco的初始化过程,两个initialize方法中都用到了 ImagePipelineFactory类. ImagePipeline ...

  5. 有关OpenGL着色语言(一)

    刚接触OpenGL着色语言...,不定期增加内容 1.OpenGL着色语言(GLSL)是什么? 用于OpenGL的面向过程的高级着色语言,是近年来图形编程领域中出现的最重要的新型开发技术,使用Open ...

  6. 衣明志是个SB

    面试碰到衣明志,问了些傻逼问题,尼玛就是一不折不扣的蠢驴. 这个人太能装了,而且水平也不咋地.

  7. NOIP200503采药

                          NOIP200503采药 [问题描述] 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质, ...

  8. OpenStack 的NAT解决办法

    原因 iptables中的nat表会对数据进行封包换目标,源地址,在我们的系统中是不需要的.所以我们做了如下操作 操作 /etc/nova/nova.conf的 1 2 #routing_source ...

  9. Delphi的DateToStr StrToDate格式灵活用法

    Delphi的DateToStr StrToDate格式灵活用法 2008-04-09 10:19 procedure TForm1.Button1Click(Sender: TObject);var ...

  10. C# HttpClient, 使用C#操作Web

    我们知道, .Net类库里提供了HttpWebRequest等类,方便我们编程与Web服务器进行交互. 但是实际使用中我们经常会遇到以下需求,基础类里没有直接提供相应的功能(WebClient类包含这 ...