redis的主从复制中主以写为主,从以读为主
一,Redis主从复制的使用
-
配从(库)不配主(库)
- 从库配置命令:slaveof 主库IP 主库端口
- 每次与master断开之后,都需要重新连接,
- 除非在从机上到redis.fonf文件中配置
-
修改配置文件细节操作(主机中)
- 拷贝多个redis.conf文件 :cp redis.conf redis001.conf …
- 开启daemonize yes
- Pid 文件名:pidfile /var/run/redis001.pid
- 指定端口 :6380或者6382。。。
- log文件名:001.log
- Dump001.rdb名字
- 命令:info replication查看自己角色,从机个数,激活状态,连通状态等信息
-
主从数据一致性保证
min-slaves-to-write # 以及执行写操作所需的至少从服务器数量 min-slaves-max-lag # 用户可以通过配置, 指定网络延迟的最大值
- 这个特性的运作原理:
- 从服务器以每秒一次的频率 PING 主服务器一次, 并报告复制流的处理情况。
- 主服务器会记录各个从服务器最后一次向它发送 PING 的时间。
- 这个特性的运作原理:
二,主从复制的三种方式
-
一主一从或者一主二从
-
从机不管什么时候开始介入备份,都会从头开始保存数据
-
主从复制是读写分离的,从机不能进行写操作的
-
如果主机死了从机不会自动变成主机,主机重启服务数据会同步
-
如果从机死掉,配置文件没有指定slaveof,从机重启会变master,设置slaveof数据会从头开始备份
-
-
去中心化,一个传一个
- 解释:上一个从机可以是下一个从机的主机,从机同样可以接收其他从机的连接和同步请求,那么该从机作为了链条中下一个的主机,可以有效的减轻master的写压力
- 不如 79 为主机,80为79的从机,81为80的从机,如果79不宕机的情况下80为从机,会标注81是80的从机
- 中途发生变更转向:也就是重新建立了主从关系,会清除之前的数据,重新建立拷贝最新的
- slaveof新主库ip 新主机库端口号
- 解释:上一个从机可以是下一个从机的主机,从机同样可以接收其他从机的连接和同步请求,那么该从机作为了链条中下一个的主机,可以有效的减轻master的写压力
-
反客为主(主机挂掉,指定的从机为主机)
- slaveof no one 使当前数据库停止与其他数据库的同步,将当前从机变为主数据库
三,复制的原理
- slave启动成功连接到master后会发送一个sync命令
- master接到SYN命令启动后台的存盘进程,调用BGSAVE命令收集所有接收到的用于修改数据集命令**,创建一个 RDB 文件,并使用缓冲区记录接下来执行的所有写命令。在后台进程执行完毕后,master将传送整个RDB数据文件到slave,从服务器会接收并载入这个文件,已完成一次完全同步。(主服务器将缓冲区储存的所有写命令发送给从服务器执行)
- **全量复制:**slave服务在接收到数据库文件数据后,将其存盘并加载到内存中
- **增量复制:**master继续将新的所有收集到的修改命令依次传递给slave,完成同步
- 但是只要是重新连接master,一次完全同步(全量复制)将被自动执行
四,哨兵机制
-
什么是哨兵机制?
- 反客为主的自动版,能够在后台监控主机是否故障,如果故障了根据投票数目自动将从库转为主库
-
哨兵机制投票原理
-
使用步骤
-
调整主从结构:比如79为主机80,81为从机
-
在自定义的/myredis目录下tuoch新建sentinel.conf文件,(名字不能写错)
-
配置哨兵,填写内容
#sentinel monitor 被监控主数据库名字(自己起名字)127.0.0.1:6379 1 #上面最后一个数字1,表示主机挂掉后 slave投票看让谁接替成为主机,得票数多的成为主机 #比如 sentinel monitor host6379 127.0.0.1 6379 1
-
启动哨兵
- Redis-sentinel/myredis/sentinel.conf
- 以上的目录按照工作实际情况配置
-
正常主从演示
-
如果原有的master挂了
-
投票新选
-
重新主从继续开工,info replication查看
-
注意:如果之前的master重启回来,两个master不会冲突,会跟着新maser继续同步
-
一组哨兵能同时监控多个master
-
Sentinel管理命令:
redis-cli-p 26380 PING :返回 PONG 。 SENTINEL masters :列出所有被监视的主服务器 SENTINEL slaves <master name> SENTINEL get-master-addr-by-name <master name> : 返回给定名字的主服务器的 IP 地址和端口号。 SENTINEL reset <pattern> : 重置所有名字和给定模式 pattern 相匹配的主服务器。 SENTINEL failover <master name> : 当主服务器失效时, 在不询问其他 Sentinel 意见的情况下, 强制开始一次自动故障迁移。
-