一.主从复制简介
1.互联网“三高”架构
- 高并发
- 高性能
- 高可用
面对大量的用户的同时使用,你的服务器撑得住吗?
2.你的“Redis”是否高可用
单机redis的风险与问题
- 问题1.机器故障
- 现象:硬盘故障、系统崩溃
- 本质:数据丢失,很可能对业务造成灾难性打击
- 结论:基本上会放弃使用redis.
- 问题2.容量瓶颈
- 现象:内存不足,从16G升级到64G,从64G升级到128G,无限升级内存
- 本质:穷,硬件条件跟不上
- 结论:放弃使用redis
- 结论:
为了避免单点Redis服务器故障,准备多台服务器,互相连通。将数据复制多个副本保存在不同的服
务器上,连接在一起,并保证数据是同步的。即使有其中一台服务器宕机,其他服务器依然可以继续
提供服务,实现Redis的高可用,同时实现数据冗余备份。
3.多台服务器连接方案
- 提供数据方:master
主服务器,主节点,主库
主客户端 - 接收数据方:slave
从服务器,从节点,从库
从客户端 - 需要解决的问题:
数据同步 - 核心工作:
master的数据复制到slave中
4.主从复制
主从复制即将master中的数据即时、有效的复制到slave中
特征:一个master可以拥有多个slave,一个slave只对应一个master
职责:
- master:
- 写数据
- 执行写操作时,将出现变化的数据自动同步到slave
- 读数据(可忽略)
- slave:
- 读数据
- 写数据(禁止)
示意图
5.主从复制的作用
- 读写分离:master写、slave读,提高服务器的读写负载能力
- 负载均衡:基于主从结构,配合读写分离,由slave分担master负载,并根据需求的变化,改变slave的数
量,通过多个从节点分担数据读取负载,大大提高Redis服务器并发量与数据吞吐量 - 故障恢复:当master出现问题时,由slave提供服务,实现快速的故障恢复
- 数据冗余:实现数据热备份,是持久化之外的一种数据冗余方式
- 高可用基石:基于主从复制,构建哨兵模式与集群,实现Redis的高可用方案
二.主从复制工作流程
1.总述
- 主从复制过程大体可以分为三个阶段
- 建立连接阶段(即准备阶段)
- 数据同步阶段
- 命令传输阶段
示意图
2.阶段一:建立连接阶段
- 建立slave到master的连接,使master能够识别到slave,并保存slave端口号
3.建立连接阶段工作流程
4.主从连接(slave连接master)
- 方式一:客户端发送命令(接下来有例子)
slaveof <masterip> <masterport>
- 方式二:启动服务器参数
redis-server -slaveof <masterip> <masterport>
- 方式三:服务器配置(常用,接下来有例子)
slaveof <masterip> <masterport>
5.主从断开连接(slave断开连接master)
- 客户端发送命令
slaveof no one
- 说明:
slave断开连接后,不会删除已有数据,只是不再接受master发送的数据
6.授权访问
- master客户端发送命令设置密码
requirepass <password>
- master配置文件设置密码
config set requirepass <password>
config get requirepass
- slave客户端发送命令设置密码
auth <password>
- slave配置文件设置密码
masterauth <password>
- slave启动服务器设置密码
redis-server –a <password>
主从访问方式1例子-------------客户端发送命令
-
首先创建一个文件夹名为redis主从复制,并在这个文件夹下复制几个redis的压缩包并解压,分别命名如下图
-
分别对这四个文件夹下的redis.windows.conf修改端口号为 6379、6380、6381和6382,**(这里埋了个坑,后面会填坑)**并为他们设置密码为123456
设置端口的方式是打开redis.windows.conf文件,找到port后面修改
修改密码示意图
-
分别在这四个包下创建一个startRedis.bat方便快速打开服务,里面的内容如下
title redis-6381
redis-server redis.windows.conf
直接用记事本创建就行,然后修改尾缀名 title是标题,方便查看端口,分别是6379、6380、6381和6382。
- 分别双击这四个startRedis.bat文件
- 首先为6380创建主从连接
- 打开6380的客户端(在6380的文件夹目录下运行cmd端口输入
redis-cli -h 127.0.0.1 -p 6380 -a 123456
)
解释下 -h 就是host主机地址 -p 就是port端口号 -a 就是auth password认证 - 然后执行连接命令
127.0.0.1:6380> slaveof 127.0.0.1 6379
OK
但是发现6380的服务端一直报错,因为6379主机有密码,需要认证,那么如何认证呢?(填坑了)
-
关闭这四个服务端的服务
-
分别打开6380、6381和6382的redis.windows.conf文件,随便在那个位置加上
masterauth 123456 #指定主机的密码
(我加在port后面了)如图
-
然后打开这四个服务端
-
再次打开6380客户端
-
执行连接指令
127.0.0.1:6380> slaveof 127.0.0.1 6379
OK
- 打开6379和6380的服务端,可以看到有提示连接成功的信息
- 同样的操作对6381和6382进行执行,如果还有更多的从机就继续!
主从访问方式2例子-------------配置文件配置
- 在刚才配置认证信息的下面加上
slaveof 127.0.0.1 6379
如图
- 分别为从机配置(6380、6381和6382)
这样开启之后就不用发送命令配置为从机了,直接启动服务端就行了!!!
7.阶段二:数据同步阶段工作流程
详细见ppt ppt
8.阶段三:命令传播阶段
详细见ppt ppt
3.主从复制常见问题
详细见ppt ppt