主从复制
主从复制介绍
分析单个Redis 的问题
在一个项目中读的操作是比写的操作要多的 像京东,淘宝等等同一时刻看的人是远远多于买的人的所有单个redis既要承担写的操作又要承担读的操作效率低在高并发的情况下不稳定
所以引出了主从复制
一图胜千言
Redis 主从复制的示意图
对上图的解读
搭建一主多从
需求说明
思路分析
开始执行
创建命令是 mkdir /wyxredis
到创建的目录下 cd /wyxredis
然后把redis.conf复制到我们刚刚创建的目录
cp /etc/redis.conf /wyxredis/redis.conf
include /wyxredis/redis.conf
pidfile /var/run/redis_6379.pid
port 6379
dbfilename dump6379.rdb
注意前面3个文件都是这样的操作 只是端口号要发生改变
启动三台redis 服务器
连接到3 个Redis 服务, info replication 打印主从复制的相关信息, 如图, 这时三台Redis都是Master
connected_slaves代表的是有几个从服务器
-指令说明: slaveof
解释上图
role:slave代表的是从服务器 Master带表的主服务器
master_host 指的是主服务器的ip
master_port 指的是主服务器的端口
master_link_status_up代表是主服务器是否在线
其它的其实就是根据英语单词来解释的还是很好理解的
主从复制-原理
原理示意图
解读上图-主从复制流程
- Slave 启动成功连接到master 后会发送一个sync 命令
- Master 接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后, master 将传送整个数据文件到slave,以完成一次完全同步
- slave 服务在接收到数据库文件数据后,将其存盘并加载到内存中, 即全量复制
- Master 数据变化了, 会将新的收集到的修改命令依次传给slave, 完成同步, 即增量复制
- 但是只要是重新连接master,一次完全同步(全量复制)将被自动执行
一主二仆
如果从服务器down 了, 重新启动, 仍然可以获取Master 的最新数据
如果主服务器down 了, 从服务器并不会抢占为主服务器, 当主服务器恢复后, 从服务器仍然指向原来的主服务器.
薪火相传
示意图
解读上图
上一个Slave 可以是下一个slave 的Master,Slave 同样可以接收其他slaves 的连接和同步请求,那么该slave 作为了链条中下一个的master, 可以有效减轻master 的写压力,去中心化降低风险
用slaveof
风险是一旦某个slave 宕机,后面的slave 都没法同步
主机挂了,从机还是从机,无法写数据了
实验
反客为主
1、在薪火相传的结构下, 当一个master 宕机后, 指向Master 的slave 可以升为master, 其后面的slave 不用做任何修改
2、用slaveof no one 将从机变为主机(说明: 后面可以使用哨兵模式, 自动完成切换.)
实验
哨兵模式(sentinel)
工作示意图
2、哨兵模式(如图): 反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库
实验
sentinel monitor redis_master 127.0.0.1 6379 1
说明:
- redis_master 为监控对象起的服务器名称
- 1 表示至少有多少个哨兵同意迁移的数量, 这里我配置1 表示只要有1 个哨兵同意迁移就可以切换
启动哨兵, 注意看哨兵的端口是26379
当主机挂掉,从机选举中产生新的主机
如果原来的主机重启, 会自动成为从机
注意事项和细节
1、在哨兵模式下,主机down 后的执行流程分析
2、解读上图- 哨兵如何在从机中, 推选新的Master 主机, 选择的条件依次为: