redis 主从设置
配饰redis主从备份操作很简单。在master中绑定服务器的ip,再在slave中设置slaveof即可
例如master:192.168.206.200 slave:192.168.206.201
配置如下:
#master配置
bind 192.168.206.200
port 6379
#############################
#slave 配置
slaveof 192.168.206.200 6379
slave-serve-stale-data yes #yes:设置master挂了之后slave仍然提供已经存在是数据。no:提示同步中
slave-read-only yes # 设置slave只读,2.6之后默认是只读
还有就是配置diskless ,但是此种方式在redis官方的说法上面是还在实验阶段。
master可选配置
min-slaves-to-write 3 # 配置至少有 3个slave连接正常的时候才同步数据
min-slaves-max-lag 10 # 最大延时少于 10s
slave可选配置
slave-announce-ip 5.5.5.5
slave-announce-port 1234
此配置的目的在于向master申明自己的ip和端口
注意:当master节点挂了时候,我们从服务同步就会失败,一般使用sentinel做主从同步监控和切换
redis 主从特性
- redis的主从同步时异步进行的。redis 2.8开始,slave告知周期性(acknowledge )同步流中处理的数据数量。
- 一个master可以有多个slave
- slave也可以连接到其他的salve,形成一个流状(cascading-like)结构
- redis的复制是非阻塞的,也就是说master在给一个或者多个同步数据的时候仍然可以处理客户端的请求
- redis的复制在slave上面也是非阻塞的,slave可以利用之前的老数据处理请求,同步完成跟新老数据
- 复制可以用于可扩展性,以便为只读查询拥有多个从站(例如,可以将慢速O(N)操作卸载到从站),或简单地用于数据冗余
- 主从备份可以避免master把所有数据都持久化,可以设置master不持久化,让多个slave中的一台做持久化。但是这中设置一定要小心,重启master会是空数据,这个时候如果slave同步了,数据就丢失了。所有重启时要利用slave持久化的数据重启。
工作原理
当建立一个从机器的时候,会尝试发从一条psync命令。主机会检测这是不是第一次链接。如果不是,主机就只会发送差异性数据。其他情况就是同步全部数据。
当全部同步出发的时候,主机启动后台保存功能产生rdb文件,同时开启缓冲区接受新的写入。当保存工作完成后,然后把rdb文件发送给从机器,接着把缓冲区的指令也发给从机器,实现同步。
下一节,总结下如何建立高可用(High Availability)的redis服务