主从复制
主机数据更新后根据配置和策略, 自动同步到备机的master/slaver机制
Master以写为主,Slave以读为主
作用
读写分离,性能扩展
容灾快速恢复
在从机出现宕机,可以切换到其他的从机中操作
注意:主机只能存在一台,从机可以存在多台
为什么
因为好比多个员工只有一个老板
如果主机与从机多对多。那么从机不知道跟随哪一个主机为主
如果主机出现异常怎么办。
我们以主从为搭建一个集群
操作
我们前面在启动redis的时候都会去指定配置文件。
所以我们只要在需要3个配置文件。表示启动不同的redis。
可以启动多个Linux。也可以启动一个Linux。**一个Linux 修改端口 **来表示不同的redis
- 拷贝多个redis.conf文件include(写绝对路径)
- 开启daemonize yes(关闭AOF)
- Pid文件名字pidfile
- 指定端口port
- Log文件名字
- dump.rdb名字dbfilename
- Appendonly 关掉或者换名字
关闭AOF
创建三个文件
用于启动得时候指定。
三个 文件内容类似
#表示引入该文件
include /usr/src/redis.conf
#表示指定得pid文件
pidfile /var/run/redis_6379.pid
#表示指定端口
port 6379
#表示指定RDB文件
dbfilename dump6379.rdb
分别进行启动三个redis
这里我使用远程连接同一个Linux。开启三个远程连接进行展示效果
此时得三个redis都是独立得,
也可以说都是主机
查看redis得信息
进入准确得redis客户端。然后使用
查看信息
info replication
从机指定主机
从机客户端指定主机。即可开启主从
slaveof 127.0.0.1 6379
查看主机和从机信息
主机
从机
再次天机从机也是一样得操作
- 每次得写操作都是用主机。
- 每次得读操作都是用从机
- 从机不能去使用写操作
一主两仆
表示一个主机多个从机
如果一个从机中途宕机。
宕机期间,主机又添加了很多操作。
从机也会存在添加的数据
注意
在重启从机的时候,要看看是否还是从机
主服务器宕机
从服务还是从服务器。
会等待主服务器启动之后。在做操作
原理
l Slave启动成功连接到master后会发送一个sync命令
l Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令, 在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步
l 全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
l 增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步
l 但是只要是重新连接master,一次完全同步(全量复制)将被自动执行
薪火相传
当一个主机向多个从机进行数据同步,从机过多情况。对于主机不太友好
可以通过
上一个Slave可以是下一个slave的Master,Slave同样可以接收其他 slaves的连接和同步请求,那么该slave作为了链条中下一个的master, 可以有效减轻master的写压力,去中心化降低风险。
用 slaveof
中途变更转向:会清除之前的数据,重新建立拷贝最新的
风险是一旦某个slave宕机,后面的slave都没法备份
主机挂了,从机还是从机,无法写数据了
反客为主
为了在主服务宕机之后还能进行写操作的时候
主服务器宕机。选择一个从服务器代替宕机的主服务器
当一个master宕机后,后面的slave可以立刻升为master,其后面的slave不用做任何修改。
slaveof no one
将从机变为主机。
这种方式。是在主机宕机之后。
手动的将从机转换为主机
下面会介绍哨兵模式。动态的进行转换
哨兵模式
反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库
创见sentinel.conf文件
名字指定是这个
其中mymaster为监控对象起的服务器名称, 1 为至少有多少个哨兵同意迁移的数量。
sentinel monitor mymaster 127.0.0.1 6379 1
启动哨兵
当主机挂掉后会进行找到从机进行转换为主机
此时哨兵进行选择
最终结果
发现多个从服务器,之间进行比较。选择一个从服务器进行转换主
当主服务器重启后。主服务器就会变成从服务器进行操作
选举规则
优先级在redis.conf中默认:slave-priority 100,值越小优先级越高
偏移量是指获得原主机数据最全的
每个redis实例启动后都会随机生成一个40位的runid
配置文件修改
复制延迟
在我们哨兵进行选择从服务器的时候是需要一段时间的。
这段时间。不可以进行操作。