无论是RDB还是AOF,都会存在数据丢失情况;如果想保证数据不丢失,同时实现高可用,可以使用Master-Slave模式
1.Redis主从复制的作用
2.两种配置主从机的方式
- 通过命令方式
在redis中使用slaveof命令指定主机是哪台机器。如果重启服务还要重新执行命令设置主从。 - 通过redis.conf方式
3.配置过程
- 配从(库)不配主(库)
- 从库配置:
slaveof 主库ip 端口号 如:(slaveof 127.0.0.1 6379 ) - 修改配置文件
- 拷贝多个
redis.conf 文件,作为配置其他服务的配置文件 - 开启
daemonize yes - 指定端口
4.主从复制分类
4.1 一主二从
配置步骤:
- 启动主库(master)
./redis-cli -p 9001 - 查看主库连接信息
info replication - 启动从库
./redis-cli -p 9002 和 ./redis-cli -p 9001 - 查看从库的配置信息
- 使用
slaveof 命令配置从库 此处,两个从库都配置为:slaveof 127.0.0.1 9001 (端口号可改) - 查看从库配置信息,如下:
7. 对主库(master)进行写操作,对从库(slave)进行读操作
特点:向主机写数据,就能同步到从机 缺点:如果主机宕机,就不能写数据了
4.2 薪火相传
配置步骤: 与一主二从相似,区别在于配置从库,呈链式
- 第一个从库使用:
slaveof 127.0.0.1 9001 - 第二个从库使用:
slaveof 127.0.0.1 9002
示例: 准备多个redis服务的环境
- 准备三个配置文件,每个配置文件中使用的redis服务端口不同
修改配置文件的端口号,用vi redis-9001.conf 命令打开配置文件 用同样的方式,将9002和9003的配置文件进行修改 启动三个服务redis-server,指定相应的配置文件就能启动三个redis服务了 - 使用redis-cli -p 端口号 能用redis客户端连接指定端口的服务
用三个客户端分别连接三个服务
查看主库的配置信息 配置第一个从机 配置第二个从机 验证: 主机写数据 从机9002读数据 从机9003读数据 当主机(9001)宕机后,从机(9002)变为主机,可以向9002写数据
优点:如果主机宕机,则从机变为主机。 缺点:如果有一个从机宕机,则后面的从机就不能同步前面的数据了。
4.3 反客为主
配置步骤
- 启动主库(master)
- 查看主库的连接信息
- 启动从库
- 查看从库的配置信息
- 使用slaveof 命令配置从库 两个从库都使用:slaveof 127.0.0.1 6379
- 查看从库的配置 主库关闭时,第一个从库执行slaveof no one 断开变为主库,第二个从库使用slaveof 127.0.0.1 6380连接修改后的主库
- 如果Master再启动时,使用 slaveof连接6380,使它自己变成从库
特点:如果主机宕机,推选一个从机变为主机,其他的从机变为新主机的从机。是手动方式。
4.4 哨兵模式
自动的反客为主,当一个主机宕机,由哨兵服务自动推选一个从机作为主机,自动更改各个redis服务的配置文件。
Redis-Sentinel是官方推荐的高可用解决方案,当redis在做master-slave的高可用方案时,假如master宕机了,redis本身(以及其很多客户端)都没有实现自动进行主备切换,而redis-sentinel本身也是独立运行的进程,可以部署在其他与redis可通讯的机器中监控redis集群
Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务:
- 监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
- 提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。 自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel
会开始一次。 - 自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址,
使得集群可以使用新主服务器代替失效服务器。
哨兵模式的搭建步骤
- 自定义的/etc目录下新建sentinel.conf文件;
- 在此文件中增加 sentinel monitor 被监控数据库名字(自己起名字,例如master6379 127.0.0.1 6379 2 ? 代表多少个从机认为主机下线可以开始投票
- 启动哨兵 ? redis-sentinel /etc/sentinel.conf
- 启动主机及从机 ? 启动redis后,主机挂掉后,从机上位;
从redis的安装目录拷贝哨兵的配置文件到redis的bin目录中 修改哨兵的配置文件 其中最后的1 代表如果有1个哨兵服务连接不上主机(即规定连不上主机的哨兵服务的个数),则要选举新的主机。
5 复制的原理
- slave启动成功连接到master后会发送一个sync命,Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步
- 全量复制:当从机连接到主机时,发送同步请求,主机将数据同步给从机
- 增量复制:当主机更新数据时,将更新的内容同步给从机要是重新连
|