如今遇到高并发场景时,缓存技术应该算是性能优化的第一步,缓解数据库压力的同时还能提升访问效率,而Redis应该是绝大多数应用场景的首选。可是尽快Redis性能再优秀,在当今高并发场景下,一台服务器负责读写,机器的性能和内存的瓶颈确定避免不了,到这确定有小伙伴会想到集群, 对的,思路没错,只是在集群以前,主从复制模式的优化策略能解决不少问题,若是主从模式还抗不住高并发,那再来集群也不晚;这里先来讲说Redis的主从复制。node
为了更好的演示,搞了一台云服务器,Linux环境; 方便的同时,也能更符合实际应用场景;redis
主从复制:主从指有多台Redis服务器,其中一台为主服务器,其余为从服务器,能够经过命令或配置实现主从关系;复制指将主服务器的数据同步到从服务器,数据只能从主服务器向从服务器单向同步;其做用以下:数据库
好啦,老规矩,了解其做用以后,接下来就先实操再总结。缓存
每一台Redis服务器启动时,默认都是主服务器(Master),能够经过命令info replication
查看,以下图所示:安全
开始实操搭建一主二从的环境,以下:性能优化
1. 配置文件修改服务器
因为是在同一台机器上模拟,因此将redis配置文件拷贝三份出来,主要修改项以下:网络
2. 启动redis服务器架构
而后分别指定配置文件启动redis-server,在redis中bin目录下执行./redis-server redis.conf
、./redis-server redis6388.conf
、./redis-server redis6399.conf
命令便可,能够经过命令ps -ef | grep redis
查看启动redis效果,以下:并发
3.1 使用命令实现主从关系
默认状况下,启动的三台服务器默认都是主服务器,如今能够经过简单的命令实现一主二从的关系,这里以6379这台服务器为主,6388和6399两台服务器为从,配置主从关系只针对从节点服务器配置便可,以下:
分别连上6388和6399两台服务器,执行slaveof masterip masterport
便可:
从节点显示没问题,看看主节点状态信息,连上6379这台看看,以下:
主从关系维护好了,接下来看看数据复制,一般主节点负责写,将数据同步到从节点,从节点负责读; 如今三台服务器都没数据,接下来往主节点中写入点数据,看看是否能同步到从节点:
注:若是经过命令方式实现主从关系,那当从服务器重启时,主从关系就丢了,还得手动再执行命令,因此推荐配置文件的形式进行配置;
3.2 经过配置文件实现主从配置
仍是很简单的,主服务器不用动,仅修改从服务器配置文件,而后重启便可,根据前面章节的学习经验,打开配置文件,直接找到REPLICATION模块进行以下配置修改:
replicaof <masterip> <masterport>
:指定主节点ip和端口便可,如:replicaof 127.0.0.1 6379
;masterauth <master-password>
:指定主节点密码,若是主节点配置密码,直接经过这配置就行;修改完这两项,重启服务器便可,和命令行同样简单,只是经过配置文件搭建的主从关系不会由于关闭服务器而丢失;这里配置文件的演示就不截图了,只是实现方式不同,其余都是和命令行一致;
配从不配主,即只针对从服务器配置便可,主服务器无需配置;
一个主节点有多个从节点,从节点只能有一个主节点;从节点也能够做为其余从节点的主节点,以下:
这种方式的演示截图就不提供了,小伙伴实操一把,这里说明一下,虽然6388是6399的主节点,但扮演的角色仍是6379的从节点,只是它下面链接了其余从节点而已;
若是用命令方式实现主从,主服务器断开后,从新链接,主从关系还在;从服务器断开以后重连关系消失,须要手动执行命令从新指定主节点;
若是但愿断开重连主从关系还在,推荐配置文件方式实现;
实现主从复制的搭建是否是很简单,不论是命令仍是配置文件的方式,都很轻松实现;但小伙伴是否是也有疑问: 主从节点之间的数据是如何同步的?关于主从复制的其余参数有什么用?
经过上面实操,在主服务器中写入的数据,在无感知的状况下就同步到各个从服务器,中间到底经历了什么呢? 接下来简单的了解一下;
在Redis2.8以前同步方式都以全量方式同步,以后为了提升效率,数据复制方式分为两种,一种为全量复制,一种为部分复制:
为了方便查看日志分析,使用两台redis服务器进行搭建主从, 将以前搭建的关系去除,经过修改配置文件重启便可;
这里以6388做为主节点(Master),6399做为从节点(Slave),当链接6399执行命令slaveof 127.0.0.1 6388
配置主从关系时,主从节点分别打印日志以下:
上图是刚开始创建主从关系时,进行了全量复制,大概流程以下:
简要说明:
主从关系是经过网络进行通信,可能出现网络中断或网络抖动状况,致使短期的数据不能及时同步到从节点上,理想状况下,当链接恢复的时候,但愿只同步中断期间的数据,从而提升同步效率,流程大概以下:
简要说明:
这里就不模拟演示部分复制流程了,留给小伙伴操做。演示流程以下:已经搭建主从关系的两台机器,手动模拟网络断开,断开期间在主服务器写入数据,一会以后恢复网络,查看主从服务器日志打印状况;
以上演示在配置文件中只是配置了部分参数,还有其余参数的配置能够轻松实现功能,这里结合主从复制的内容能够回顾一下相关配置参数的意义,以下:
主从复制缓解了单节点性能和存储的瓶颈,那又带来什么问题呢?
slaveof no one
命令重写回到主服务器角色,而后从新配置主从关系;主从复制演练看似简单,但还须要不断在实践中获取经验,搭配相关配置参数,从而使得更加适合应用场景;配置没有固定都同样,而是应用场景是否适合。随着主节点宕机不能自动选举的问题,下次在此基础上说说哨兵模式,让自动选举不是问题;
一个被程序搞丑的帅小伙,关注"Code综艺圈",跟我一块儿学~~~