美文网首页
redis主从复制

redis主从复制

作者: 小名源治 | 来源:发表于2022-10-18 09:32 被阅读0次

概念

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master / leader),后者称为从节点(slave / follower);数据的复制是单向的,只能由主节点到从节点。Master以写为主Slave 以读为主。(用于读写分离,降低单个服务器的压力)
默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

作用

  • 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余的方式。
  • 故障恢复:当主节点故障时,从节点可以暂时替代主节点提供服务,是一种服务冗余的方式
  • 负载均衡:在主从复制的基础上,配合读写分离,由主节点进行写操作,从节点进行读操作,分担服务器的负载;尤其是在多读少写的场景下,通过多个从节点分担负载,提高并发量。
  • 高可用基石:主从复制还是哨兵和集群能够实施的基础。
image.png

为什么要使用集群

  • 单台服务器难以负载大量的请求
  • 结构上:单台服务器故障率高,系统崩坏概率大
  • 容量上:单台服务器内存容量有限。

环境配置
只配置从库,不配置主库!

查看当前库的信息

127.0.0.1:6379> info replication  #查看当前库的信息
# Replication
role:master  #当前服务器角色 master
connected_slaves:0   #从机的数量
master_failover_state:no-failover
master_replid:4b503b2a08479b91d793ad3dd2058f51f9d5e826
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

配置redis集群

需要搭建一主二从的redis集群,因此需要3个配置文件

image.png
配置文件中需要修改的地方(在不同的docker容器中修改端口就够了):
port 6380  #设置redis端口
pidfile /var/run/redis_6380.pid  #重命名pid文件,方便区分
logfile "6380.log"  #redis的日志文件,便于区分

然后启动三个docker容器:
更换端口和数据卷挂载文件分别启动

docker run -p 6379:6379 --name redis -v /data/redis/redis.conf:/etc/redis/redis.conf  -v /data/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes
image.png

一主二从

默认情况下,每台redis服务器都是主节点
配置从机就相当于认老大,一主(80)二从(81,82)
配置从结点:

127.0.0.1:6381> SLAVEOF 1.15.233.193 6380 #配置主结点
OK
127.0.0.1:6381> info replication   #查询当前结点的信息
# Replication
role:slave  #结点变为从节点了
master_host:1.15.233.193 #自己主节点的地址
master_port:6380 #跟随的主节点的端口
master_link_status:up
master_last_io_seconds_ago:9
master_sync_in_progress:0
slave_read_repl_offset:56
slave_repl_offset:56
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:635800713dfc55f6ec94eb3fafecb4b2c8ace7a4
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:56
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:56

查看主节点信息

127.0.0.1:6380> info replication 
# Replication
role:master
connected_slaves:2  #从结点的数量,有两个
slave0:ip=1.15.233.193,port=6381,state=online,offset=126,lag=1
slave1:ip=1.15.233.193,port=6382,state=online,offset=126,lag=0
master_failover_state:no-failover
master_replid:635800713dfc55f6ec94eb3fafecb4b2c8ace7a4
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:140
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:140

上面这样就完成了一个简单的主从结点配置。
真正的主从结点配置应该在配置文件中配置才是永久的,使用命令行配置重启数据库它就不见了。

replication 主机pi 主机端口  #配置主结点
masterauth password #主机的密码(没有密码不用写)

细节

主机可读可写,从机只能读不能写!主机中的所有信息和数据都会被从机自动保存!

###########主机3680####################
127.0.0.1:6380> keys *
(empty array)
127.0.0.1:6380> set k1 v1
OK
127.0.0.1:6380> get k1
"v1"
##############从机3681##########
127.0.0.1:6381> get k1
"v1"
############从机3682##########
127.0.0.1:6382> get k1
"v1"

#########尝试用从机写数据###########
127.0.0.1:6381> set k2 v2
(error) READONLY You can't write against a read only replica.
您不能对只读副本进行写入。

测试:主机断开连接,从机依旧连接到主机的,但是没有写操作,这个时候,主机如果回来了,从机依旧可以直接获取到主机写的信息!
一台新的redis主机只要变为从机,立马就会从主机中获取值!

复制原理

Slave(从机)启动成功连接到master(主机)后会发送一个sync同步命令
Master接到命令,启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,并完成一次完全同步
全量复制︰而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步。
但是只要是重新连接master,一次完全同步(全量复制)将被自动执行!我们的数据一定可以在从机中看到!

相关文章

  • Redis|主从复制与哨兵机制

    1. Redis主从复制 1.1 Redis主从复制 Redis主从复制主要有两个角色,主机(master)对外提...

  • 【Redis学习笔记】13 Redis 主从复制

    1. Redis 主从复制特性 2. Redis 主从复制流程 3. Redis 主从复制操作 IP地址端口角色1...

  • Redis主从复制

    Redis主从复制 一.主从复制介绍 1.Redis复制功能介绍 1)Redis 使用异步复制。从 Redis2....

  • Redis的高可用

    Redis主从复制 什么是主从复制 Redis有三种集群方案,主从复制,哨兵,cluster集群,主从复制是指将一...

  • redis(二)

    Redis用户认证 禁用危险命令 主从复制的过程 主从复制的部署 哨兵 Redis哨兵+主从+密码 Redis哨兵...

  • Redis Sentinel 介绍与部署

    Redis Sentinel 介绍与部署 1. Sentinel介绍 1.1 主从复制的问题 Redis主从复制可...

  • 高可用的redis服务搭建

    Redis Sentinel 介绍与部署 1. Sentinel介绍 1.1 主从复制的问题 Redis主从复制可...

  • redis主从设置

    redis主从复制 Redis读取写入的速度都特别快,但是也会产生读压力特别大的场景。 Redis支持主从复制,主...

  • redis的三种集群方式

    redis的三种集群方式 redis有三种集群方式:主从复制,哨兵模式和集群。 1.主从复制 主从复制原理: 从服...

  • Redis哨兵集群

    redis-sentinel主从复制高可用 Redis-Sentinel Redis-Sentinel是redis...

网友评论

      本文标题:redis主从复制

      本文链接:https://www.haomeiwen.com/subject/rsajzrtx.html