首先了解主从复制简介
互联网三高架构:高并发,高性能,高可用。
单机redis的风险于问题:
问题一:机器故障
现象:硬盘故障,系统崩溃
本质:数据丢失,很可能对业务造成灾难性打击。
结论:基本会放弃使用redis.
问题二:容器瓶颈
现象:内存不足,从16G升级到64G,无线升级内存。
本质:穷,硬件条件跟不上
结论:放弃使用redis
结论:
为了避免单点Redis服务器故障,准备多台服务器,互相连通,将数据复制多个副本保存在不同的服务器上,连接在一起,并保证数据是同步的,即使有其中一台服务器宕机,去他服务器依然可以继续提供服务,实现Redis的高可用,同时实现数据冗余备份。
多台服务器连接方案:
提供数据方:master
主服务器,主节点,主库
主客户端
接收数据方:slave
从服务器,从节点,从库
从客户端
需要解决的问题:数据同步
核心工作:master的数据复制到slave中
主从复制:
主从复制即将Master中的数据即使,有效的复制到slave中
特征:一个master可以拥有多个slave,一个slave只对应一个master
职责:
master:
写数据,
执行写操作时,将出现变化的数据自动同步到slave
读数据(可忽略)
slave:
读数据
写数据(禁止)
主从复制的作用:
一:读写分离,master写,slave读,提高服务器的读写负载能力
二:负载均衡,基于主从结构,配合读写分离,由slave分担master负载,并根据需求的变化,改变slave的数量,
通过多个从节点分担数据读取负载,大大提高Redis服务器并发量与数据吞吐量。
三:故障恢复,当master出现问题时,由slave提供服务,实现快速的故障恢复,
四:数据冗余,实现数据热备份,是持久化之外的一种数据冗余方式
五:高可用,基于主从复制,构建哨兵模式与集群,实现Redis的高可用方案。
主从复制工作流程
主从复制过程大体可以分为三个阶段:
一:建立连接阶段(即准备阶段)
二:数据同步阶段
三:命令传播阶段
建立连接阶段工作流程:
步骤一:设置Master恩德地址和端口,保存master信息
步骤二:建立socket连接
步骤三:发送ping命令,
步骤四:身份验证
步骤五:发送slave端口信息
主从连接成功
状态:
slave:
保存master的地址和端口
master:
保存slave的端口
总体:之间创建了连接的socket
主从连接
方式一:客户端发送命令
slaveof <masterip> <masterport>
方式二:启动服务器参数
redis-server -slaveof <masterip> <masterport>
方式三:服务器配置
slaveof <masterip> <masterport>
主从断开连接
客户端发送命令 slaveof no one
授权访问:
master配置文件设置密码:
requirepass <password>
master客户端发送命令设置密码
config set requirepass <password>
config get requirepass
slave客户端发送命令设置密码
auth <password>
slave配置文件设置密码
masterauth <password>
启动客户端设置密码
redis-cli -a <password>
数据同步阶段工作流程
一:在slave初次连接master后,复制master中的所有数据到slave
二:将slave的数据库状态更新成Master当前的数据库状态
开始主从同步搭建:
第一步修改redis.conf文件改成redis-6379.conf配置文件
cat redis.conf | grep -v "#" | grep -v "^$" > redis-6379.conf
##第二步: 完成第一步会出现redis-6379.conf配置文件
第三步:创建conf文件夹
第四步: 创建data目录:
第五步:编辑redis-6379.conf 文件夹为如图:
第六步:移动redis-6379.conf到conf目录下并查看是否移动成功如图
第七步:复制redis-6379.conf文件为redis-6380.conf文件如下
第八步:修改redis-6380.conf文件
第九步:启动主库服务
第十步:启动从库服务:
连接主库redis
连接从库redis
测试主从同步,master库负责写数据,slave库负责读数据,
master库写数据后,在slave库可以查看到说明搭建成功