Redis 主从复制使用与配置

实验环境

操作系统: ubuntu-16.04-x64
master: 192.168.0.101
slave: 192.168.0.120
redis版本:4.0.9

单节点redis存在的问题

1.单点故障

单节点redis异常退出后,将导致这个系统的服务不可用,也即存在所谓的”单点故障”

2.容量瓶颈

redis 是基于key-value的内存数据库,而单节点的物理内存是有上限的,因此单节点的容量不可能大于最大物理内存。

3.性能瓶颈

单节点redis的性能是存在瓶颈的,不能应对海量高并发的应用场景。

为了解决以上问题,redis提供了集群解决方案。今天介绍redis主从复制技术。

主从复制

redis的复制功能是支持多个数据库之间的数据同步。一类是主数据库(master)一类是从数据库(slave),主数据库可以进行读写操作,当发生写操作的时候自动将数据同步到从数据库,而从数据库一般是只读的,并接收主数据库同步过来的数据,一个主数据库可以有多个从数据库,而一个从数据库只能有一个主数据库。

master与slave的数据流是单向的,只能从master到slave。

  • 优点
    1.数据副本
    数据分布在多台机器上,增加了系统的可靠性,集群中任何一台机器宕机都不影响数据。

    2.扩展读性能
    在主从复制集群中,master 一般不接受读请求,只接受写请求,slave 处理各种读请求。因此可以大大扩展集群的写性能,特别适合读多写少的应用场景。

  • 缺点
    1.自动容错和恢复
    主从复制不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的IP才能恢复。

    2.数据一致性
    主机宕机,宕机前有部分数据未能及时同步到从机,切换IP后还会引入数据不一致的问题,降低了系统的可用性。

    3.复制开销
    Redis的主从复制采用全量复制,复制过程中主机会fork出一个子进程对内存做一份快照,并将子进程的内存快照保存为文件发送给从机,这一过程需要确保主机有足够多的空余内存。若快照文件较大,对集群的服务能力会产生较大的影响,而且复制过程是在从机新加入集群或者从机和主机网络断开重连时都会进行,也就是网络波动都会造成主机和从机间的一次全量的数据复制,这对实际的系统运营造成了不小的麻烦。

    4.扩展性
    主从复制较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。为避免这一问题,运维人员在系统上线时必须确保有足够的空间,这对资源造成了很大的浪费。

主从复制使用

1.配置

redis 主从的常见配置项:

slaveof <masterip> <masterport>  # master ip 和端口
masterauth <master-password>  # master 密码
slave-read-only yes #slave 只读
repl-diskless-sync no  ##slave-serve-stale-data yes  #当salve与mater丢失链接,或者正在同步的时候,有两种选择:如果 slave-serve-stale-data 设置为yes,slave将会响应client请求。数据可能是过时或者没有数据。如果 slave-serve-stale-data 设置为no,slave将会回复 error“sync with master in progress”。
repl-diskless-sync-delay 5 #套接字模式复制策略的等待时长,单位是秒。等待是想汇集更多的slave
repl-ping-slave-period 10 #slaves在预定的时间间隔内发送ping给server。可以通过repl_ping_slave_period选项设置。默认是10秒。可以理解为心跳。
repl-timeout 60 #与repl_ping_slave_period配合使用确认超时。
repl-disable-tcp-nodelay no
repl-backlog-size 1mb #slave与master断开后数据写入的存储空间大小
repl-backlog-ttl 3600 #slave 在 3600秒内不与主站恢复链接,则释放空间。
slave-priority 100 从站优先级,默认100,当主站宕机以后,哨兵会根据从站的配置,来确定把谁提升为主站。
min-slaves-to-write 3 #最小从服务器数
min-slaves-max-lag 10 #从服务器最大确认延迟
slave-announce-ip 5.5.5.5
slave-announce-port 1234

修改slave节点redis配置中的slaveof属性即可

#修改绑定地址与保护模式,使redis可以接受远程访问,master 节点也应修改此配置
bind 0.0.0.0
protected-mode no
# 配置slaveof 属性
slaveof 192.168.0.101 6379

启动master 节点与slave 节点,查看master 与slave 节点的信息

  • master

    # Replication
    role:master
    connected_slaves:1
    slave0:ip=192.168.0.120,port=6379,state=online,offset=450,lag=0
    master_replid:98964946bd40954a2edc52c72df20ad69ebfac9b
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:450
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:1
    repl_backlog_histlen:450
    
  • slave

    # Replication
    role:slave
    master_host:192.168.0.101
    master_port:6379
    master_link_status:up
    master_last_io_seconds_ago:6
    master_sync_in_progress:0
    slave_repl_offset:520
    slave_priority:100
    slave_read_only:1
    connected_slaves:0
    master_replid:98964946bd40954a2edc52c72df20ad69ebfac9b
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:520
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:1
    repl_backlog_histlen:520
    

完成后可以通过在master写数据,slave读数据进行简单的测试。

  • master

    127.0.0.1:6379> set key1  test 
    OK
    
  • slave

    127.0.0.1:6379> get key1
    "test"
    

2.命令

通过redis-cli 连接到从节点服务器,执行下面命令即可。

127.0.0.1:6379> SLAVEOF 192.168.0.101 6379

通过这个命令slave 与master 就建立了主从关系,也可以通过slaveof 命令取消主从关系。

127.0.0.1:6379> SLAVEOF no one
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值