博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redis 主从复制使用与配置
阅读量:2428 次
发布时间:2019-05-10

本文共 3231 字,大约阅读时间需要 10 分钟。

实验环境

操作系统: ubuntu-16.04-x64master: 192.168.0.101slave: 192.168.0.120redis版本: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 
# master ip 和端口masterauth
# 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 #套接字模式复制策略的等待时长,单位是秒。等待是想汇集更多的slaverepl-ping-slave-period 10 #slaves在预定的时间间隔内发送ping给server。可以通过repl_ping_slave_period选项设置。默认是10秒。可以理解为心跳。repl-timeout 60 #与repl_ping_slave_period配合使用确认超时。repl-disable-tcp-nodelay norepl-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.5slave-announce-port 1234

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

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

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

  • master

    # Replicationrole:masterconnected_slaves:1slave0:ip=192.168.0.120,port=6379,state=online,offset=450,lag=0master_replid:98964946bd40954a2edc52c72df20ad69ebfac9bmaster_replid2:0000000000000000000000000000000000000000master_repl_offset:450second_repl_offset:-1repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:1repl_backlog_histlen:450
  • slave

    # Replicationrole:slavemaster_host:192.168.0.101master_port:6379master_link_status:upmaster_last_io_seconds_ago:6master_sync_in_progress:0slave_repl_offset:520slave_priority:100slave_read_only:1connected_slaves:0master_replid:98964946bd40954a2edc52c72df20ad69ebfac9bmaster_replid2:0000000000000000000000000000000000000000master_repl_offset:520second_repl_offset:-1repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:1repl_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

转载地址:http://vgcmb.baihongyu.com/

你可能感兴趣的文章
不同的类加载器加载的类不是同一个类
查看>>
Java 序列化和反序列化
查看>>
怎么让笔记本变路由器,亲身试验可用,不用下第三方软件
查看>>
DB2 SQL Error: SQLCODE=-668, SQLSTATE=57016 解决方案
查看>>
java.util.ConcurrentModificationException
查看>>
linux 通过crt直接上传和下载文件和文件
查看>>
javabase64编码原理和解码,加密案例
查看>>
Java 位运算(移位、位与、或、异或、非) 以及负数的二进制相互计算
查看>>
MyBatis 二级缓存机制
查看>>
第一章,安装Vmware和Ubuntu
查看>>
jquery freemarker模板设置变量每次循环加1
查看>>
VMware虚拟机启动后出现黑屏,不能显示界面,无论安装的是ubuntu还是centos
查看>>
osi七层模型,什么是tcp/ip协议,tcp与http,UDP的区别,tcp三次握手过程和特点
查看>>
第二章,ubuntu系统的查看防火墙,切换root用户,设置固定ip、系统时间等
查看>>
hash原理总结
查看>>
mongodb的优缺点
查看>>
如何在cmd下,查找指定一个TXT文件的内容,把这个文本里包含关键字的所有行复制到一个新的文本中
查看>>
线程池和队列学习,队列在线程池中的使用,什么是队列阻塞,什么是有界队列
查看>>
复制集让mongodb的secondary支持读操作,因为存在读写延迟所以是否需要读写分离
查看>>
svn小乌龟怎么断开链接,怎么查看电脑中的隐藏文件,svn复制包或修改包名应注意什么
查看>>