本博客属作者原创,未经允许禁止转载,请尊重原创!如有问题请联系QQ509961766
redis作为一种高效的缓存框架,使用是非常广泛的,在数据存储上,在运行时其将数据存储在内存中,以实现数据的高效读写,并且根据定制的持久化规则不同,其会不定期的将数据持久化到硬盘中。另外相较于其他的NoSql数据库,redis提供了非常丰富的数据结构,如dict,sds,linkedlist,ziplist,set,quicklist,geometry。在这些存储结构的基础上,redis为用户提供了非常丰富的操作选择,如通过zskiplist来达到对某种类型的数据的排序目的,而排序在数据库中是一个非常耗时的操作。
(一)准备工作
Redis windows 64位下载地址
选择安装版或者压缩版下载都可以。
准备2台windows 服务器,我这里是windows server 2012
主服务:192.168.1.246:6379 (master)
备服务:192.168.1.90:6379(slave)
(二)主从同步配置
首先修改主服务master的redis.windows.conf,一共修改3个地方
- 去掉ip绑定,也可以注释掉,这样所有的局域网内的ip都可以连接
- 关闭保护模式
- 设置主/备切换时redis密码(为了方便主从密码都设置一样的)
- 设置redis密码(为了方便主从密码都设置一样的)
然后修改从服务slave的redis.windows.conf,一共修改3个地方
设置从属ip:slaveof 192.168.1.246 6379
设置主服务连接密码:masterauth test@2017
设置备服务密码requirepass test@2017
(三)启动服务
先启动主服务,cd 进入redis安装目录,输入启动命令redis-server.exe redis.windows.conf
如下图说明启动成功,打印了从服务ip等信息
然后启动备服务,cd 进入redis安装目录,输入启动命令redis-server.exe redis.windows.conf
如下图说明启动成功,打印了主服务ip等信息
(四)测试主从同步
在主服务器上进入redis安装目录运行redis-cli.exe客户端程序
- 先登录输入命令:auth test@2017
- 然后设置key=hello,value=world的键值
- 最后查看设置成功
然后在备服务器上进入redis安装目录运行redis-cli.exe客户端程序,同上
- 先登录输入命令:auth test@2017
- 然后查看是否有key=hello这个键值,打印出来world说明同步成功
(四)主从同步过程
1、Slave服务启动,主动连接Master,并发送SYNC命令,请求初始化同步
2、Master收到SYNC后,执行BGSAVE命令生成RDB文件,并缓存该时间段内的写命令
3、Master完成RDB文件后,将其发送给所有Slave服务器
4、Slave服务器接收到RDB文件后,删除内存中旧的缓存数据,并装载RDB文件
5、Master在发送完RDB后,即刻向所有Slave服务器发送缓存中的写命令
6、全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。(第一次全量)
7、增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步。(之后增量)
8、但是只要是重新连接master,一次完全同步(全量复制)将被自动执行。
(五)主从同步特点
数据冗余
主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
读写分离
主机会自动将数据同步到从机,可以进行读写分离,提升性能。
故障恢复
当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复,但实际上是一种服务的冗余。
负载均衡
在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
IO剧增
每次slave断开以后(无论是主动断开,还是网路故障)再连接master都要将master全部dump出来rdb,在aof,即同步的过程都要重新执行一遍;所以要记住多台slave不要一下都启动起来,否则master可能IO剧增(间隔1-2分)
复制延迟
由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。
可用性不高
当有主节点发生异常情况,就会导致不能写入,导致业务出错!解决方法是可以使用Redis-Sentinel哨兵模式,详情见系列文章第二篇。