在上篇文章我们学习了Redis教程——管道,这篇文章学习Redis教程——主从复制。
主从复制
为了数据更加安全可靠,在实际的项目中,肯定是有多个Redis服务,主机Redis以写为主,从机Redis以读为主,当主机Redis数据变化时,自动将新的数据异步同步到其它从机Redis中,也就是主从复制,其原理如下:
主从复制优势:
-
实现了读写分离,更好地提高Redis的性能;
-
容灾恢复;
-
数据备份;
-
水平扩容支撑高并发;
为了方便演示,这里我们准备了三台服务器并安装了Redis,没服务器的可以使用VMware虚拟机,主从关系如下图所示:
注意:服务器之间必须相互ping通和必须放行Redis的端口,如下图所示:
这里Redis端口都是6379,大家可以根据需求,调整Redis的端口。
在开始之前,我们先初步配置Redis,redis.conf配置如下所示:
daemonize yes # 开启Redis
bind 127.0.0.1 # 注释该行
protected-mode no # 允许外界连接
requirepass 密码 # 为Redis设置密码
dir /myRedis # 指定当前工作目录
logfile "/myRedis/6379.log" # Redis日志
实现主从
主机Redis一般情况下都会设置登录密码,那么从机Redis需要配置masterauth来设置校验密码,否则主机Redis会拒绝从机Redis的访问请求。在实现主从之前,首先在从机Redis的redis.conf配置中添加如下:
masterauth "123456"
配置完成后,执行如下命令查看主从关系和配置信息,
info replication # 查看主从关系和配置信息
keys * # 查看Redis数据库的数据所有键
如下图所示:
可以看出现在还没任何主从关系,而且Redis数据库没任何数据。
接下来我们将使用命令行和配置的方式实现主从复制。
命令实现主从
使用slaveof命令实现主从,其配置语法格式如下:
slaveof 主机RedisIP 主机Redis端口
示例代码如下:
slaveof 47.119.21.164 6379
运行结果如下:
可以发现,当执行完命令后,47.119.21.164就变为了主机,175.178.108.75就变为了从机。
当主机Redis拥有读写操作权限,从机Redis只有读操作权限,如下图所示:
当某个Redis服务变为从机后,会立即复制主机Redis中的数据,如下图所示:
注意:使用命令行实现主从后,当从机Redis断开连接后,主从关系也会断开。如下图所示:
配置实现主从
使用replicaof配置从机Redis,其配置语法格式如下:
replicaof 主机RedisIP 主机Redis端口
示例代码如下:
replicaof 47.119.21.164 6379
如下图所示:
接下来我们依次启动主从Redis即可,当主机Redis执行写操作后,从机Redis立刻复制,如下图所示:
注意:
-
当从机Redis断开连接后,主机Redis执行了写操作,断开连接的从机Redis重新连接,从机Redis会立刻复制主机Redis的数据,实现数据同步;
-
当主机Redis关闭后,从机Redis不会变为主机;
关闭主从
使用slaveof no one命令使当前数据库停止与其他数据库的同步,实现从机Redis变为主机Redis。如下图所示:
注意:如果是配置实现主从的话,从机Redis重启后,又会重新建立主从关系。
好了,Redis教程——主从复制就讲到这里了,下篇文章我们学习Redis教程——哨兵监控。
公众号:白巧克力LIN
该公众号发布Python、数据库、Linux、Flask、Django、自动化测试、Git、算法、前端、服务器等相关文章!
- END -