一、redis主从概念及原理
1)理论
2)过程图解析

二、redis主从操作过程

###################################################################################################

一、redis主从概念及原理

1)主从复制理论
① 若启动一个Slave机器进程,则它会向Master机器发送一个sync_command命令,请求同步连接

② 无论是第一次连接还是重新连接,Master机器都会启动一个后台进程,将数据快照(RDB)保存到
数据文件中(执行rdb操作),同时Master还会记录修改数据的所有命令并缓存在数据文件中。

③ 后台进程完成缓存操作之后,Master机器就会向Slave机器发送数据文件,Slave端机器将数据
文件保存到硬盘上,然后将其加载到内存中,接着Master机器就会将修改数据的所有操作一并发送给Slave端机器。若Slave出现故障导致宕机,则恢复正常后会自动重新连接。

④ Master机器收到slave端机器的连接后,将其完整的数据文件发送给Slave端机几器,如果Mater同时收到多个slave发来的
同步请求则Master会在后台启动一个进程以保存数据文件,然后将其发送给所有的Slave端机器,确保所有的Slave端机器都正常。

redis主从读写分离 redis主从实现_redis


2)大致解析

1、从-》主发送sync同步数据请求
2、主redis 会fork 一个子进程,然后产生RDB文件(完全备份)的过程
2.1客户端还在持续的写入Redis
3、RDB文件持久化完成后,主redis会将RDB文件和缓存起来的命令推送给从服务器
4、复制、推送完成后,主redis会持续的同步操作命令->利用AOF(增备的部分)持久化功能
5、在下一台从REDIS接入主从复制集群之前,会持续利用aof的方式同步数据给从redi

3搭建Redis主从复制
节点名IP地址
master 192.16810.20
slave1 192.168.10.21
slave2192.168.10.31
( 1)安装Redis
三台服务器都需要安装

#按需求关闭安全策略
 systemctl stop firewalld
 systemctl disable firewalld
 setenforce o
 yum -y install gcc gcc-c++ make
 cd / opt
 wget -p /opt http://download.redis.io/releases/redis-5.0.9.tar.gz
 tar -zxvf redis-5.0 .9.tar.gz
 cd redis-5.0 .9
 make && make PREFIX=/usr/ local/ redis install
 #Redis源码包中直接提供了makefile文件直接执行make与make install命令进行安装
 cd / opt / redis-5.o.9/utils/
 ./install server.sh
 #回车,直到出现以下选项,手动修改为"/usr/local/redis/bin/redis-server"Please select the redis executable path [/usr/local/bin/redis-serverI
 /usr/ local/ redis/bin/ redis-server
 ln -s /usr/ local/redis/bin/*/usr/ local/bin/
 #检查服务状态
 Netstat -natp l grep “redis”

(2)修改Redis配置文件

①Master节点

vim /etc/ redis/ 6379.conf
 bind 127.0.0.0.1 192.168.10.20
 #70行,修改监听地址为
daemonize yes
 #137行,开启守护进程
 logfile /var/ 1oglredis_6379.1og
 #172行,指定日志文件目录
 dir /var/ lib/ redis/ 6379
 #264行,指定工作目录
 appendonly yes
 #700行,开启AOF持久化功能
/etc/ init.d/ redis_6379 restart
 #重启服务使配置生效

redis主从读写分离 redis主从实现_Redis_02

(3)验证主从效果

主节点输入

tail -f /var/ log / redis_6379.log

redis主从读写分离 redis主从实现_数据文件_03

redis-cli info replication

redis主从读写分离 redis主从实现_数据库架构_04

redis主从读写分离 redis主从实现_Redis_05


redis主从读写分离 redis主从实现_数据文件_06

#Replication
 role:master
 connected_slaves : 2
 slave0:ip=192.168.10.31,port=6379,state=online,offset=42,lag=1
 slave1:ip=192.168.10.21,port=6379,state=online,offset=42,lag=1
 #master启动时生成的40位16进制的随机字符串,用来标识master节点
 master_replid:e920ac8821584bd21f9edbff2eeef48eabd3499c
 #切换主从的时候master节点标识会有更改
 master_replid2:0000000000000000000000000000000000000000
 #复制流中的一个偏移量,master处理完写入命令后,会把命令的字节长度做累加记录,统计在该字段。该字段也是实现部分复制的关键字段。
 master_repl_offset:42
 second_repl_offset:-1
 repl_backlog_active:1
 repl_backlog_size:1048576
 repl_backlog_first_byte_offset:1
 repl_backlog_histlen:42
 #无论主从,都表示自己上次主实例repid1和复制偏移量;用于兄弟实例或级联复制,主库故障切换bsvlcvs

redis主从读写分离 redis主从实现_redis_07

redis主从读写分离 redis主从实现_数据文件_08