Redis的集群搭建(主从复制)

发布时间:2024-07-29 08:01

Hello小伙伴们,我们又见面啦,这次和大家一起分享一下redis的集群搭建,希望大家多多支持哦。

下面我们先来一起看一下redis集群的演变过程吧!

1.单机版

核心技术:持久化

持久化是最简单的高可用方法(有时甚至不被归为高可用的手段),主要作用是数据备份,即将数据存储在硬盘,保证数据不会因进程退出而丢失。

2.主从复制

复制是高可用Redis的基础,哨兵和集群都是在复制基础上实现高可用的。复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。缺陷是故障恢复无法自动化;写操作无法负载均衡;存储能力受到单机的限制

3.哨兵

在复制的基础上,哨兵实现了自动化的故障恢复。缺陷是写操作无法负载均衡;存储能力受到单机的限制

4.集群

通过集群,Redis解决了写操作无法负载均衡,以及存储能力受到单机限制的问题,实现了较为完善的高可用方案

首先单机版的redis集群会存在一些问题,比如:单机故障、容量瓶颈、qps瓶颈,单机版的redis缓存我们已经在之前的章节中使用了很多了哈,下面那我们就从头开始吧,先来看一下redis的主从复制集群。

主从复制:

首先我们要配置主从复制的集群,那么必不可少的就是了解主从复制的一些相应配置

replica-server-stale-data  配置当从机在复制主机数据时,是否可以访问。

replica-read-only   配置从机是否只读

repl-ping-replica-period  指定从机ping主机的时间间隔

repl-backlog-size  设置缓存区大小

在主从复制的集群中主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,mester已写为主,slaver已读为主,slaveof命令可以设置从机。可以进行读写分离和容灾备份。主从复制是依赖于rbd持久化。主从复制的原理是传递rdb持久化文件的传输。

下面就来为大家介绍一下主从复制这种集群主从复制的步骤:

1、首先我们需要先建立主从的连接

     (1)设置master的地址和端口,发送slaveof ip port指令,master会返回响应客户端,根据响应信息保存master ip  port信息 (连接测试)。

     (2)根据保存的信息创建连接master的socket

     (3)周期性发送ping,master会响应pong

     (4)发送指令 auth password(身份验证),master验证身份

     (5)发送slave端口信息,master保存slave的端口号

2、数据同步

     (1)slave发送指令 psyn2 ?-1(psyn2表示从机要向主机复制数据)(?为主机的runid)(-1表示偏移量)

      (2)当master执行bgsave时,会向从机同步数据

      (3)在第一个salve连接时,创建命令缓存区

      (4)生成RDB文件,通过socket发送给slave

      (5)slave接收RDB,清空数据,执行RDB文件恢复过程

      (6)发送命令告知RDB恢复已经完成(告知全量复制完成)

      (7)master发送复制缓冲区信息

      (8)slave接收信息,执行重写后恢复数据

3、命令传播

        slave心跳:replconf  ack   {offset}    汇报slave自己的offset,获取最新数据指令

        命令传播阶段出现断网:

                          • 网络闪断闪连    忽略

                          • 段时间断网     增量

                          • 长时间断网     全量(超过缓存区大小或偏移量)

        全量复制三个核心要素:

               (1)服务器运行id, 用于服务器之间通信验证身份,master首次连接slave时,会将自己                           的run_id发送给slave,slave保存此ID

               (2) 主服务器积压的命令缓冲区先进先出队列

               (3) 主从服务器的复制偏移量,用于比对偏移量,然后判断出执行全量还是增量

主从复制中,如果发生全量复制,那么会存在以下消耗:

               (1)bgsave时间

               (2)rdb文件网络传输

               (3)从节点请求请求数据时间

               (4)从节点加载rdb的时间

               (5)可能的aof重写时间

主从复制的缺点:

              (1)由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重

             (2)当主机宕机之后,将不能进行写操作,需要手动将从机升级为主机,从机需要重新制定master

主从复制的主要特点:1、一个master可以有多个Slave

                                    2、一个slave只能有一个master

                                    3、数据流向是单向的,只能从主到从

咱们光说不练假把式,接下来,我们就一起搭建一个主从复制的集群吧!

1、首先呢,redis是可以指定配置文件启动的,所以我们并不需要安装多个redis,我们只需要将redis的配置文件复制多份,就可以达到一台机器运行多个redis的目的。

2、之后就是修改我们的配置文件啦!我们需要修改端口号,还有pidfile的指向路径,这里还不会修改的小伙伴可以去看看小编的前几张博文哦,有一章是主要讲了redis的配置的哦!

这个是修改端口的位置哦

这个是修改pidfile的位置哈

好的,我们相对应的把其他两个配置文件也改过来哈(因为redis至少三台机器才可以搭建一个集群)

3、下面呢我们就要开始启动终端啦!

Redis的集群搭建(主从复制)_第1张图片我们可以看到哈,三个redis服务已经启动了哦

4、因为上次小编曾经提到过,如果只有一台redis服务在启动的话,那么我们就很简单,我们就直接执行./redis-cli就可以连接上redis服务了,但是如果有多个redis服务的话,那么我们就需要用./redis-cli -h -p,这个命令来启动redis服务哦

这样我们就连接到了8001这个端口的redis服务

5、进入之后我们可以用info信息来查看redis的一些信息,其中Replication这个是redis的主从信息,当然我们也可以直接使用info replication命令来查看redis的主从信息

Redis的集群搭建(主从复制)_第2张图片我们可以看到,role这个代表他是主节点还是从节点,这台是显示的是naster,那么含义为主节点,之后connected_slaves代表又一个从节点连接,显示的是0,代表并没有从节点对这个redis进行连接。

6、接下来就是我们将这三台redis搭建成主从的模式的时刻了,我们可以通过两种方式来配置从机。

   (1)在从机的配置文件中配置slaveof   

            之后我们来重启这台配置后的redis服务

            下面我们看一下主机,还是使用相同的命令 info replication来看一下8001这个主机是否拥有了一台从机

Redis的集群搭建(主从复制)_第3张图片

            我们可以看到,现在我们已经有了一台从机,并且是端口号为8002的从机,我们配置成功了哟!!!

         (2)接下来我们来看第二种方式,我们可以直接用客户端命令slaveof  来指定这台从机的主机是哪一台。接下来我们用8003端口的这台机器来演示一下。

          接下来我们去8001端口的这台机器上看一下主从情况。

Redis的集群搭建(主从复制)_第4张图片         我们可以很清楚的看到,8001端口的这台redis服务已经拥有了两台从机哦,说明我们已经设置成功了哦!!

7、接下来我们来验证一下,这个主从复制的模式是否生效

    (1)我们用keys * 或者dbsize来查看一下主机和从机是否拥有数据

我们可以看到主机和从机都没有数据,好现在我们只向主机写入数据,看看从机是否可以被同步

我们可以看到,仅仅向主机写入数据后,从机的数据也得到了同步哦!

8、下面我们向从机写入数据看看会发生什么

如果我们向从机写入数据,就会报错从机是只读,不可以写入数据哦! 

好啦,关于redis的主从复制,就和大家分享这么多吧!如果小编的内容对大家有所帮助的话,及请大家为小编点个赞和关注吧。点关注,不迷路!

 

 

 

 

 

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号