首页 > 数据库 >redis主从复制

redis主从复制

时间:2023-08-29 14:45:08浏览次数:31  
标签:主库 主从复制 redis conf 从库 节点

目录

一 什么是主从复制

redis 单实例--->容易产生机器故障;容量瓶颈;QPS(每秒查询率)瓶颈

1.1 主从复制:一主一从,一主多从

  • 做读写分离
  • 做数据副本
  • 扩展数据性能

1.2 特点

  • 一个master可以有多个slave
  • 一个slave只能有一个master
  • 数据流向是单向的,从master到slave

1.3 Redis主从复制的作用

  • 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
  • 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
  • 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
  • 高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。

二 主从原理

1. 副本库(从库)通过 slaveof 127.0.0.1 6379 命令,连接主库,并发送SYNC给主库 
2. 主库收到SYNC,会立即触发BGSAVE,后台保存RDB,发送给副本库
3. 副本库接收后会应用RDB快照
4. 主库会陆续将中间产生的新的操作,保存并发送给副本库
5. 到此,我们主复制集就正常工作了
6. 再此以后,主库只要发生新的操作,都会以命令传播的形式自动发送给副本库.
7. 所有复制相关信息,从info信息中都可以查到。即使重启任何节点,他的主从关系依然都在。
8. 如果发生主从关系断开时,从库数据没有任何损坏,在下次重连之后,从库发送PSYNC给主库
9. 主库只会将从库缺失部分的数据同步给从库应用,达到快速恢复主从的目的
(一定会有标识符,记录是从哪里断开的)

2.1 主库是否要开启持久化(一般情况要开启)

如果不开有可能,主库重启操作,造成所有主从数据丢失!
``

# 三 主从搭建步骤

## 3.1 前置条件
```python
# 前置条件1:至少需要两台机器-->我们使用在一台机器运行两个redis实例

# 前置条件2:辅助配置(主从数据一致性配置)
min-slaves-to-write 1
min-slaves-max-lag 3
#slave从属装置
#那么在从服务器的数量少于1个,或者三个从服务器的延迟(lag)值都大于或等于3秒时,主服务器将拒绝执行写命令

3.2 方式一

# 1 6380是从,6379是主
# 2 启动器两台实例
# 3 搭建主从关系
	-在从库上执行:slaveof ip port 异步操作
	slaveof 127.0.0.1 6379

# 4 断开主从关系,取消复制,不会把之前的数据清除
	-在从库上:slaveof no one

3.3 方式二:配置文件方式

# 方式二:配置文件方式
# 在从库的配置文件中:
slaveof ip 端口
slave-read-only yes #从节点只读,因为可读可写,数据会乱


# 使用info查看主从关系

# 设置一主一从
mkdir -p redis/conf redis/data redis1/conf redis1/data
vim redis.conf
# 主库设置
daemonize no
pidfile redis.pid
bind 0.0.0.0
protected-mode no
port 6379
timeout 0
logfile redis.log
dbfilename dump.rdb
dir /data


vim redis1.conf
# 从库设置
daemonize no
pidfile redis.pid
bind 0.0.0.0
protected-mode no
port 6380
timeout 0
logfile redis1.log
dbfilename dump.rdb
dir /data
slaveof 10.0.0.101 6379
slave-read-only yes
#从库配置文件中加上这两句话

# 启动主从库redis容器
docker run -p 6379:6379 --name redis_6379 -v /home/redis/conf/redis.conf:/etc/redis/redis.conf -v /home/redis/data:/data -d redis redis-server /etc/redis/redis.conf

docker run -p 6378:6379 --name redis_6378 -v /home/redis1/conf/redis.conf:/etc/redis/redis.conf -v /home/redis1/data:/data -d redis redis-server /etc/redis/redis.conf
            
            
cp redis.conf /home/redis2/conf/# 复制conf文件到redis2中的conf文件中
info replication# 获取复制相关信息

四 故障处理
slave故障

master故障

五 复制常见问题
1 读写分离

读流量分摊到从节点

可能遇到问题:复制数据延迟,读到过期数据,从节点故障

2 主从配置不一致

maxmemory不一致:丢失数据

数据结构优化参数:主节点做了优化,从节点没有设置优化,会出现一些问题

3 规避全量复制

第一次全量复制,不可避免:小主节点,低峰(夜间)

节点运行id不匹配:主节点重启(运行id变化)

复制挤压缓冲区不足:增大复制缓冲区大小,rel_backlog_size

4 规避复制风暴

单主节点复制风暴,主节点重启,所有从节点复制

标签:主库,主从复制,redis,conf,从库,节点
From: https://www.cnblogs.com/zjyao/p/17664718.html

相关文章

  • redis分布式锁,setnx+lua脚本的java实现
    1前言在现在工作中,为保障服务的高可用,应对单点故障、负载量过大等单机部署带来的问题,生产环境常用多机部署。为解决多机房部署导致的数据不一致问题,我们常会选择用分布式锁。目前其他比较常见的实现方案我列举在下面:基于缓存实现分布式锁(本文主要使用redis实现)基于数据库实......
  • 连接redis后 ,报错: ERR wrong number of arguments for ‘hset‘ command“怎么解决
    原因:ERRwrongnumberofargumentsfor‘hset‘command触发代码 解决方法:可能是java不匹配我本地3.2版本的redis,我换一个更大版本的redis就解决了 ......
  • redis持久化
    目录一持久化1.1什么是持久化1.2持久化的实现方式二rdb方案2.1使用2.2RDB问题三AOF3.1AOF介绍3.2#AOF的三种策略3.3AOF重写实现方式AOF重写配置:自动触发时机(两个条件同时满足):重写流程aof配置7.3混合持久化一持久化1.1什么是持久化redis的所有数据保存在内存中,对数......
  • Redis简介
    文章目录一、Redis是什么?二、Redis优缺点?三、Redis应用场景四、Redis安装和使用五、Redis为什么这么快?1、为什么采用单线程2、Redis的I/O多路复用一、Redis是什么?Redis(RemoteDictionaryServer:远程字典服务)是一个开源的使用ANSIC语言编写、遵守BSD协议、支持网络、可基于......
  • redis高级用法:慢查询、pipline与事务、发布订阅、bitmap位图、HyperLogLog、GEO地理位
    目录一高级用法之慢查询1.1生命周期1.2两个配置1.2.1slowlog-max-len1.2.2slowlog-max-len1.3设置慢查询1.5作用二pipline与事务2.1什么是pipeline(管道)2.2python客户端实现pipline2.3与原生操作对比2.4使用建议2.5原生redis操作操作事务三发布订阅3.1角色3.2模......
  • redis数据类型和使用命令
    目录一通用命令1.1通用命令1.2数据结构和内部编码1.3单线程架构,二字符串类型2.1字符串键值结构2.2常用命令三hash类型3.1哈希值结构3.2常用命令3.3hashvsstring四列表类型4.1列表特点常用命令五集合类型5.1特点5.2常用命令六有序集合类型6.1特点6.2常用命令......
  • Redis介绍跟安装配置
    目录一redis介绍1.1redis是什么1.2redis的特点二centos上安装redis三redis启动方式3.1最简启动3.2动态参数启动(了解)3.3配置文件启动一redis介绍1.1redis是什么开源:早起版本2w3千行基于键值对的存储系统:字典形式多种数据结构:字符串,hash,列表,集合,有序集合高性能,功......
  • redis客户端操作
    目录一redis客户端操作二redis使用场景一redis客户端操作#客户端链接 redis-cli-h地址-p端口#非交互式的 res=subprocess.getoutput('systemctlstartmysqld')res=subprocess.getoutput('systemctlstopmysqld')res=subprocess.getoutput('redis-clige......
  • redis分布式锁,setnx+lua脚本的java实现 | 京东物流技术团队
    1前言在现在工作中,为保障服务的高可用,应对单点故障、负载量过大等单机部署带来的问题,生产环境常用多机部署。为解决多机房部署导致的数据不一致问题,我们常会选择用分布式锁。目前其他比较常见的实现方案我列举在下面:基于缓存实现分布式锁(本文主要使用redis实现)基于数据库实现分布......
  • Redis常用命令
    目录起因配置bind端口连接开启连接关闭连接命令key相关字符串相关hash相关List相关Set相关SortedSet相关GEO相关服务器命令引用起因从标题来看,似乎这篇博文没有看下去的必要了,谁用redis还敲命令行,不都是GUI嘛。确实,GUI现在特别的好用,直观、高效还美观。但是,在生产环境下GUI可......