Redis主从复制

一、是什么

1.单机有什么问题:

单机故障

容量瓶颈

qps瓶颈

主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,mester已写为主,slaver已读为主

2.能干嘛

  • 1.读写分离

  • 2.容灾备份

3.怎么玩

玩法原则:

1.配从不配主

2.使用命令 SLAVEOF 动态指定主从关系 ,如果设置了密码,关联后使用 config set masterauth 密码

3.配置文件和命令混合使用时,如果混合使用,动态指定了主从,请注意一定要修改对应的配置文件

  • 1.新建redis8000,redis8001,redis8002文件夹
  • 2.将redis.conf文件复制在redis8000下
  • 3.分别修改个目录下的redis.conf文件

redis8000/redis.conf

  • 1.bind 192.168.0.104 指定本机ip

  • 2.port 8000

  • 3.daemonize yes

  • 4.pidfile /var/run/redis_8000.pid

  • 5.dir /myredis/redis8000

  • 6.requirepass 123456

4.把redis8000/redis.conf文件复制到redis8001,redis8002下

redis8001/redis.conf

  • 1.:%s/8000/8001/g 批量替换

  • 2.replicaof 192.168.0.104 8000

  • 3.masterauth 123456

redis8002/redis.conf

  • 2.replicaof 192.168.0.104 8000
  • 3.masterauth 123456

5.分别启动8000.8001,8002实例

  • [root@localhost myredis]# /usr/local/bin/redis-server /myredis/redis8000/redis.conf
  • [root@localhost myredis]# /usr/local/bin/redis-server /myredis/redis8001/redis.conf
  • [root@localhost myredis]# /usr/local/bin/redis-server /myredis/redis8002/redis.conf

6.客户端连接

/usr/local/bin/redis-cli -h 192.168.0.104 -p 8000 -a 123456

/usr/local/bin/redis-cli -h 192.168.0.104 -p 8001 -a 123456

/usr/local/bin/redis-cli -h 192.168.0.104 -p 8002 -a 123456

工作流程

总体分为大三步:

一、建立连接

  • 1.设置master的地址和端口,发送slaveof ip port指令,master会返回响应客户端,根据响应信息保存master ip port信息 (连接测试)

  • 2.根据保存的信息创建连接master的socket

  • 3.周期性发送ping,master会响应pong

  • 4.发送指令 auth password(身份验证),master验证身份

  • 5.发送slave端口信息,master保存slave的端口号

二、数据同步

  • 1.slave发送指令 psyn2

  • 2.master 执行bgsave

  • 3.在第一个salve连接时,创建命令缓存区

  • 4.生成RDB文件,通过socket发送给slave

  • 5.slave接收RDB,清空数据,执行RDB文件恢复过程

  • 6.发送命令告知RDB恢复已经完成(告知全量复制完成)

  • 7.master发送复制缓冲区信息

  • 8.slave接收信息,执行重写后恢复数据

注意: master会保存slave从我这里拿走了多少数据,保存salve的偏移量

三、命令传播

slave心跳:replconf ack {offset} 汇报slave自己的offset,获取最新数据指令

命令传播阶段出现断网:

  • 网络闪断闪连 忽略
  • 短时间断网 增量
  • 长时间断网 全量

全量复制核心三个要素

  • 1.服务器运行id
    用于服务器之间通信验证身份,master首次连接slave时,会将自己的run_id发送给slave,slave保存此ID
  • 2.主服务器积压的命令缓冲区
    先进先出队列
  • 3.主从服务器的复制偏移量
    用于比对偏移量,然后判断出执行全量还是增量

全量复制消耗

  • 1.bgsave时间

  • 2.rdb文件网络传输

  • 3.从节点请求请求数据时间

  • 4.从节点加载rdb的时间

  • 5.可能的aof重写时间

5.缺点

1.由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。

2.当主机宕机之后,将不能进行写操作,需要手动将从机升级为主机,从机需要重新制定master

简单总结:

一个master可以有多个Slave

一个slave只能有一个master

数据流向是单向的,只能从主到从

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值