redis主从复制
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了redis主从复制,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4614字,纯文字阅读大概需要7分钟。
内容图文
![redis主从复制](/upload/InfoBanner/zyjiaocheng/918/3db80aaf4c1044ffb4fa886690d19a88.jpg)
Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。为了分担读压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构,Redis主从复制可以根据是否是全量分为全量同步和增量同步。
如上图所示,我们可以将一台redis服务器作为主库,多台其他的服务器作为从库,主库只负责写数据,从库负责读数据,当主库数据更新时,会同步到它所有的从库。这就实现了主从复制,读写分离。既可以解决服务器负载过大的问题,又能够在一台服务器发生故障时及时使用其他服务器恢复数据。
下面演示一下redis中的主从复制,首先我们创建三份配置文件,分别对应端口号6379,6380,6381开启三个redis服务:
可以看到目前下面3台服务的角色(role)是master,也就是目前没有主从关系。
由于我们现在没有配置主从库,所以可以通过命令info replication看到,三台服务器都分别是独立的主库。现在我们将端口号6379配置为主库(master),将端口号6380和6381配置为6379的从库,配置方法为在从库中执行命令:SLAVEOF 主库IP地址 主库端口号
执行完SLAVEOF 命令以后我们再使用INFO REPLICATION 查看当前3台服务的关系,可以看到79服务为master ,其他两台为slave,说明主从关系建立完成,这里有个注意的点,就是在两台从机的配置文件里需要配置 masterauth password 主机密码,不然在建立主从关系的时候会提示认证失败。
可以看到一开始3台服务的库里都是空的,在主机上set 值以后,可以直接在从机上get,可以看到下图,当在从机上set值的时候会报错,这是为什么呢?
默认情况下,从库只能读取数据,执行写操作会报错:可以修改配置文件中的以下参数来配置从机是只读还是可写,这里推荐设置成yes 只读。
1 全量同步 Redis全量复制一般发生在Slave初始化阶段,这时Slave需要将Master上的所有数据都复制一份。具体步骤如下:? 1)从服务器连接主服务器,发送SYNC命令;? 2)主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令;? 3)主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令;? 4)从服务器收到快照文件后丢弃所有旧数据,载入收到的快照;? 5)主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令;? 6)从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令;? 2 增量同步 Redis增量复制是指Slave初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程。增量复制的过程主要是主服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令。 3 Redis主从同步策略 主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。当然,如果有需要,slave 在任何时候都可以发起全量同步。redis 策略是,无论如何,首先会尝试进行增量同步,如不功,要求从机进行全量同步。 ?slave-read-only yes
将从库升级为独立的主库:
SLAVEOF NO ONE
如果主库宕机,从库会“原地待命”,待主库重新连接之后,会恢复和主库的联系:
当主机重新启动,他依然会回到自己原先的角色,而自己的从机也依然在苦苦等待他回来,一旦发现他回来了,从机依然会在他手下效劳,但是,如果从库宕机,连接会断开,当从库重新连接后,需要重新建立与主库的连接: 如下图:
一个库可以是一个库的从库,同时也可以是另一个库的主库,这样可以有效减轻master的压力,避免所有的从库都从一个主库中读取数据:
哨兵模式:
哨兵模式是通过后台监控主库是否故障,当主库发生故障时,将根据投票数自动将某一从库转换为主库。
下面演示启动哨兵模式的步骤:
首先创建文件sentinel.conf,目录自行选择,我选择在redis配置文件同目录下创建,并写入以下配置:
sentinel monitor host6379 127.0.0.1 6379 1 sentinel auth-pass host6379 password daemonize yes logfile "/var/log/sentinel_log.log"
从上至下意思是,对哪个redis服务启动哨兵监控,设置被监控服务的密码,允许后台运行,日志配置地址
然后通过 /usr/local/redis/bin/redis-sentinel /usr/local/redis/etc/sentinel.conf 启动哨兵会出现以下信息:
此刻说明哨兵已经启动,接下去我让主机 6379 宕机,来演示主机宕机以后从机的反客为主。
可以看到当主机宕机后,经过哨兵监控,发现主机宕机,会根据事先的配置稳健里规则去选举新的master。这里选出来的是6380,如下图:
主库master和从库slave的复制分为全量复制和增量复制:
全量复制:全量复制一般发生在slave初始化阶段,此时slave需要将master上的所有数据都复制一份,具体步骤如下:
1. 从库连接到主库,并发送一条SYNC命令;
2. 主库接收到SYNC命令后,开始执行BGSAVE命令生成RDB快照文件,并使用缓冲区记录此后执行的所有写命令;
3. 主库执行完BGSAVE之后,将快照文件发送到所有从库,在此期间,仍继续将所有写命令记录到缓冲区;
4. 从库在接收到快照文件后,丢弃所有旧数据,载入快照文件中的新数据;
5. 主库继续向从库发送缓冲区中的写命令;
6. 从库将快照文件中的数据载入完毕后,继续接收主库发送的缓冲区中的写命令,并执行这些写命令以更新数据。
完成上面的步骤之后,从库可以开始接收来自用户的读数据请求。 增量复制:增量复制是指,在slave初始化完成后的工作阶段,主库将新发生的写命令同步到从库的过程。主库每执行一条写命令,都会向从库发送相同的写命令,从库会执行这些写命令。
总结:主库和从库初次建立连接时,进行全量复制;全量复制结束后,进行增量复制。但是当增量复制不成功时,需要发起全量复制。
内容总结
以上是互联网集市为您收集整理的redis主从复制全部内容,希望文章能够帮你解决redis主从复制所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。