博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redis系列九 Redis集群
阅读量:6259 次
发布时间:2019-06-22

本文共 5018 字,大约阅读时间需要 16 分钟。

1、 redis-cluster架构图

  

  redis-cluster投票:容错

  

  架构细节

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

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

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

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

    Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,

    这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。

    

2、Redis集群的搭建

  Redis集群中至少应该有三个节点。要保证集群的高可用,需要每个节点有一个备份机。Redis集群至少需要6台服务器。

  2.1 集群搭建环境

    1、使用ruby脚本搭建集群。需要ruby的运行环境。

      安装ruby

       yum install ruby

       yum install rubygems

    2、安装ruby脚本运行使用的包      

[root@localhost ~]# gem install redis-3.0.0.gem Successfully installed redis-3.0.01 gem installedInstalling ri documentation for redis-3.0.0...Installing RDoc documentation for redis-3.0.0...[root@localhost ~]# [root@localhost ~]# cd redis-3.0.0/src[root@localhost src]# ll *.rb-rwxrwxr-x. 1 root root 48141 Apr  1  2015 redis-trib.rb  

  2.2 搭建步骤

    需要6台redis服务器。搭建伪分布式。

    需要6个redis实例。

    需要运行在不同的端口7001-7006

    第一步:创建6个redis实例,每个实例运行在不同的端口。需要修改redis.conf配置文件。配置文件中还需要把cluster-enabled yes前的注释去掉,另外注释掉bind 127.0.0.1,允许所有机器链接redis,并且关掉防火墙。

    第二步:启动每个redis实例。

    第三步:使用ruby脚本搭建集群。   

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

 3、脚本

  创建关闭集群的脚本 

[root@localhost redis-cluster]# vim shutdow-all.shredis01/redis-cli -p 7001 shutdownredis01/redis-cli -p 7002 shutdownredis01/redis-cli -p 7003 shutdownredis01/redis-cli -p 7004 shutdownredis01/redis-cli -p 7005 shutdownredis01/redis-cli -p 7006 shutdown[root@localhost redis-cluster]# chmod u+x shutdow-all.sh

   启动集群redis的脚本

cd redis01./redis-server redis.confcd ..cd redis02./redis-server redis.confcd ..cd redis03./redis-server redis.confcd ..cd redis04./redis-server redis.confcd ..cd redis05./redis-server redis.confcd ..cd redis06./redis-server redis.confcd ..

   创建集群操作的提示信息,该操作只用执行一次,重启后不用再执行

[root@localhost redis-cluster]# ./redis-trib.rb create --replicas 1 192.168.25.153:7001 192.168.25.153:7002 192.168.25.153:7003 192.168.25.153:7004 192.168.25.153:7005  192.168.25.153:7006>>> Creating clusterConnecting to node 192.168.25.153:7001: OKConnecting to node 192.168.25.153:7002: OKConnecting to node 192.168.25.153:7003: OKConnecting to node 192.168.25.153:7004: OKConnecting to node 192.168.25.153:7005: OKConnecting to node 192.168.25.153:7006: OK>>> Performing hash slots allocation on 6 nodes...Using 3 masters:192.168.25.153:7001192.168.25.153:7002192.168.25.153:7003Adding replica 192.168.25.153:7004 to 192.168.25.153:7001Adding replica 192.168.25.153:7005 to 192.168.25.153:7002Adding replica 192.168.25.153:7006 to 192.168.25.153:7003M: 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3 192.168.25.153:7001   slots:0-5460 (5461 slots) masterM: 8cd93a9a943b4ef851af6a03edd699a6061ace01 192.168.25.153:7002   slots:5461-10922 (5462 slots) masterM: 2935007902d83f20b1253d7f43dae32aab9744e6 192.168.25.153:7003   slots:10923-16383 (5461 slots) masterS: 74f9d9706f848471583929fc8bbde3c8e99e211b 192.168.25.153:7004   replicates 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3S: 42cc9e25ebb19dda92591364c1df4b3a518b795b 192.168.25.153:7005   replicates 8cd93a9a943b4ef851af6a03edd699a6061ace01S: 8b1b11d509d29659c2831e7a9f6469c060dfcd39 192.168.25.153:7006   replicates 2935007902d83f20b1253d7f43dae32aab9744e6Can 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 clusterWaiting for the cluster to join.....>>> Performing Cluster Check (using node 192.168.25.153:7001)M: 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3 192.168.25.153:7001   slots:0-5460 (5461 slots) masterM: 8cd93a9a943b4ef851af6a03edd699a6061ace01 192.168.25.153:7002   slots:5461-10922 (5462 slots) masterM: 2935007902d83f20b1253d7f43dae32aab9744e6 192.168.25.153:7003   slots:10923-16383 (5461 slots) masterM: 74f9d9706f848471583929fc8bbde3c8e99e211b 192.168.25.153:7004   slots: (0 slots) master   replicates 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3M: 42cc9e25ebb19dda92591364c1df4b3a518b795b 192.168.25.153:7005   slots: (0 slots) master   replicates 8cd93a9a943b4ef851af6a03edd699a6061ace01M: 8b1b11d509d29659c2831e7a9f6469c060dfcd39 192.168.25.153:7006   slots: (0 slots) master   replicates 2935007902d83f20b1253d7f43dae32aab9744e6[OK] All nodes agree about slots configuration.>>> Check for open slots...>>> Check slots coverage...[OK] All 16384 slots covered.[root@localhost redis-cluster]#

4、集群的使用方法

Redis-cli连接集群。[root@localhost redis-cluster]# redis01/redis-cli -p 7002 -c

-c:代表连接的是redis集群

5、实例集群搭建环境说明

  ①在/usr/local创建redis-cluster目录。

  ②向/usr/local/redis-cluster下拷贝6份redis安装后的目录

  

  ③在源码包/opt/redis-4.0.1/src下拷贝redis-trib.rb至/usr/local/redis-cluster目录下

  ⑤在/usr/local/redis-cluster下创建启动所有redis实例的脚本start-all.sh和stop-all.sh脚本

转载于:https://www.cnblogs.com/zhaobingqing/p/7514616.html

你可能感兴趣的文章
Scrum联盟的新任全球营销副总裁访谈
查看>>
从把事做对到做对的事
查看>>
悟空:用Go语言编写的全文搜索引擎
查看>>
.NET 4.6的RyuJIT编译器中又发现两个严重的Bug
查看>>
Rust发布1.32版本,跟踪、模块化、宏等方面均有改进
查看>>
Go语言开源这九年:它是不是你最喜欢的语言?
查看>>
2017敏捷沙滩大会:完美软件,测量持续交付,以及探索未来
查看>>
Visual Studio 2017 15.6发布
查看>>
使用人工智能测试软件
查看>>
如何基于Kubernetes构建完整的DevOps流水线
查看>>
Rust 1.30带来更多元编程支持,并改进了模块系统
查看>>
【转载】10个Web3D可视化精彩案例
查看>>
[deviceone开发]-动态添加组件add方法的示例
查看>>
极限编程创始人Ron Jeffries建议开发者放弃敏捷
查看>>
ticketea如何从一体化转向多体化架构
查看>>
解读2017之容器篇:后Kubernetes时代
查看>>
InfoQ播客:Randy Shoup谈Stitch Fix的技术栈,数据科学和微服务架构
查看>>
高德地图定位工具类
查看>>
Yelp开源数据管道项目最新组件——数据管道客户端库
查看>>
Docker周报:Windows Server将支持Mesos
查看>>