Redis主从配置
前言
Redis有三种类型模式:
主从模式(redis2.8版本之前的模式)、哨兵sentinel模式(redis2.8及之后的模式)、redis cluster模式(redis3.0版本之后)
一、主从模式优缺点?
为什么要读写分离:
读写分离使用于大量读请求的情况,通过多个slave分摊了读的压力,从而增加了读的性能。
过多的select会阻塞住数据库,使你增删改不能执行,而且到并发量过大时,数据库会拒绝服务。
因而通过读写分离,从而增加性能,避免拒绝服务的发生。
我认为需要读写分离的应用场景是:写请求在可接受范围内,但读请求要远大于写请求的场景。
优点:
1、解决数据备份问题
2、做到读写分离,提高服务器性能
缺点:
1、每个客户端连接redis实例的时候都是指定了ip和端口号的,如果所连接的redis实例因为故障下线了,而主从模式也没有提供一定的手段通知客户端另外可连接的客户端地址,因而需要手动更改客户端配置重新连接
2、主从模式下,如果主节点由于故障下线了,那么从节点因为没有主节点而同步中断,因而需要人工进行故障转移工作
3、无法实现动态扩容
注意:master可以读写,slave默认则只能进行读取操作,因为当数据卸载从服务器上时会在主服务器进行同步的时候被删除。
了解了主从的优缺点后,其实就得出在业务系统不断扩张的情况下利是小于弊,所以推荐使用:哨兵sentinel模式(redis2.8及之后的模式)、redis cluster模式(redis3.0版本之后)这两种,但是这两种的基础还是主从所以尝试一下主从也对后续三种模式的理解有一定帮助。
二、搭建步骤
下载安装好redis,我们就在一台机器上通过6378(slave)、6379(master)、6380(slave)3个不同的端口来模拟一主两从的配置,在不同的服务器上道理是一样的。
将master的redis下的redis.windows-service.conf
复制两份到slave文件夹下
这里展示的是6378的操作,6380一样的操作,配置好以后我们修改6379(master)中的配置文件,主要修改如下
1. 为了安全设置redis登录密码将#requirepass
改为requirepass yourPassword
2.现在修改6378(slave)以及6380(slave)配置文件,这里只展示redis.windows-service6378.conf
的配置修改,6380同理。
- 修改port端口为
6378
- 修改
logfile "server6378_log.txt"
- 修改
dir D:\Redis-x64-3.2.100-ms\redis.windows-service6378
,这里是一个目录,只需要指定为一个目录即可,每个slave的dir不能改到同一个文件目录下,不然会出现多个slave进行同步master数据时写入报错
[13168] 05 Feb 16:25:25.697 # Error moving temp append only file on the final destination: Input/output error [13168] 05 Feb 16:25:25.699 # rewriteAppendOnlyFile failed in qfork: Input/output error [14268] 05 Feb 16:25:25.757 # fork operation complete [14268] 05 Feb 16:25:25.758 # Background AOF rewrite terminated with error [14268] 05 Feb 16:25:25.864 * Background append only file rewriting started by pid 13776 [14268] 05 Feb 16:25:26.065 * AOF rewrite child asks to stop sending diffs.
- 修改
slaveof yourMasterIP yourMasterPort
- 修改
masterauth yourMasterPassword
,这个是取决于你master是否设置登录密码来的,我们这里是设置了master的密码的哦。 - 修改
appendonly yes
开启aof持久化机制,我们这里是rdb和aof持久化机制是一起开启的所以会出现上图中的.rdb
,.aof
文件。
到此配置就完成了。
三、启动看效果
-
打开
cmd
命令行cd到D:\Redis-x64-3.2.100
运行redis-server.exe D:\Redis-x64-3.2.100\redis.windows-service.conf
这样我们就将master启动起来。 -
打开
cmd
命令行cd到D:\Redis-x64-3.2.100
运行redis-server.exe D:\Redis-x64-3.2.100-ms\redis.windows-service6378\redis.windows-service6378.conf
这样我们就将slave6378启动起来。 -
打开
cmd
命令行cd到D:\Redis-x64-3.2.100
运行redis-server.exe D:\Redis-x64-3.2.100-ms\redis.windows-service6380\redis.windows-service6380.conf
这样我们就将slave6380启动起来。
我们在master客户端输入info
命令可以看到已经是角色是master,有两个连接的slave,端口分别是6380,6379
-
打开
cmd
命令行cd到D:\Redis-x64-3.2.100
运行redis-cli.exe -h yourMasterIP -p yourSlavePort
这样我们就打开了slave客户端,记得设置的输入密码auth yourPassword
。
在每个slave客户端同样输入info
我们可以看到角色是slave,master的信息
- 这时我们向master里写数据
set test 123
,我们就能在两个slave客户端里面用get test
就能看到数据已经同步过去了。 - 当我们在slave中使用
set test1 1234
进行写数据时,会出现报错
总结
到此就实现了主从读写功能。