redis学习

Redis主从复制的使用姿势

2019-08-19  本文已影响0人  奔跑的Robi

使用背景

redis是现在分布式应用刚需的一个缓存数据库,具有超强的并发能力,高吞吐量。但是在部署时同样需要考虑redis的高可用,通常redis高可用可以通过主从复制和哨兵机制来做保证。下面介绍一下复制方式的使用,在另一篇里会分析主从复制的细节

建立从节点的方式

建立后可使用info replication命令查看本机的复制配置

image.png
可以看到role是slave,并且还有master的相关信息
字段解释如下:
# Replication
role:slave                      //节点角色
master_host:localhost           //主节点的IP
master_port:6379                //主节点的端口
master_link_status:up           //与主节点的连接状态
master_last_io_seconds_ago:0    //主节点最后与从节点的通信时间间隔,单位秒
master_sync_in_progress:0       //从节点是否正在全量同步主节点的RDB文件
slave_repl_offset:407           //复制偏移量
slave_priority:100              //从节点的优先级
slave_read_only:1               //从节点是否只读
connected_slaves:0              //连接从节点的个数
master_repl_offset:0            //当前从节点作为其他从节点的主节点时的复制偏移量
//以下四种信息为通用的配置
repl_backlog_active:0           //复制缓冲区的状态
repl_backlog_size:1048576       //复制缓冲区的大小
repl_backlog_first_byte_offset:0//复制缓冲区起始偏移量,标识当前缓冲区可用的范围
repl_backlog_histlen:0          //标识复制缓冲区已存在的有效数据长度
127.0.0.1:9999> KEYS *          //由于主节点的键空间为空,所以从节点的键空间也为空。

实现效果

slave在启动的时候就会连接master,把数据同步过来,再在master上执行命令写入数据时,就会看到slave上同样有数据。但是slave模式下本身是只读的不可以写入,如果写入会报下面的错误

127.0.0.1:9999> SET key value
(error) READONLY You can't write against a read only slave.

部署方式

在slave的info replication信息中可以看到slave上同样有connection_slaves属性,说明slave也可以作为另一个机器的master去拷贝,也就是说我们的部署结构可以是这样

在数据量大时,slave的个数如果太多,master上拷贝的开销会很大,所以master上连接太多的slave是不好的,所以可以使用树形的方式减轻master的分发压力,但是这种方式对于孙子节点上的实例来说,要走两跳网络拷贝,所以数据更新很可能有延迟,所以这种方式比较适合AP系统,即弱一致性

断开从节点模式

防止主节点在不安全的情况执行写命令

min-slaves-to-write 3   //从节点数量少于3个,主节点拒绝执行写命令
min-slaves-max-lag 10   //3个从节点的延迟(lag)值,大于或等于10,主节点拒绝执行写命令

这样就保证了在从节点完备的情况执行写命令,不会因为从节点大面积宕机导致redis出现单机读写

上一篇下一篇

猜你喜欢

热点阅读