开发者学堂课程【Redis 入门到精通(进阶篇):主从复制-数据同步阶段注意事项】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/765/detail/13453
主从复制-数据同步阶段注意事项
目录
一,数据同步阶段流程
二,数据同步阶段 master 说明
三,数据同步阶段 slave 说明
本章主要讲解数据同步的流程以及说明
一,数据同步阶段流程
从日志上看整个过程,输入之后进行启动。
以下为启动之后的代码:
18849:m 14 0ct 07:09:45.929 # WARNING: The TCP backlog setting of 51l cannot be enforced because
/proc/sys/net/core/somaxconn is set o the lower value of 128.
18849:M 14 0ct 07:09:45.929 # Server initialized
18849:M 14 0ct 07:09:45.929 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix thi issue add 'vm.overcommit_memory = 1'to /etc/sysct1.conf and then reboot or run the command 'sysct1 vm.overcommit_memory=l' for this o take effect.
18849:M 14 0ct 07:09:45.929 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency nd memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as n t,and add it to your /etc/rc.local in order to retain the setting after a reboot. redis must be restarted after thp is disabled.
18849:m 14 0ct 07:09:45.947 * Db loaded from append only file: 0.018 seconds
18849:M 14 0ct 07:09:45.947 * Ready to accept connections
18849:m 14 0ct 07:09:46.740* Slave 127.0.0.1:6380 asks for synchronization
18849:m 14 oct 07:09:46.740+ Partial resynchronization not accepted: Replication ID mismatch (slave asked for '6f2eb3655226726elcel5b70be6aa7feb', my replication IDs are 'b07556221410543d92981c9e8e18c619eebf8e97’and "00000000000000000000000000000000000000
18849:M 14 oct 07:09:46.740 starting BGSAVE for sync with target: disk
18849:m 14 oct 07:09:46.741 * Background saving 'started by pid 18857.
18857:c 14 0ct 07:09:46.743 * DB saved on disk
18857:c 14 0ct 07:09:46.744 * RDB:O MB of memory used by copy-on-write
18849:M 14 0ct 07:09:46.783* Background saving terminated with success
18849:M 14 oct 07:09:46.783 * Synchronization with slave 127.0.0.1:6380 succeeded
接收到以上信息以后,去加载 RDB 的文件,连接 master,之后master 与 slave 的同步开始。接下来就是一个信息同步过程。简单来说,这个过程都是在他整个启动过程中运行的,所以相对来说速度比较快,如果数据量比较大的时候,可以看到整个过程。
二,数据同步阶段 master 说明
1.如果 master 数据量巨大,数据同步阶段应避开流量高峰期,避免造成 maste r阻塞,影响业务正常执行。
2.复制缓冲区大小设定不合理,会导致数据溢出。如进行全量复制周期太长,进行部分复制时发现数据已经存在丢失的情况,必须进行第二次全量复制,致使 slave 陷入死循环状态。
repl-backlog-size 1mb
3.master 单机内存占用主机内存的比例不应过大,建议使用508-708的内存,留下308-508的内存用于执行 bgsave 命令和创建复制缓冲区。
三,数据同步阶段 slave 说明
1.为避免 slave 进行全量复制、部分复制时服务器响应阻塞或数据不同步,建议关闭此期间的对外服务。
slave-serve-stale-data yes l no
2.数据同步阶段,master 发送给 slave 信息可以理解 master 是slave的一个客户端,主动向 slave 发送命令。
3.多个 slave 同时对 master 请求数据同步,master 发送的 RDB文件增多,会对带宽造成巨大冲击,如果 master 带宽不足,因此数据同步需要根据业务需求,适量错峰。
4.slave 过多时,建议调整拓扑结构,由一主多从结构变为树状结构,中间的节点既是 master,也是slave。注意使用树状结构时,由于层级深度,导致深度越高的 slave 与最顶层 master 间数据同步延迟较大,数据一致性变差,应谨慎选择。