redis复制
1.定义
就是主从复制,读写分离。以主表master写为主,副表slave读为主
当master数据变更时,会将数据同步到副表slaves中去
2.作用
1.读写分离
2.容灾恢复
3.数据备份
4.水平扩容支持高并发
3.基本操作指令
1.配置从库slave表去连接主库
2.如果主表配置由requirepass参数,则需要进行密码登录,届时slave表需要配置masterauth进行设置登录密码,否则master会拒接slave的连接
3. 基本操作指令
1).info replication:可以进行查询主从关系以及配置信息
2).replicaof 主库IP端口,在redis.conf中进行写入
3).slave 主库IP端口:每次进行与主数据库的断开,都需要进行重新连接,届时更改端口后,slave数据库会重新与新的数据库进行连接。
4).slave no one 使当前数据库停止进行与其他数据库的同步,转为主数据库
4.配置步骤
编辑redis.conf文件
1.开启daemonize yes
2.注释掉bind
3.关闭 protected-mode no
4.指定端口
5.指定当前的工作目录
6.更改pid文件名称
7.更改日志文件名称
8.添加密码
9.更改dump.rdb名称
10 添加aof
11.从机slaver访问主机maser配置,只从机配置
5.访问步骤 主 -> 从
主机按照往常启动
从机:需要指定端口,不指定则默认6379,但是咱已经更改了端口信息,会导致启动异常
redis-server /myredis/redis6381.conf
redis-cli -a admin -p 6381
如图则从机连接主机成功
info replication:可以查询当前主库下面的小弟信息
手动指令:命令仅当次有效
配置文件 :持久稳定
主从问题注意
- 从机不能写命令,即使是当前slave是下一个slave的master也不行,当前slave本质还是slave
- 从机写入方式是,首次是全部写入,后续跟随master写入
- 主机down掉了,从机还是不变,但是从机的数据还是可以正常使用
- 主机重新启动后,原来的主从关系还是存在的
6.slave下面加上slave
上一个slave是下一个slave的master,slave同样可以接受到其他slaves的连接和同步请求,那么该slave等于链条中下一个master,可以有效减少master的压力
但是,中途转向变更,会清除之前的数据,重新拷贝新的连接
变更方式:slaveof 新主机IP 新主机端口
7.redis复制小结
- slave启动,清空数据
slave成功启动后会想master发送一个syn命令。并且slave连接新的master后,本机原来的数据会被新的master给覆盖掉 - 首次进行连接,全量复制
master节点收到slave的syn命令后,会在后台进行保存快照(即rdb持久化),同时收集所有接收到的所有写操作的命令进行缓存,master在rbd持久化完成后,将快照文件和已经缓存完成的aof写操作文件同步加载到slave中去,从而实现复制 - 心跳持续,保持通讯
在redis.conf文件的reol-ping-replica-period 10 - 进入平稳
mater会将数据自动传给slave,进行完成同步 - 从机下线,重连续传
master会进行检查backlog里面的offset标记位,因为master和slave都会保存一个标记位置,master指挥将已经复制的offset后面的护具复制给slave。类似于断点续传
6. 缺点
多个slave时,会导致信号减弱,复制延时
当master挂断时,slave不会自动升级为master。