前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis主从同步

Redis主从同步

作者头像
秃头哥编程
发布2019-06-17 15:25:18
1.8K2
发布2019-06-17 15:25:18
举报
文章被收录于专栏:秃头哥编程

Redis的性能很好,但在某些情况下还是不能满足我们的需求,比如过多的用户进入主页,导致Redis被频繁访问,此时就存在大量的读操作。在一些秒杀场景中,一瞬间有成千上万的读请求到达Redis服务器,显然单靠一台Redis服务器是不够的。一些服务网站对安全性有较高的要求,当主服务器不能工作的时候,需要从服务器代替原来的主服务器,作为灾备,以保证系统可以正常运行。因此更多的时候我们希望读写分离,读写分离的前提是读操作远远比写操作频繁的多,如果把数据存放在多台服务器上那么就可以从多台服务器上读取数据,从而消除了单台服务器的压力,读写分离的技术已经广泛用于数据库中。

一、主从同步的概念

互联网系统一般是以主从架构为基础的,所谓主从架构的大致思路是:

  • 在多台数据服务器中,只有一台主服务器,而主服务器只负责写入数据,不负责让外部程序读取数据。
  • 存在多台从服务器,从服务器不写入数据,只负责同步主服务器的数据,并让外部程序读取数据。
  • 主服务器在写入数据后,立刻将写入数据的命令发送给从服务器,从而使得主从数据同步。
  • 应用程序可以随机读取某一台从服务器的数据,这样就分摊了读数据的压力。
  • 当某台从服务器不能工作的时候,整个系统将不受影响,当主服务器不能工作的时候,可以方便地从从服务器中选取一台来当主服务器。

二、Redis主从同步配置

对Redis进行主从同步的配置分为主机和从机,主机是一台,而从机可以是多台。

首先,明确主机。当你能确定哪台机子是主机的时候,关键的两个配置是dir和dbfilename选项,dir的默认值是“./”,而dbfilename的默认值是“dump.rdb”。也就是说Redis默认采用当前目录的dump.rdb文件进行同步。

其次,在明确了从机之后,进行进一步的配置所要关注的只有slaveof这个配置选项。它的配置格式如下

代码语言:javascript
复制
slaveof server port

其中,server代表主机,port代表端口。当从机Redis服务重启时,就会同步对应主机的数据。当不想让从机继续复制主机的数据时,可以在从机的的Redis命令客户端发送slaveof no one命令,这样从机就不会再接收主机服务器的数据更新了。又或者原来主服务器无法工作,而你需要复制新的主机,这时执行slaveof server port就能让从机复制另外一台主机的数据了。

在实际的Linux环境中,配置文件redis.conf中还有一个bind配置,默认为127.0.0.1,也就是只允许本机访问,把它修改为0.0.0.0,其他服务器就能访问了。

三、Redis主从同步的过程

下面是文字描述: (1)无论何时都要先保证主服务器的开启,开启主服务器后,从服务器通过命令或者重启配置项就能同步到主服务器。 (2)当从服务器启动时,会根据配置决定是否使用当前数据响应客户端,然后发送SYNC命令。当主服务器接收到同步命令后,就使用bgsave命令备份数据,但并不会拒绝客户端的写,而是把客户端的写命令缓存在缓冲区,从服务器在没收到主服务器的快照文件前, 根据配置决定使用现有数据响应客户端或者拒绝。 (bgsave命令是一个异步命令,也就是系统将启动另一个进程,把Redis的数据保存到对应的数据文件中。它和save命令最大的不同是不会阻塞客户端的写入。默认情况下,如果Redis执行bgsave命令失败,Redis将停止接受写操作,这样能让用户知道数据不能正确持久化到磁盘。) (3)bgsave命令被主服务器执行完后,开始向从服务器发送备份文件,这个时候从服务器会丢弃所有现有命令,开始载入发送的快照文件。 (4)当主服务器发送完备份文件后,从服务器就会执行这些写入命令,此时就会把bgsave执行之后的缓冲区内的写命令发送给从服务器,从服务器完成备份文件解析,就开始正常接收命令。 (5)缓存区的命令发送完毕后,主服务器每执行一条写命令,就向从服务器发送该条写命令,保证主从同步。

只是在主服务器同步到从服务器的过程中,需要备份文件,所以在配置的时候,一般需要预留一些内存空间给主服务器,用以腾出空间执行备份命令。

还有可能出现多个从服务器同时向主服务器发送SYNC命令

如果出现多台同步,可能会出现频繁等待和频繁操作bgsave命令的情况,导致主机在较长时间性能不佳,这个时候可以考虑主从链进行同步的机制,以减少这种可能。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 秃头哥编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、主从同步的概念
  • 二、Redis主从同步配置
  • 三、Redis主从同步的过程
相关产品与服务
云数据库 Redis®
腾讯云数据库 Redis®(TencentDB for Redis®)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档