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