目录
一, 主从模式
1.1 单个Redis服务器可能存在的问题
1.2 单点问题
1.3 什么是主从模式
概念
图示
二, 演示Redis的主从复制
2.1 Redis-server进程
2.2 建立复制
1. 首先将redis.conf配置文件复制一份并修改daemonize 为 yes
2.修改配置文件中的端口号
3. 分别在两个配置文件中加上主从结构的配置
2.3 启动进程并查看
1. 分别启动三个Redis-server进程
2. 查看3个节点的网络情况
3. 查看复制状态
2.3 演示主从复制
1. 从节点读取主节点的数据
2. 从节点不能修改数据
2.4 断开复制
Redis主从模式(二)---拓扑结构及复制过程:Redis主从模式(二)---拓扑结构及复制过程-CSDN博客
一, 主从模式
1.1 单个Redis服务器可能存在的问题
Redis是一个内存数据库,主要用途是作为缓存存放热点数据从而降低MySQL的压力,大多数用于分布式系统;如果在并发量非常大的情况下,所有的请求都只访问一个Redis服务器的话,Redis服务器很容易发生宕机,从而导致数据丢失或者访问出错的情况,所以单个Redis服务在高并发环境下可能存在的问题有如下:
- 如果服务器发生了宕机,由于数据恢复是需要点时间的,那么这个期间是无法服务新的请求的;
- 如果这服务器的硬盘出现了故障,可能数据就都丢失了.
1.2 单点问题
上述单个Redis服务器可能存在的问题我们一般称为单点问题:指某个服务器程序只有一个节点(即只搞一个物理服务器来部署这个服务器程序),所以需要引入分布式系统来解决上述问题,再分布式系统中往往希望有多个服务器来部署Redis系统,从而构成一个Redis集群,此时这个集群给整个分布式系统服务,提供更稳定的/更高效的数据存储功能.
分布式系统中,希望使用多个服务器来部署Redis,存在以下几种Redis的部署方式:
- 主从模式(这篇博客详细说明)
- 主从模式+哨兵模式(后续讲解)
- 集群模式(后续讲解)
1.3 什么是主从模式
概念
主从模式针对于多个Redis节点来说,通常包括一个主节点和多个从节点,从节点的数据和主节点的数据保持一致,同时主节点的数据发生改变会实时更新到从节点,换而言之,从节点就是主节点的副本.
Redis主从模式下,默认名从节点不可以对数据进行修改(也可以在配置文件中修改,一般不修改),只能读取数据.
图示
- 从节点的数据是从主节点来的,从节点是主节点的一份副本;
- 主节点既支持读操作也支持写操作,但是从节点只能支持读操作;
- 正因为从节点支持读操作,从而增大了Redis服务器的并发量(因为Redis服务器的读操作往往远大于写操作).
注意:如果某一时刻从节点挂了,对Redis集群没啥影响,因为此时可以继续从主节点或者其他从节点读取数据,得到的效果完全相同;如果挂掉的主节点,此时这个Redis集群只能提供读操作不能提供写操作了,Redis存储的数据将不会得到更新.
二, 演示Redis的主从复制
2.1 Redis-server进程
配置Redis主从结构,首先需要启动多个服务器,正常来说,每个Redis服务器程序应该放在一个单独的主机上(也就是分布式),但是对于我们来说,只有一个云服务器,所以可以在一个云服务器上运行多个Redis-server进程(这里把每个进程当成一个单独的Redis服务器程序).
如何保证一个云服务器上运行多个Redis-server进程呢?本来的Redis-server默认的端口是6379,此时就需要保证多个Redis-server的端口是不同的,然后在启动每个Redis-server的时候使用不同的端口号进行启动.
2.2 建立复制
假设我们这里打算弄一个主节点两个从节点(主节点的端口号是6379,另外两个从节点的端口号是6380,6381).
配置复制的方式有以下三种:
- 在配置⽂件中加⼊ slaveof {masterHost} {masterPort} 随 Redis 启动⽣效(这里演示这种);
- 在 redis-server 启动命令时加⼊ --slaveof {masterHost} {masterPort} ⽣效;
- 直接使⽤ redis 命令:slaveof {masterHost} {masterPort} ⽣效.
1. 首先将redis.conf配置文件复制一份并修改daemonize 为 yes
2.修改配置文件中的端口号
3. 分别在两个配置文件中加上主从结构的配置
这个配置的意思就是从属于127.0.0.1 6379这个节点(即自己作为该节点的从节点)
2.3 启动进程并查看
1. 分别启动三个Redis-server进程
启动主节点
启动从节点
2. 查看3个节点的网络情况
使用命令 netstat -anp | grep redis-server 进行查看
通过命令可以查看到6个tcp连接,其中上面3个表示3个redis-server服务器连接,下面4个可以分成两组,分别表示每个从节点和主节点之间的tcp连接.
3. 查看复制状态
可以通过命令 info replication 分别查看主节点和从节点的复制状态
2.3 演示主从复制
1. 从节点读取主节点的数据
2. 从节点不能修改数据
2.4 断开复制
slaveof 命令不但可以建⽴复制,还可以在从节点执⾏ slaveof no one 来断开与主节点复制关系。 例如在 6380 节点上执⾏ slaveof no one 来断开复制.
断开复制的主要流程:
- 断开与主节点复制关系
- 从节点晋升成主节点
从节点断开复制后并不会抛弃原有的数据,只是无法再获取主节点的数据变化.
通过 slaveof 命令还可以实现切主操作,将当前从节点的数据源切换到另⼀个主节点。执⾏ slaveof {newMasterIp} {newMasterPort} 命令即可.
切主操作的主要流程:
- 断开与旧主节点复制关系
- 与新主节点建立复制关系
- 删除从节点当前所有数据
- 从新主节点进行复制操作
假设把这里端口号为6380的节点的主节点从6379切换到6381:
此时节点之间的关系如图所示: