前言
在分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到其他服务器,满⾜故障恢复和负载均衡等需求。Redis 也是如此,它为我们提供了复制的功能,实现了相同数据的多个 Redis 副本。复制功能是⾼可⽤ Redis 的基础,哨兵和集群都是在复制的基础上构建的。
单点问题
如果某个服务程序只部署在一个节点上(一个物理服务器上),那么当这个物理服务器挂掉后就无法提供该服务了,这就影响了该服务的可用性,并且一个物理服务器的资源是有限的,如果访问量过高也会导致无法提供服务。
引入分布式主要也是为了解决上述的单点问题,在分布式系统中,往往希望有多个服务器来部署 Redis 服务,形成一个 Redis 服务集群。当某个服务器出现问题后,其余的 Redis 服务器可以顶替,解决了可用性的问题。并且多个服务器能够分摊流量,通过 Redis 集群可以承担更大的访问量。
主从模式
主从模式是 Redis 服务器的部署方式。
在若干个 Redis 节点中,有的是主节点,有的是从节点,从节点得听主节点的,从节点上的数据得跟随主节点变化,从节点上的数据和主节点要保持一致。从节点就是主节点的副本。
流程:一开始主节点中有一批数据,引入从节点后就需要将主节点中的所有数据同步给从节点,后续主节点上对数据做的任何修改都会同步给从节点。
目的
准确的说,主从模式是对读操作的并发量与可用性的提高。因为对数据的修改操作只能由主节点完成,再由主节点同步给从节点,而主节点和从节点都可以完成读操作,因为它们保存的数据都是相同的。
在实际业务场景中,读操作往往是远大于写操作的。所以提高了读操作的并发量和可用性是非常有必要的。
从节点的数据是否可以修改
从节点上的数据是不能修改的,数据完全同步于主节点,要确保从节点的数据和主节点完全相同,避免歧义。
配置主从模式
现在我们在一个物理服务器上配置多个 Redis 服务器来实现主从模式。
参与复制的 Redis 实例划分为主节点(master)和从节点(slave)。每个从结点只能有⼀个主节点, ⽽⼀个主节点可以同时具有多个从结点。复制的数据流是单向的,只能由主节点到从节点。
由于我们需要在一个物理服务器上创建 2 个子 Redis 服务器,一个主 Redis 服务器,所以先创建一个目录,然后将 Redis 配置文件复制到该目录中。
创建子 Redis 服务器配置文件
创建 redis-conf 目录
mkdir redis-conf
将配置文件复制到 redis-conf 目录
cp /etc/redis.conf redis-conf/redis01.conf
cp /etc/redis.conf redis-conf/redis02.conf
配置 Redis 服务器后台运行
在 Redis 配置文件中 daemonize yes 配置项表示让 Redis 服务器按照后台进程的方式运行,要将两个配置文件中的 daemonize 配置项进行修改
配置 Redis 节点
一个 Redis 主节点和 两个 Redis 子节点的端口号在同一个服务器上不能相同,所以我们要重新设置一下子 Redis 服务器的端口号
将 Redis 子节点的端口号配置为 6380 和 6381
而且 3 个 Reids 服务器的 RDB 和 AOF 文件路径和文件名不能相同,要不然 3 个 Redis 服务器就共用一个 RDB 和 AOF 文件了,要修改两个子 Redis 服务器 RDB 和 AOF 文件的路径和文件名。
启动 Redis 服务器
按照不同的配置文件启动 Redis 服务器
redis-server ./redis-conf/redis01.conf
redis-server ./redis-conf/redis02.conf
查询当前进程状态,可以看到 6379,6380,6381 端口号的 Redis 服务器均启动
ps -aux|grep redis
连接 Redis 服务器
连接主 Redis 服务器
redis-cli
连接子 Redis 服务器,6380 是端口号
redis-cli -p 6380