Redis学习04:主从复制Replication
主从复制是什么
1-官网描述:https://redis.io/topics/replication
主从复制可以做什么
1-读写分离
2-容灾备份
如何实现主从复制
1-配置(只需设置从库,无需设置主库)(假设配置一主二从,主端口号为6379,从端口号位6380,6381)
1-复制redis.conf为redis_slave_6380.conf,并修改redis_slave_6380.conf中的相关配置,如下;其中port和salveof必须设置
port 6380//设置端口号,必须设置 slaveof 127.0.0.1 6379//这是主库的IP+port daemonize yes//开启守护进程,允许redis可以后台进行 logfile "log6380.log"//设置日志文件名称 pidfile /var/run/redis_6380.pid//设置PID文件路径 dbfilename dump_slave_6380.rdb//设置RDB文件名称
2-从库6381设置步骤同1,将6380改成6381即可;
3-确认是否配置成功:依次启动6379,6380,6381Redis服务器,并依次进入三个客户端,执行info replication;结果如下,表示成功;
4-在主库写入值,从库也可以读取到值
主从复制的几个细节问题
1- 切入点问题?slave1、slave2是从头开始复制还是从切入点开始复制?比如从k4进来,那之前的k1、k2、k3是否也可以复制
答:是从头开始复制全部数据
2- 从机是否可以写?set可否?
答:从库禁止写入;强制写入,报"(error) READONLY You can't write against a read only slave."异常
3- 主机shutdown后情况如何?从库是上位还是原地待命
答:从库原地待命,不会自动升为主库
4- 主机又回来了后,主机新增记录,从机还能否顺利复制?
答:可以顺利复制;
5- 其中一台从机down后情况如何?依照原有它能跟上大部队吗?
答:从机down后,再次启动就会独立成为新的主机;但是如果从机slaveof ip port是写在配置文件的,那么从机重启后依然会是原主机的从机;
复制原理
Slave启动成功连接到master后会发送一个sync命令
Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令, 在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步
全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步
但是只要是重新连接master,一次完全同步(全量复制)将被自动执行