Redis的伪集群搭建以及主从复制原理


以下总结了关于Redis比较全面的知识笔记以及面试题,方便自己复习的同时希望对大家有所帮助。

序号 内容 链接地址
1 Redis的基础知识、单机版安装、数据类型介绍(老版本) https://blog.csdn.net/weixin_43246215/article/details/107474283
2 Redis常用命令、配置文件介绍、数据持久化方式、集群搭建 (老版本) https://blog.csdn.net/weixin_43246215/article/details/107947562
3 Redis的五种常用数据类型、三种特殊数据类型详解 https://blog.csdn.net/weixin_43246215/article/details/108041739
4 Redis基本的事务操作以及使用Redis实现乐观锁 https://blog.csdn.net/weixin_43246215/article/details/108045931
5 使用JedisAPI操作Redis以及Jedis实现Redis事务 https://blog.csdn.net/weixin_43246215/article/details/108067542
6 Redis的配置文件详解(中文) https://blog.csdn.net/weixin_43246215/article/details/108068245
7 Redis数据持久化的两种方式以及Redis实现订阅发布 https://blog.csdn.net/weixin_43246215/article/details/108068797
8 Redis的伪集群搭建以及主从复制原理 https://blog.csdn.net/weixin_43246215/article/details/108069472
9 Redis中哨兵(Sentinel)模式的使用以及相关配置介绍 https://blog.csdn.net/weixin_43246215/article/details/108088179
10 Redis中的缓存穿透、缓存击穿以及缓存雪崩(理论知识) https://blog.csdn.net/weixin_43246215/article/details/108089026
11 Spring整合Redis实现查询缓存以及同步缓存 待更新
12 SpringBoot整合Redis以及自定义Redis Template https://blog.csdn.net/weixin_43246215/article/details/108476328
13 Redis常见面试题 https://blog.csdn.net/weixin_43246215/article/details/108090095
14 待更新

Redis主从复制

一、主从基本知识

1、概念

  • 主从复制,指的是一台Redis服务器的数据,复制到其它的Redis服务器。前者称为主节点(Master/leader),后者称为从节点(Slave/follower);
  • 数据的复制时单向的,只能由主节点到从节点
  • Master以写为主,Slave以读为主
  • 默认情况下,每台Redis服务器都是主节点
  • 一个主节点可以由多个从节点(或者没有从节点),但是一个从节点只能有一个主节点。

2、主从复制的作用

  • (1)数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。

  • (2)故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复,实际上时一种服务的冗余。

  • (3)负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载,尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大条Redis服务器的并发量。

  • (4)高可用(集群)基石:出了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。

3、一般来说,要将Redis运用于工程项目中,只使用一台Redis是万万不能的(如果宕机就完犊子,为了保证高可用性,一般都会配置三个,也就是一主二从),原因如下所示:

  • (1)从结构上:单个Redis服务器会发生单点故障,并且一台服务器需要处理所有的请求负载,压力较大,并且如果宕机了,那就…。
  • (2)从容量上:单个Redis服务器内存容量有限,就算一台Redis服务器内存容量为256G,也不能将所有内存用作Redis存储内存,一般来说,单台Redis最大使用内存不应该超过20G,建议如果超过20G立马切换集群

在这里插入图片描述
主从复制,读写分离,百分之八十的情况下都是在进行读操作,减缓服务器的压力,在架构中经常使用。一主二从,要想配置Redis集群,至少需要三台Redis。

二、集群环境配置

本次介绍的是单机多服伪集群的搭建,如果想要了解多机多服搭建伪集群的方式,请查看Redis集群搭建。

1、查看当前库信息的命令介绍

由于每台Redis服务器默认情况下都是主机,因此只配置从库,不配置主库。
使用下列命令查看当前库的信息
info replication # 查看当前库的信息

#Replication     
role:master                 # 角色为主机
connected_slaves:0          # 从机个数为0
master_replid:2b43aa6b3e393170c8a742e67b9b652a6b2994fa
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

2、搭建伪集群(单机多服),一主二从

这里我们使用的端口为6379,6380,6381,并且在一个Redis机器上搭建伪集群。
在这里插入图片描述

  • 第一步:首先打开四个客户端,并且四个客户端都进入到/usr/local/redis/bin目录下。
    **注意:**前三个客户端用于搭建伪集群,最后一个客户端用于测试
    在这里插入图片描述
  • 第二步:拷贝配置文件redis.conf
    将配置文件拷贝三份,由于Redis是依赖配置文件启动的,所以复制三份来模拟三个服务器。
    在这里插入图片描述
  • 第三步:修改每个配置文件,修改的内容如下所示:
    (1)端口号
    (2)pid名字
    (3)log文件名字
    (4)dump.rdb名字
    详细如下所示:
6379的端口:
port 6379
pidfile /var/run/redis_6379.pid
logfile "6379.log"
dbfilename dump6379.rdb

6380的端口:
port 6380
pidfile /var/run/redis_6380.pid
logfile "6380.log"
dbfilename dump6380.rdb

6381的端口:
port 6381
pidfile /var/run/redis_6381.pid
logfile "6381.log"
dbfilename dump6381.rdb
  • 第四步:启动三个服务并且连接Redis
    在每个客户端中依次执行一条命令:

第一个:
./redis-server redis79.conf
在这里插入图片描述
第二个:
在这里插入图片描述
第三个:
在这里插入图片描述
第四个用于查看:ps aux|grep redis
在这里插入图片描述
图中所示,三个Redis的服务以及连接都成功了。
这个时候我们可以使用:info replication命令在每个Redis服务器中查看信息,可以发现,每个Redis服务器默认都是主机。

三、一主二从模型(使用命令行配置实现主从)

默认情况下,每台Redis服务器都是主节点
因此我们一般情况下去配置从机就行了。
在每台Redis的客户端使用:info replication 命令就可以知道该服务器的信息。

1、使用命令行配置主从(暂时性):认老大,一主(79)二从(80,81)

在从机中,执行:SLAVEOF 主机IP 主机端口port:认老大,找哪个角色当自己老大,也就是让哪个服务器当自己的主机。

意思就是,作为该IP、port的主机的从机,6380端口的详细操作如下所示:
在这里插入图片描述
接下来去6379主机当中查看对应信息:
在这里插入图片描述
以上就搭建了一主一从,接下来再将另外一台6381端口的客户端也认6379当老大就行了。同样的操作,在6381端口中执行slaveof命令。

注意:在真实的主从配置应该在配置文件中配置,这样的话才是永久的,这里使用的是命令,所以是暂时的。

2、如何通过配置文件实现主从(永久性)

这里介绍一下如何通过配置文件实现永久性的主从,范例中不用修改。

配置永久的主从,在配置文件中修改的地方为:
在这里插入图片描述
将配置文件中的配置主从注释去掉,然后修改成主机的IP和主机的端口,如果主机有密码就配置好密码就行了。

3、主从中的注意事项

(1)主机主要用于写,从机不能写只能读,主机中的所有信息和数据都会自动被从机保存。下面测试:

  • 主机(6379)写:
    在这里插入图片描述
  • 从机(6380,6381)只能读不能写:
    在这里插入图片描述

(2)在没有配置哨兵时,如果主机宕机了,这个时候从机依旧能够连接到主机的,只是集群中没有写操作了,但是读操作还是可以的。如果主机回来了(重新连接),从机依旧可以直接获取到主机写的信息。

(3)如果使用命令行来配置主从模式,如果其中的一个从机(6381)重启了,这个时候该从机(6381)就会重新变回了主机,这个时候是不能获取主机(6379)中获取值的,只要重新将它设置为从机(6381),立马就能从主机(6379)中获取值。

(4)如果是在配置文件中配置的主从模式,从机重启之后是立马能够从主机中获取值的。

四、复制原理

从机Slave启动成功连接到主机Master后会发送一个sync同步命令;

Master接到命令以后,启动后台的存盘进程,同时收集所有接到的用于修改数据集命令,在后台执行完毕之后,Master将传送整个数据文件到Slave,并完成一次同步。

  • 全量复制:当slave服务接收到数据库文件数据后,将其存盘并加载到内存中。

  • 增量复制:Master继续将新的所有收集到的修改命令依次传给Slave,完成同步。

只要重新连接上Master,就会进行一次完全同步(全量复制),我们的数据一定可以在从机上看到

从机从无连接到连接上主机后,就会进行一次全量复制,在从机连接主机的期间,主机新增了一些数据,这个时候会进行增量复制。

五、层层链路模型(谋朝篡位手动版)

注意:一主二从和以上模式在工作中都不会使用,这里只是用于学习。
在这里插入图片描述
以上模型也能实现主从复制,6380依旧是从机,只不过6381变成了6380的从机,而6379依旧是6380的主机。

如果6379主机断开连接了,这个时候没有老大了,就需要进行手动配置,从机中可以使用SLAVEOF no one命令让自己变成主机,然后其它的节点可以手动连接到最新的这个主节点。以上如果6379宕机了,这个时候可以手动将6380设置为主机,然后再让6381连接这个节点。

如果设置好新主机之后,之前断开连接的主节点回来(修复)了,那么之前的主机也只是一个普通的主节点,如果想要再次变为6380他们的主节点就需要重新配置连接。

以上的模型,都是为后面的哨兵Sentinel(谋朝篡位自动版)做铺垫,以此对主从有更好的理解。(文章是自己学习时的笔记整理,仅用于学习参考,不喜勿喷。)

猜你喜欢

转载自blog.csdn.net/weixin_43246215/article/details/108069472