目录
简介
- 是什么
在redis服务器中分主机和从机,主机数据更新后根据配置和策略自动同步到从机中。主机只进行写操作,从机只进行读操作。
- 优点
- 读写分离。主机只进行写操作,从机只进行读操作。
- 容灾的快速恢复。当一台从服务器宕机时,客户端读不到数据,redis会根据策略快速切换到另外一台服务器上进行读取。
当主服务器宕机怎么办?
主从复制的结构一般时一主多从或者一主一从。没有多主的情况。因为当在多主的情况下,当两个主服务器修改同一个键值时,不知道使用哪个数据了。
当主服务器宕机,一般采用集群的方式解决。
主从复制演示
- 新建文件夹来保存新的配置文件。
- 复制redis.conf配置文件到新建的文件夹中。
- 配置一主两从,创建3个配置文件。(启动redis时需要使用不同的端口)。
- 在新建的配置文件中写入内容。需要使用include命令来引入redis.conf。注意:需要将redis.conf的AOF进行关闭。
- 启动3个redis服务,注意现在3个redis服务之间并没有主从关系。
redis-server redis6379.conf
redis-server redis6380.conf
redis-server redis6381.conf
- 分别连上3台服务器,使用命令info replication查看redis的主从关系信息。
- 在从机上配置使用slaveof <ip> <port>命令配置自己的主机。将端口号为6380和6381的redis服务作为端口号为6379的从机,端口号为6379的redis服务作为主机。
- 查看主机信息
- 主从复制。在主服务器中进行写数据,再查看从服务器是否有主服务器的数据。
- 在从机中进行写操作,会报错。
特点
一主二仆
- 当一台从服务器宕机,在连接,查看该服务器的状态。
当前一端口6380和6381启动的服务器是以6379端口启动redis的从服务器,以端口6379端口启动的redis是主服务器。
将6381宕机,查看主服务器主从信息。
在主服务器中加入数据,查看以6380端口启动的redis中的数据。
重新以6381端口启动redis服务器,查看主从状态。
将以端口6381启动的redis服务器,重新设为6379的从服务器。
总结:当从服务器宕机,不再是主服务器的从服务器。宕机服务器重新启动后,不再是谁的从服务器,变成了主服务器。重新变成从服务器器后,会将主服务器的数据重新复制。
- 当主服务器宕机,查看服务器的状态。
总结:主服务器宕机后,从服务器还是原来主服务器的从服务器。
薪火相传
特点:一台主服务器下面挂多台从服务器,该主服务器的从服务器下面还可以挂多台从服务器。这样主服务器只要将数据同步到它挂的从服务器中,然后从服务器再将数据同步到对应挂的从服务器中。作用是为了减轻主服务器的写压力。
缺点是:当中一台从服务器宕机,该从服务器下面的从服务器的数据得不到同步,因为主服务器不能直接同步到从服务器的从服务器。当主服务器挂了,从机还是从机,就无法写数据了。
数据同步的现象和一主二仆一样。
演示:
将端口号为6381的服务器的主服务器换为端口号为6380的服务器。
查看以6379端口启动和6380启动的redis服务器的主从关系
反客为主
当主服务器宕机,从服务器还是从服务器,不会变成主服务器。但是使用slaveof no one 可以将从机变成主机。
缺点需要手动完成。使用哨兵模式可以实现自动完成。
演示:
主从复制原理
- 当从服务器连接上主服务器后,从服务器会向主服务器发送数据同步的消息。
- 当主服务器接收到从服务器的同步消息,主服务器会将数据进行持久化,形成rdb文件。把rdb文件发送给从服务器,从服务器拿到rdb文件后,进行读取。
- 每次主服务器进行写操作后,会和从服务器进行数据同步。这个操作是主服务器主动进行的。
哨兵模式
反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从服务器转换为主服务器。
演示
- 首先建立一主二仆模型。以端口6379启动的redis作为主服务器,以端口6380和6381端口启动的redis作为6379的从服务器。
- 新建sentinel.conf文件,名字绝对不能错。在里面配置哨兵,填写内容。
# mymaster为监控对象起的服务器名称,监控主机的名称
# 在主机挂掉后,哨兵需要投票从从机中选出主机,1表示至少需要一个哨兵投票才能变成主机
# 127.0.0.1 6379监控主机的ip
sentinel monitor mymaster 127.0.0.1 6379 1
- 启动哨兵
使用redis-sentinel来启动哨兵。
- 当主机宕机后,查看哨兵和从机状态
主机宕机
哨兵监控出来后,选出主机
6381端口的redis变成了主机
6380端口的redis变成了6381的从机
重新启动6379端口的redis后,查看状态,也变成了6381的从机。
复制延时
由于所有的写操作都是在主服务器上操作,然后同步更新到从服务器,所以从主服务器同步到从服务器有一定的延时,当系统业务很繁忙的时候,延时问题会更加严重,从机的数量增加也会使这个问题更加严重。
总结哨兵如何选出主机
- 从下线的主服务器的所有从服务器里面挑选一个从服务器作为主服务器。选择条件。
- 选择优先级靠前的。通过redis.conf配置中的slave-priority 100,该值越小,优先级越大
- 选择偏移量最大的。偏移量是指获得主服务器数据最全的。
- 选择runid最小的从服务器。每一个redis实例启动后都会随机生成一个40位的runid.
- 选出新的主服务器后,哨兵会向原主服务器的从服务器发送slaveof 新主服务器的命令,作为新主服务器的从机。
- 当已下线的服务重新上线时,哨兵会向其发送slaveof命令,作为新主的从机。