一、是什么
主机数据更新后根据配置和策略,自动同步到备机的 master/slaver 机制。Master以写为主,Slave以读为主。
二、能干嘛
- 读写分离,性能扩展
- 容灾快速恢复
一主多从
三、怎么玩:主从复制
尝试搭建一个 一主两从
步骤:
-
创建
/myredis
文件夹 -
复制
redis.conf
配置文件到文件夹中 -
配置
一主两从
,创建三个配置文件redis6379.conf redis6380.conf redis6381.conf
-
在三个配置文件中写入内容
include /myredis/redis.conf pidfile /var/run/redis_6379.pid port 6379 dbfilename dump6379.rdb
-
将三个redis服务全部启动
-
查看三台主机运行情况,三个都是主机,没有主从效果
-
配置从机
# 成为某个实例的从服务器 slaveof <ip> <port> slaveof 127.0.0.1 6379
-
测试
主从复制
在主机中写操作,会自动复制一份到从机中去。
在从机中写操作,报错了。从机中只能做读操作。
四、常用3招
4.1 一主二仆
4.1.1 假设从机宕机
开启三个服务 6379
, 6380
, 6381
,设置6379为主机,另外两个为从机。
假设6381从机宕机,这时候,6379主机新增数据,看看会发生什么?
结论:
当从机挂掉了,再重新启动从机后,从机并不能加入到原先的主从关系中,需要重新手动加入。当重新加入后,它会把主机中的数据从头完整地复制一遍到从机。
4.1.2 假设主机宕机
开启三个服务 6379
, 6380
, 6381
,设置6379为主机,另外两个为从机。
假设6379主机宕机,看看会发生什么?
4.1.3 主从复制原理
4.2 薪火相传
一个主机只管理一个从机,其他小从机交给主机的直属从机管理。
附庸的附庸不是我的附庸
中途变更转向:会清除之前的数据,重新建立拷贝最新的
风险:一旦某个从机宕机了,后面的小从机都没办法备份主机的内容。
4.3 反客为主
当一个主机宕机后,后面的从机可以立刻晋升为主机,其后面的小从机不用做任何修改。
可是现在只能手动 slaveof no one 让从机晋升为主机。若要让从机在主机宕机后自动晋升为主机,需要“哨兵模式”。
五、哨兵模式
5.1 是什么
“反客为主”的自动版,能够后台监控主机是否故障,如果主机故障了可以根据投票数自动将从机转为主机。
5.2 怎么使用
步骤:
-
先调整为一主二仆模式
-
自定义的
/myredis
目录下新建sentinel.conf
文件,名字绝对不能错误。 -
配置哨兵,填写内容
# 其中 mymaster 是为监控对象起的服务器名称(外号),1 是至少有多少个哨兵同意切换 sentinel monitor mymaster 127.0.0.1 6379 1
-
启动哨兵
-
当主机挂掉,从机选举中产生新的主机(要稍微等待一会儿,等待哨兵监测到,然后再次启动主机)
5.2.1 复制延时
由于所有的写操作都是先在 主机 上操作,然后同步更新到 从机 上,所以从 主机 同步到 从机 上有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,从机 数量的增加也会使这个问题更加严重。
5.3 故障恢复
- 优先级在
redis.conf
中默认:replica-priority 100
,值越小优先级越高
在 vim 中,命令模式输入 ::set mu 开启行号
- 偏移量是指获得原主机数据最全的(从原主机那里获得了几个数据)
- 每个reids实例启动后都会随机生成一个40位的
runid
5.4 主从复制Java中
连接池中修改部分内容。
参考资源: