Redis 的主从复制
一、概述
- 是什么:主机数据更新后根据配置和策略,自动同步到备用机的 master / slave 机制,master 以写为主,slave 以读为主
- 能干嘛?
(1) 读写分离
(2) 容灾恢复
二、使用步骤
- 配从(库)不配主(库)
- 从库配置
(1) 查看身份及连接从库信息命令slaveof 主库 IP 主库端口
(2) 只要从库使用 slaveof 命令,就立即主库中的所有都复制过来,之后 master 每添加 / 删除一条记录,从库就自动复制 / 删除一条记录info replication
(3) 从库只有读的操作,不可以执行写操作
(4) slave 每次关机或出故障,与 master 断开之后,都需要重新用 slaveof 连接,除非你配置进 redis.conf 文件内;但是 master 关机或出故障,slave 是原地待命,当 master 重启之后,还是原样 - 修改配置文件细节操作
(1) 拷贝多个 redis.conf 文件
(2) 开启 daemonize yes
(3) pid 文件名字
(4) 指定端口
(5) log 文件名字
(6) dump.rdb 名字 - 常用三招
(1) 一主二仆:即一个 master,两个 slave
(2) 薪火相传:
① 命令
② 上一个 slave 可以是下一个的 master,slave 同样可以接收其他 slaves 的连接和同步请求,那么该 slave 作为了链条中的下一个 master,可以有效减轻 master 的压力;但给 slave 的身份依然是 slaveslaveof 中间库IP 中间库端口
③ 中途变更转向会清除之前的数据,重新建立拷贝最新的数据
(3) 反客为主:
① 命令
② 使当前数据库停止与其他数据库的同步,转成主数据库slaveof no one
三、复制原理
- Slave 启动成功连接到 Master 后会发送一个 sync 命令
- Master 接到命令后启动后台的存盘进程,同时收集到所有接收到的用于修改数据集命令,在后台进程执行完毕之后,Master 将传送整个数据文件到 Slave,以完成一次完全同步
- 全量复制:Slave 服务在接收到数据库文件数据后,将其存盘并加载到内存中
- 增量复制:Master 继续将新的所有收集到的修改命令依次传给 Slave,完成同步
- 但是只要重新连接 Master,一次完全同步(全量复制)将被自动执行
四、哨兵模式(sentinel)
- 哨兵模式即反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库
- 使用步骤:
(1) 首先是一主二仆的情况:6379 带着 6380、6381
(2) 在目录 /myredis/ 下新增sentinel.conf
文件,名字不能错
(3) 配置哨兵,在sentinel.conf
文件中加入
(4) 启动哨兵sentinel monitor` 被监控数据库的名字(自己随便起) 127.0.0.1 6379 1 # 上述的最后一个数字 1 ,表示主机挂掉之后 Slave 投票看让谁接替成为主机,得票数多少后成为主机,即大于该数字成为主机
(5) 当 6379 挂了之后,就会投票从 6380 和 6381 中选出一个来成为 Master,而另一个则成为新 Master 的 Slave;当 6379 重新开启回来之后,会也将其变为新 Master 的 Slaveredis-sentinel /myredis/sentinel.conf
- 一组 sentinel 能同时监控多个 Master
五、复制的缺点
复制延时:由于所有的写操作都是先在 Master 上操作,然后同步更新到 Slave 上,所以从 Master 同步到 Slave 机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave 机器数量的增加也会使这个问题更加严重