欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > 数据库 >内容正文

数据库

Redis集群架构搭建详解

发布时间:2025/4/16 数据库 35 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Redis集群架构搭建详解 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

一、简介

这其实是一种分布式数据库,就是通过分片的机制储存数据,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)1637916380
节点2(172)2637926380
节点3(173)3637936380

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

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

  • 安装依赖
  • # 在三个节点都执行 # yum install gcc gcc-c++ zlib zlib-devel -y
  • 安装redis4.0.11
  • # tar xvf redis-4.0.11.tar.gz # cd redis-4.0.11 # make && make install 说明:安装过程主要是在src目录下生成二进制程序
  • 配置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即可,不再演示。其他节点配置同理也不再演示。

  • 三个节点都启动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依赖环境。

  • 配置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]
  • 安装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
  • 创建集群
  • [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的节点地址必须是不包含任何槽/数据的节点,否则会拒绝创建集群。
  • 检查集群的完整性
    集群完整性是指所有的槽都被分配到存货的主节点上,只要16384个槽中有任意一个没有被分配给节点就表示集群是并不完整的。
    可以用redis-trib.rb check 命令chance之前创建的集群是否成功,check命令只需要给出集合中的任何一个节点地址就可以
  • [root@173 ~]# redis-4.0.11/src/redis-trib.rb check 10.220.5.172:26379
  • 登录集群,并在节点上写入数据
    登录集群的时候必须使用选项 -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集群架构搭建详解的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。