redis主从工作原理:
全量数据复制:salve启动时,会和主节点建立长连接,向主节点发送一个psync的命令,请求复制数据。master收到命令,会通过bgsave生成当前数据的RDB快照,将数据发送给slave,slave会清空老数据并且加载master发送来的RDB数据。在这期间客户端可能又会有新的修改命令到master,master会将新命令缓存,持续通过长连接发送给salve,salve持续恢复数据。
部分数据复制:slave和master断开重连之后,redis2.8之后支持部分数据复制:断点续传。master会有一个缓冲区,相当于一个缓冲队列,存放最近的命令,先进先出。slave和master断开重连之后,会将同步数据的偏移量(记录同步数据的位置)传到master。如果缓冲区能找到这个位置,直接从缓冲区增量复制,如果找不到,直接进行全量复制。
redis主从架构搭建:在一台服务器启动两个redis实例模拟主从,6379为主,6380为从,redis版本号为5.0.10,redis运行的数据放在/usr/local/redis-5.0.10/data
创建两个目录,分别存储两个目录的数据(根据实际redis存储数据的情况处理):
cd /usr/local/redis-5.0.10/data/ mkdir 6379 6380
copy一分配置文件
cd /usr/local/redis-5.0.10 cp redis-conf redis6380.conf
编辑slave配置,要注意redis版本号!!!不同的版本可能出现配置不同。5.0之前使用slaveof
# 修改端口号 port 6380 # redis进程号文件 pidfile /var/run/redis_6380.pid # 指定日志文件 logfile "6380.log" # 指定数据目录 dir /usr/local/redis‐5.0.10/data/6380 # 从本机6379实例恢复数据 replicaof 192.168.0.16 6379 # 配置从节点只读 replica‐read‐only yes
# 启动主实例 src/redis-server redis.conf # 启动从实例 src/redis-server redis6380.conf
打开两个窗口:一个连接主实例,src/redis-cli,一个连接从实例,src/redis-cli -p 6380,在master上set一个键值,在slave上马上就可以看到