Redis集群架构搭建详解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cx55887/article/details/84481224

一、简介

这其实是一种分布式数据库,就是通过分片的机制储存数据,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集群就搭建完成了。

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

猜你喜欢

转载自blog.csdn.net/cx55887/article/details/84481224