概述
主从复制读写分离,info replicaiton查看信息,Master以写为主,
slave以读为主,主要是读写分离和容灾恢复,注意一般配从不配主。
- 1.从库配置slaveof主库IP 主库端口
- 2.每次与master断开之后,都需要重新连接,除非你配置进redis.conf文件
- 3.一般一主2从
一主二从
1.拷贝多个redis.conf文件
redis6379.conf
redis6380.conf
redis6381.conf2.修改各个文件的配置:
开启daemonize yes
修改pid文件名
指定port
修改log文件名
修改dump.rdb文件名3.配置启动
进入6380 6381
redis-server /myredis/redis6380.conf
redis-cli –p 6380
slaveof 127.0.0.1 6379
即可开启主从复制4.获取主从表信息
info replication
问题
- 1.当配置主从复制后,slaveof,主表之前的数据从表能获得吗?能!
- 2.在进行主从复制时,从表会清空,然后复制主表
- 3.从表不能进行修改set
- 4.从表shutdown之后,重新登录需要重新进行主从复制,否则该从表就不再是从表
- 5.主表shutdown之后,从表会原地等待,主表重新连回之后,依然是主从关系
薪火相传
火车结构,从表连从表,上一个是下一个的主表。
- 1.1个主表多个从表,从表都从主表拿数据,主表压力很大。
- 2.去中心化:减轻master的负担
- 3.上一个是下一个的主表,像链表一样相连。但是传递有失真延时
反客为主
- 当第一个主表宕机可以使用slaveof no one使当前的数据库停止与主表同步,转成主数据库
薪火相传后面的库不用变
一主一从就需要改变别的从库跟随新的主库
哨兵模式(sentinel)最重要
反客为主的自动版(反客为主需要手动修改slave)
能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库。
步骤
1.调整结构为一主二从
2.自定义/myredis目录下新建sentinel.conf文件,名字绝对不能错
3.配置哨兵sentinel填写内容
1
2
3
4sentinel monitor被监控数据库名字(自己起名字)127.0.0.1 6379 1
上面最后一个数字1,表示主机挂了后slave投票看让谁接替成为主机,得票多少后成为主机
vim sentinel.conf
sentinel monitor host6379 127.0.0.1 6379 14.启动哨兵
redis-sentinel /myredis/sentinel.conf5.检测哨兵
- 1.挂掉6379 shutdown exit
- 2.检查6380 6381和哨兵info replicaiton
- 3.投票选举这时候在6380 6381中选出了一个master
- 4.重启6379,发现6379被哨兵检测到后变成小弟slave
5.一组sentinel可以监控多个master
6.开启多个sentinel可以发现自动会形成一个sentinel组合
复制原理
- 1.从节点(slave)内部通过每秒运行的定时任务维护复制相关逻辑,
当定时任务发现存在新的主节点后,会尝试与该节点建立网络连接 - 2.发送 ping 命令,连接建立成功后从节点发送 ping 请求进行首次通信
- 3.slave发送一个sync命令,并建立一个 socket 套接字,从节点建立了一个端口为51234的套接字,
专门用于接受主节点发送的复制命令 - 5.master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后
- 6.master将传送整个文件到slave,以完成一次完全同步
- 7.master继续将新的所有收集到的修改命令依次传给slave
全量复制
slave服务在接收到数据库文件数据后,将其存盘并加载到内存中增量复制
master继续将新的所有收集到的修改命令依次传给slave,完成同步但是只要是重新连接master,一次完全同步(全量复制)将被自动执行。
主从复制的缺点
由于所有的写操作都是先在Master上操作,然后同步更新到slave,所以master同步到slave机器有一定的延时,
当系统很繁忙的时候,延迟问题会更加严重,slave机器数量的增加也会使得这个问题更加严重。