09.Redis主从复制原理

1、Redis主从复制架构的介绍node

## 基本介绍redis

01:一个主能够有多个从(一主多从);从库下能够有多个从(级联式主从);
02:Redis主从复制时是使用异步复制(主无论slave有没有接收到数据);
03:复制时不会阻塞主服务器响应客户端的请求,由于在进行数据同步时,
    主上面执行bgsave命令for出一个子进程来进行数据的同步操做;
04:在复制时可能会影响slave端redis的主进程对客户端的响应;在2.8版本
    之后,slave默认是只读的哈?
    例如:主从复制架构,写是在master端进行,你经过手段作了读写分离,
    让客户端在slave中进行读的操做,此时slave在同步(无论全同步,仍是
    增量同步)master端的数据时会不会阻塞客户端的读取操做呢?
    解答:这个实际上是由参数slave-serve-stale-data控制的,它有两个值,
    yes和no;yes表示仍然响应,可能数据不是最新的;默认就是yes;no表示
    不响应,给客户端报"SYNC with master in progress"错误;

## 主从复制时的一个数据安全问题安全

## 基于有数据持久化(无论是RDB仍是AOF)的需求下:
01:Master端若没有开启持久化,而Slave中开启了持久化;
02:若Master端重启或宕服/机恢复后,会销毁Slave中的数据(持久化文件和内存中的数据)

2、主从复制的原理bash

## Master端的参数配置服务器

## Basic parameters
bind 172.16.1.31                          # Master端redis绑定的IP地址
protected-mode yes                        # 开启安全模式,只能经过bind的地址链接
port 6379                                 # Master端redis监听的端口
maxmemory 1GB 
requirepass chenliang                     # Master端redis的链接密码
daemonize yes
databases 16
syslog-enabled no
loglevel notice
logfile /data/redis/6379/logs/redis.log
pidfile /data/redis/6379/run/redis.pid
unixsocket /data/redis/6379/run/redis.sock
 
## Client
maxclients  10000
timeout 300
tcp-backlog 511
tcp-keepalive 60
 
## RDB Persistence
save 900 1                                # 900秒内有1个key被改变就进行rdb持久化
save 300 10                               # 300秒内有10个key被改变就进行rdb持久化
save 60 10000                             # 60秒内有10000个key被改变就进行rdb持久化
dir /data/redis/6379/data/                # 持久化文件的保存路径
dbfilename dump.rdb                       # rdb持久化的文件名称
rdbcompression yes                        # 对字符串是否开启压缩,默认是yes
rdbchecksum yes                           # 是否对持久化文件进行检测

## replication
repl-disable-tcp-nodelay no               # 在主从复制的时候关闭tcp的延迟,这样master一但有数据产生,当即发送给slave;
repl-timeout 60                           # 主从复制的超时时间,默认是60秒,不要超过timeout的时间,数据集较大时要调大;
repl-diskless-sync no                     # 关闭redis的无盘复制,默认也是no,还在实验中,不要开启哈;

## Slave端的参数配置架构

## Basic parameters
bind 172.16.1.32
protected-mode yes
port 6379
maxmemory 1GB
requirepass chenliang
daemonize yes
databases 16
syslog-enabled no
loglevel notice
logfile /data/redis/6379/logs/redis.log
pidfile /data/redis/6379/run/redis.pid
unixsocket /data/redis/6379/run/redis.sock
 
## Client
maxclients  10000
timeout 300
tcp-backlog 511
tcp-keepalive 60
 
## RDB Persistence
save 900 1
save 300 10
save 60 10000
dir /data/redis/6379/data/
dbfilename dump.rdb
rdbcompression yes
rdbchecksum yes
 
# replication
slaveof 172.16.1.31 6379         # 告诉slave它要链接的Master的IP、端口
masterauth "chenliang"           # 告诉slave链接Master时须要的密码,前面master进行了设置的
repl-ping-slave-period 10        # slave每隔10秒检测(ping)一下master是否存活
repl-timeout 60                  # 
slave-read-only yes              # 设置slave为只读,2.8版本之后默认是只读的哈
slave-serve-stale-data yes       # slave与master断开,或者正在全量同步数据时,slave是否响应客户端的读请求;

## 当Slave第一次与Master创建链接的过程;Master和Slave都开启了RDB持久化。less

## Slave与Master创建链接后,Master端产生数据了;接上图异步

## Slave与Master创建链接后,Slave重启或者宕机恢复后[但slave的RDB持久化文件没有被移除或损坏,Master也仍是好好的运行着哈,重来没有重启过]。接上图socket

## Master重启或宕服恢复后,Slave再次链接Master时的过程tcp

 

相关文章
相关标签/搜索