发布时间: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的配置的哦!
这个是修改端口的位置哦
好的,我们相对应的把其他两个配置文件也改过来哈(因为redis至少三台机器才可以搭建一个集群)
3、下面呢我们就要开始启动终端啦!
4、因为上次小编曾经提到过,如果只有一台redis服务在启动的话,那么我们就很简单,我们就直接执行./redis-cli就可以连接上redis服务了,但是如果有多个redis服务的话,那么我们就需要用./redis-cli -h
这样我们就连接到了8001这个端口的redis服务
5、进入之后我们可以用info信息来查看redis的一些信息,其中Replication这个是redis的主从信息,当然我们也可以直接使用info replication命令来查看redis的主从信息
我们可以看到,role这个代表他是主节点还是从节点,这台是显示的是naster,那么含义为主节点,之后connected_slaves代表又一个从节点连接,显示的是0,代表并没有从节点对这个redis进行连接。
6、接下来就是我们将这三台redis搭建成主从的模式的时刻了,我们可以通过两种方式来配置从机。
(1)在从机的配置文件中配置slaveof
之后我们来重启这台配置后的redis服务
下面我们看一下主机,还是使用相同的命令 info replication来看一下8001这个主机是否拥有了一台从机
我们可以看到,现在我们已经有了一台从机,并且是端口号为8002的从机,我们配置成功了哟!!!
(2)接下来我们来看第二种方式,我们可以直接用客户端命令slaveof
接下来我们去8001端口的这台机器上看一下主从情况。
我们可以很清楚的看到,8001端口的这台redis服务已经拥有了两台从机哦,说明我们已经设置成功了哦!!
7、接下来我们来验证一下,这个主从复制的模式是否生效
(1)我们用keys * 或者dbsize来查看一下主机和从机是否拥有数据
我们可以看到主机和从机都没有数据,好现在我们只向主机写入数据,看看从机是否可以被同步
我们可以看到,仅仅向主机写入数据后,从机的数据也得到了同步哦!
8、下面我们向从机写入数据看看会发生什么
如果我们向从机写入数据,就会报错从机是只读,不可以写入数据哦!
好啦,关于redis的主从复制,就和大家分享这么多吧!如果小编的内容对大家有所帮助的话,及请大家为小编点个赞和关注吧。点关注,不迷路!