首页 > 数据库 >超详细--redis在Linux环境搭建主从复制

超详细--redis在Linux环境搭建主从复制

时间:2023-02-05 14:57:09浏览次数:59  
标签:主从复制 -- Redis redis conf 服务器 数据

引言
Redis是一个高性能的缓存中间件,一个Redis服务器可以支撑很多的并发请求。但是在一些超高的并发场景下,虽然Redis读写速度很快,但也会产生读写压力过大,服务器负载过高的情况。为了分担读写的压力和减轻服务器的负担,可以搭建Redis主从架构。主服务器可以进行读写,从服务器只对外提供读的功能。从服务器的数据是由主服务器同步过来。

一、主从复制的概念

主从复制是指将一台主Redis服务器的数据,复制到其他的从Redis服务器。前者称为主服务器(master/leader),后者称为从服务器(slave/follower) ; 数据的复制是单向的,只能由主服务器到从服务器。Master以写为主,Slave以读为主。一个主服务器可以有多个从服务器(或没有从服务器),但一个从服务器只能有一个主服务器。

 

 

 

二、主从复制的作用

1、读写分离:主节点写,从节点读,提高服务器的读写负载能力

2、数据冗余︰主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。

3、故障恢复︰当主服务器宕机时,可以由从服务器提供服务,实现快速的故障恢复 ; 实际上是一种服务的冗余。

4、负载均衡︰在主从复制的基础上,配合读写分离,主服务器提供写服务,从服务器提供读服务,分担服务器负载 ; 尤其是在写少读多的场景下,通过多个从服务器分担读负载,可以大大提高Redis服务器的并发量。

5、高可用基础︰主从复制是哨兵和集群能够实施的基础。

三、主从复制工作流程
主从复制过程大体可以分为3个阶段

1、建立连接阶段(即准备阶段)

2、数据同步阶段

3、命令传播阶段

四、主从复制的原理
1、当从连接上主服务器之后,从服务器向主服务发送进行数据同步消息

2、主服务器接到从服务器发送过来同步消息,把主服务器数据进行持久化,rdb文件,把rdb文件发送从服务器,从服务器拿到rdb进行读取

3、每次主服务器进行写操作之后,和从服务器进行数据同步

五、主从复制搭建过程
在根目录下创建myredis文件夹

 

 

打开redis的安装目录,输入pwd找到redis.conf的位置

 

 

 

将redis安装目录下的redis.conf复制到刚刚创建的myredis文件夹中

 

 

 

输入vi redis6380.conf创建一个叫redis6380.conf文件进入编辑,输入相关配置参数

include /myredis/redis.conf 引入我们刚刚复制的redis.conf作为公共文件
pidfile /var/run/redis_6380.pid 设置我们的一个pid文件的位置
port 6380 设置端口号为6380
dbfilename dump6380.rdb 设置持久化文件名
点击esc,输入:wq保存

 

重复上面步骤在myredis创建redis6381.conf,redis6382.conf,然后配置相关参数

 

 

将上述文件配置好后,尝试启动这3个不同端口号的redis服务端,并查看redis进程,此时可发现不同端口号的3个redis服务端在运行

 

 

 

启动不同端口号的redis客户端,输入info replication查看redis主从复制的一些统计信息,此时,我们可以发现三个服务器的role都为master(主节点),slaves(从节点)数量都为0。(默认情况)

 

 

 

 

 

 

此时,我们启动端口号为6381和6382的redis客户端,通过slaveof 127.0.0.1 6380命令将这两端口号的服务器设置为从服务器

 

 

 

 

 

 

此时打开主服务器的redis6380客户端,查看服务器信息,此时,可以看到主服务器的两个从服务器的信息。

 

 

 

六、主从结构的测试
接下来,测试一下主从复制的功能,先在主服务器写入数据,然后对数据进行读取,发现主服务器拥有读和写功能,从服务器只具有读功能。

 

 

 

启动端口号为6381和6382的从服务器客户端,查看数据,并测试写入数据,发现写入数据不成功。

 

 

 

 

七、主从复制的特点
1、采用异步复制;

2、一个主redis可以含有多个从redis;

3、每个从redis可以接收来自其他从redis服务器的连接;

4、主从复制对于主redis服务器来说是非阻塞的,这意味着当从服务器在进行主从复制同步过程中,主redis仍然可以处理外界的访问请求;

5、主从复制对于从redis服务器来说也是非阻塞的,这意味着,即使从redis在进行主从复制过程中也可以接受外界的查询请求,只不过这时候从redis返回的是以前老的数据, 如果你不想这样,那么在启动redis时,可以在配置文件中进行设置,那么从redis在复制同步过程中来自外界的查询请求都会返回错误给客户端;(虽然说主从复制过程中对于从redis是非阻塞的,但是当从redis从主redis同步过来最新的数据后还需要将新数据加载到内存中,在加载到内存的过程中是阻塞的,在这段时间内的请求将会被阻,但是即使对于大数据集,加载到内存的时间也是比较多的);

6、主从复制提高了redis服务的扩展性,避免单个redis服务器的读写访问压力过大的问题,同时也可以给为数据备份及冗余提供一种解决方案;

7、为了编码主redis服务器写磁盘压力带来的开销,可以配置让主redis不在将数据持久化到磁盘,而是通过连接让一个配置的从redis服务器及时的将相关数据持久化到磁盘,不过这样会存在一个问题,就是主redis服务器一旦重启,因为主redis服务器数据为空,这时候通过主从同步可能导致从redis服务器上的数据也被清空;

 

参考文档:

(25条消息) Redis主从复制的搭建_?671的博客-CSDN博客_redis主从复制搭建

标签:主从复制,--,Redis,redis,conf,服务器,数据
From: https://www.cnblogs.com/niCong/p/17093343.html

相关文章

  • MMLab中自定义模块初始化方法
    这方面好像介绍的少,看了下基本原理,下面介绍下如何在搭载权重的模型中加入自定义模块时方便的进行初始化。MMLab的逻辑时对每个部分进行初始化,若此部分定义了初始化方法为P......
  • spring.jackson.default-property-inclusion 不生效问题分析
    背景项目里每个返回体里都有@JsonInclude(JsonInclude.Include.NON_NULL)这个注解,也就是不返回null字段想有没有办法全局配置一下,这样就不用每个类都加这个注解了sprin......
  • tp5.x 自定义错误页
    thinkphp5自定义错误页面,话不多说,直接上干货1.关闭所有app_debug,即把 'app_debug'=>true修改为'app_debug'=>false2.在config.php(tp5.1config目录app.php)中配......
  • 15-switch多选择结构
    packagecom.wang.struct;publicclassDemo04{publicstaticvoidmain(String[]args){chargrade='D';switch(grade){case......
  • Spring2 - 入门案例
    Spring基本操作导入依赖在pom.xml中添加依赖添加依赖:<dependencies><!--springcontext依赖--><!--当你引入SpringContext依赖之后,表示将Spring的基础依......
  • 11.进程管理命令,用户管理和使用
    d.service结尾的进程是守护进程,守护系统后台服务  守护进程和系统服务是一一对应的关系 只查看当前用户使用的进程以及跟当前控制台相关联的进程。 “linux的终......
  • Range and Partition (CF2D) (???一言难尽, 观察条件推关键结论+贪心)
     大佬の思路:有2个条件:x-y最小化分段后要满足条件观察看看这2个条件可以诞生出什么结论啥的分段后要满足条件,->分段前整体的时候要满足什么条件呢?->那就是......
  • Spring1 - 介绍
    Spring介绍最核心模块IoC:InverseofControl控制反转把创建对象的过程交给Spring进行管理AOP:AspectOrientedProgramming面向切面编程代码简化:把方法中......
  • 05安装一个Hadoop分布式集群
    安装一个Hadoop分布式集群最小化的Hadoop已经可以满足学习过程中大部分需求,但是为了研究Hadoop集群运行机制,部署一个类生产的环境还是有必要的。因为集群机器比较少,笔者没......
  • CSAPP:浮点数表示
    1.定点表示受限于二进制表示长度影响表示的精度。2.IEEE浮点表示法:V=(-1)^sxMx2^E  s:符号,决定正负,对于0作为特殊情况处理。  M:二进制小数,范围为1~2-0.000......