一、简介

这其实是一种分布式数据库,就是通过分片的机制储存数据,cluster中的每个节点仅仅储存数据哭的一部分数据,本质上就是实现数据库分片。

这种集群是一种去中心化的集群,也就是说,集群中的每个节点都可以是接入节点。

这里我简单说一下这种去中心化的实现方式,比如有4个节点,要储存1000个key,那么就可能将这1000个key平均分配在这4个节点上,另外每个节点上除了储存key还储存了一个列表,这个列表详细记录了每个key具体在哪个节点上,这样用户访问任意一个节点都会知道数据在哪,也就知道接下来去访
问哪个节点了。

大多数去中心化的结构,都是这样的原理,也就是每个节点上都有一个完整的元数据,但只有一部分数据。

为什么要使用Redis集群呢?比如现在需要在redis中存100G数据,我们知道redis工作的时候所有的数据都是储存在内存中的,因此这100G数据都需要存在内存中,一个很明显的问题就是储存空间不足,而进行数据分片,也就是将数据存放在不同的节点上就能很好的解决这个问题。

比如有诗歌节点,这样就可以将这100G的数据存放在这10个节点上,这样一来每个节点只需要存放10G的数据,虽然解决了储存问题,但是会带来另外一个问题,也就是安全问题,因为储存数据的节点越多,发送故障的概率也就越高,只要一个节点出现故障那么全部数据就丢失了,所以为了安全可以给每个节点做一个主从,这样就解决了数据安全问题。这就是集群的作用。

这里简单介绍一下redis集群实现数据共享的方法
Redis集群是通过数据分片的方式,一个redis集群包含16384个哈希槽,在这个redis集群中每个键都会储存在一个哈希槽中,假如redis集群中有三个节点,那么这第三个节点的哈希槽分布如下

  • 节点A负责处理0号至5500号哈希槽
  • 节点B负责处理5501至11000号哈希槽
  • 节点C负责处理11001号至16384号哈希槽

当需要在redis集群中储存数据的时候,会先进行一次计算,找出一个哈希槽编号,然后将这个数据存过去。

二、实现redis集群(基于redis4.0)

redis从3.0版本开始支持集群。
集群一般由多个节点组成,节点数量至少6个才能保证组成完整高可用集群。
规划:
我这里使用三台主机,每个主机上开启两个示例,两个示例做成主从,这样就有了六个节点。

节点名称 实例1端口 实例2端口
节点1(171) 16379 16380
节点2(172) 26379 26380
节点3(173) 36379 36380

第一步:在三个节点上安装Redis4.0

下载地址:https://redis.io/download

  1. 安装依赖
# 在三个节点都执行
# yum install gcc gcc-c++ zlib zlib-devel -y
  1. 安装redis4.0.11
# tar xvf redis-4.0.11.tar.gz
# cd redis-4.0.11
# make && make install
说明:安装过程主要是在src目录下生成二进制程序
  1. 配置redis(演示配置171的实例1)
[root@171 ~]# mkdir -pv /redis/{16379,16380}
[root@171 ~]# cd /root/redis-4.0.11
[root@171 redis-4.0.11]# cp redis.conf  /redis/16379/redis-16379.conf
# 修改配置文件
[root@171 redis-4.0.11]# vim /redis/16379/redis-16379.conf
bind 10.220.5.171
port 16379
daemonize yes
pidfile /var/run/redis_16379.pid
dir /redis/16379/
cluster-enabled yes
cluster-config-file nodes-16379.conf
cluster-node-timeout 15000
# 修改/redis目录的属主属组
[root@171 redis-4.0.11]# useradd -r redis
[root@171 redis-4.0.11]# chown redis.redis /redis/ -R

171的实例2配置只需将实例1配置中的16379全部改为16380即可,不再演示。其他节点配置同理也不再演示。

  1. 三个节点都启动redis cluster 服务
# 节点1(171)
# cd /root/redis-4.0.11
# src/redis-server /redis/16379/redis-16379.conf
# src/redis-server /redis/16380/redis-16380.conf

其他节点类似不再详细演示。

第二步:redis-trib.rb环境准备

该文件存在于/redis/src目录中,只需要在一台主机上执行此步骤,redis-trib.rb是采用Ruby实现Redis集群管理工具,可以帮助我们简化集群创建,检查,槽迁移和均衡等常见操作,使用之前需要安装Ruby依赖环境。

  1. 配置ruby环境
    下载地址: http://www.ruby-lang.org/en/downloads/
[root@173 ~]# tar xvf ruby-2.3.5.tar.gz
[root@173 ruby-2.3.5]# cd ruby-2.3.5
[root@173 ruby-2.3.5]# ./configure --prefix=/usr/local/ruby
[root@173 ruby-2.3.5]# make && make install
[root@173 ruby-2.3.5]# ln -sv /usr/local/ruby/bin/ruby  /bin/
‘/bin/ruby’ -> ‘/usr/local/ruby/bin/ruby’
[root@173 ruby-2.3.5]# ln -sv /usr/local/ruby/bin/gem  /bin/
‘/bin/gem’ -> ‘/usr/local/ruby/bin/gem’
[root@173 ruby-2.3.5]# ruby  -v
ruby 2.3.5p376 (2017-09-14 revision 59905) [x86_64-linux]
  1. 安装redis cluster的依赖包
[root@173 ~]# gem install -l redis-3.3.0.gem
Successfully installed redis-3.3.0
Parsing documentation for redis-3.3.0
Installing ri documentation for redis-3.3.0
Done installing documentation for redis after 0 seconds
1 gem installed
  1. 创建集群
[root@173 ~]# redis-4.0.11/src/redis-trib.rb  create --replicas 1 \
> 10.220.5.171:16379 10.220.5.172:26379 10.220.5.173:36379 \
> 10.220.5.171:16380 10.220.5.172:26380 10.220.5.173:36380
说明:选项 --replicas 1 表示为集群中的所有主节点创建一个从节点# 最后的输出报告说明:16384个槽全部被分配完,集群创建成功。
这里需要注意的是给redis-trib.rb的节点地址必须是不包含任何槽/数据的节点,否则会拒绝创建集群。
  1. 检查集群的完整性
    集群完整性是指所有的槽都被分配到存货的主节点上,只要16384个槽中有任意一个没有被分配给节点就表示集群是并不完整的。
    可以用redis-trib.rb check 命令chance之前创建的集群是否成功,check命令只需要给出集合中的任何一个节点地址就可以
[root@173 ~]# redis-4.0.11/src/redis-trib.rb  check 10.220.5.172:26379
  1. 登录集群,并在节点上写入数据
    登录集群的时候必须使用选项 -c
[root@173 ~]# redis-cli -c -h 10.220.5.171 -p 16379
10.220.5.171:16379> set name cx
-> Redirected to slot [5798] located at 10.220.5.172:26379
OK
10.220.5.172:26379> set age 20
-> Redirected to slot [741] located at 10.220.5.171:16379
OK
10.220.5.171:16379> set addr tianjin
-> Redirected to slot [12790] located at 10.220.5.173:36379
OK

细心地你肯定注意到了上面写入数据时节点是在变化的,第一个key保存在了5798槽中这个槽在172节点上,写入第二个key的时候存到了741号槽中这个槽在171节点上,同时前面的提示符也在变化,而在其他节点上登录会发现也可以获取到这些数据,到这里redis集群就搭建完成了。

------做运维之前很矫情的小年轻-----

Redis集群架构搭建详解相关推荐

  1. Redis集群架构搭建和原理

    Redis集群架构教程 Redis常见的架构有主从.哨兵.高可用集群,接下来的文章分四章分别介绍linux安装redis.主从架构搭建.哨兵模式搭建.集群架构搭建 第一章 Redis的安装 我的cen ...

  2. Redis基础与高可用集群架构进阶详解

    一.NoSQL简介 1.问题引入 每年到了过年期间,大家都会自觉自发的组织一场活动,叫做春运!以前我们买票都是到火车站排队,后来呢,有了 12306,有了它以后就更方便了,我们可以在网上买票,但是带来 ...

  3. CDH版本Hadoop集群环境搭建详解

    CDH版本Hadoop集群搭建 1.CDH版本hadoop重新编译 1.1 为什么要编译? 1.2 编译环境的准备 1.3 进行编译 2.CDH版本的zookeeper环境搭建 2.1 zookeep ...

  4. LVS负载均衡集群服务搭建详解(一)

    LVS概述 1.LVS:Linux Virtual Server 四层交换(路由):根据请求报文的目标IP和目标PORT将其转发至后端主机集群中的某台服务器(根据调度算法): 不能够实现应用层的负载均 ...

  5. LVS负载均衡集群服务搭建详解

    一.LVS概述  1.LVS:Linux Virtual Server 四层交换(路由):根据请求报文的目标IP和目标PORT将其转发至后端主机集群中的某台服务器(根据调度算法): 不能够实现应用层的 ...

  6. 深入剖析Redis系列(三) - Redis集群模式搭建与原理详解

    前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...

  7. 2W 字详解 Redis 集群环境搭建实践

    点击上方 "终端研发部"关注, 星标或置顶一起成长 本文是Redis集群学习的实践总结(基于Redis 6.0+),详细介绍逐步搭建Redis集群环境的过程,并完成集群伸缩的实践. ...

  8. redis cluster 集群 安装 配置 详解

    redis cluster 集群 安装 配置 详解 张映 发表于 2015-05-01 分类目录: nosql 标签:cluster, redis, 安装, 配置, 集群 Redis 集群是一个提供在 ...

  9. Windows下搭建Tomcat集群的配置详解

    < Windows下搭建Tomcat集群基础入门详解 > 前言 在搭建 < Apache + Tomcat 实现Web服务器集群 > 前我们还需要实现 Tomcat集群实现Se ...

最新文章

  1. 使用matlab做可重复性实验结果——rng
  2. Linux掛載samba
  3. python 操作 postgresql 数据库
  4. Syn Bot /OSCOVA 快速回复(11)
  5. 用神经网络构造一个基于分类的多体系统
  6. 原野小年总共拍了多少_开一家羽毛球馆大概需要投资多少钱
  7. C# 9.0 正式发布了(C# 9.0 on the record)
  8. vivado unc paths are not supported
  9. 野村证券分析师称微软不会收购雅虎和RIM
  10. 数据库系统工程师怎么备考?
  11. dirent struct_file属性读取 Struct dirent struct stat
  12. POI导出设置列为文本类型
  13. 再说打日志你不会,pm2 + log4js,你值得拥有
  14. OSChina 端午节乱弹 ——假期余额不足,大家端午快乐
  15. 扫地机器人哪个牌子好用?高性价比扫地机器人推荐
  16. Mysql学习记录【Mysql字符集】
  17. SpringCloud微服务项目实战 - 6.延迟任务
  18. 基于C语言设计的像素小鸟小游戏
  19. 历时8个月,10w字!前端知识体系+大厂面试笔记(工程化篇)
  20. 2022年中国医疗设备电源市场现状研究分析与发展前景预测报告

热门文章

  1. 【Linux开发】彻底释放Linux线程的资源
  2. 去除VisualStudio中拼写错误检测的红色波浪线
  3. Java 8特性有望进入.Net/Mono
  4. 帮助你更好理解javascript中easing功能的网站 - Easings.net
  5. 浅谈 Python 的 with 语句
  6. jquery 流程图_使用 JQuery.Flowchart
  7. new一个xssfworkbook时出错_java用poi操作excel的时候,new XSSFWorkbook,总是报错?
  8. excel字符串和单元格拼接_Excel实例分享-学会输入数据小技巧,让你的工作效率远超同事...
  9. jvm可以运行多种语言吗
  10. 018_html文件路径