前言
Redis 作为在内存中操作数据的服务器系统,每时都会接收成千上万的请求,如果我们的业务只在单个服务器上面部署了 Redis,那么这个 Redis 服务器很可能会因为过多的业务处理而导致服务器挂掉,而这个单独的 Redis 服务器如果挂掉的话,那么所有关于 Redis 修改和查询的操作都无法正常进行。所以为了解决这个问题,我们引入了分布式系统这个概念。
什么是分布式系统
分布式系统由一组独立的计算机组成,这些计算机在地域上可能分散在世界各地,但通过网络连接形成一个统一的系统。这个系统具有多种通用的物理和逻辑资源,并能动态地分配任务。分散的物理和逻辑资源通过计算机网络实现信息交换。
分布式系统的主要特点:
- 分布性:整个系统的功能分散到各个计算机(节点)上实现,因此具有数据处理的分布性。
- 自治性:系统中的各个节点都包含自己的处理器与内存,地位上彼此平等,无主次之分,既能自治工作,也能通过网络来共享信息,协调处理任务。
- 并行性:一个大的任务可以分成若干个小任务,分发到不同的主机上运行。
- 全局性:系统中必须存在一个单一的、全局的进程通信机制,使得任意一个进程都能与其他进程相互通信,并且不区分本地通信与远程通信。
Redis 实现分布式主要有三种方式:主从模式、主从模式+哨兵模式和集群模式。这篇文章主要介绍主从模式。
主从模式
Redis 主从模式是在众多个 Redis 节点中,既有主节点又有从节点,主节点可以进行写操作也可以进行读操作,而从节点则只能进行读操作。当主节点中的数据修改了之后,从节点中的数据也会跟着变化,保持与主节点的数据一致。
当用户进行写操作的时候,这个操作只会在主节点中进行,然后将修改之后的数据同步到从节点中,而用户进行读操作的时候,则可以在主节点和从节点中的任何一个节点中进行,这样就使得每个 Redis 服务器的读操作的压力大大降低了。虽然写操作还是在一台服务器上的,但是 Redis 操作最多的还是读操作,相较于服务器承受的读操作的压力,写操作的压力还是可以承受的。
如果 Redis 从节点的服务器挂掉了,影响不大,因为其他的从节点和主节点还可以进行读操作,只是说服务器的压力可能大一点,而如果 Redis 主节点的服务器挂掉了,那么影响还是比较大的,因为只有主节点才可以进行写操作,主节点挂掉了就意味着无法修改数据了,但是暂时的读操作还是可以的,这个主节点挂掉的情况是有解决方式的,后面再为大家介绍。
实现Redis主从模式
按理来说,配置 Redis 主从模式应该是每个 Redis 节点在不同的主机上的,但是因为我这里资源有限,所以就在一个主机上为大家模拟出多个 Redis 节点的 Redis 主从模式的情况。
那么在一个主机上如何实现多个 Redis 节点的情况呢?Redis 服务器默认使用的端口号是 6379,我们只需要再添加几个除 6379 之外的其他端口作为 Redis 服务器使用的端口号就可以了。而修改 Redis 启动的端口号就需要在 Redis 的配置文件中进行配置:
首先我们需要将三个 redis 服务器的工作目录进行区分,防止工作目录重复而导致的 RDB 文件或者 AOF 文件重复,再而导致某一个 Redis 服务器无法正常启动。
首先准备三个配置文件来作为三个 Redis 服务器启动的配置文件:
root@iZ2ze5bzkbeuwwqowjzo27Z:/etc/redis# cp redis1.conf redis2.conf
root@iZ2ze5bzkbeuwwqowjzo27Z:/etc/redis# cp redis1.conf redis3.conf
root@iZ2ze5bzkbeuwwqowjzo27Z:/etc/redis# ll
total 344
drwxrws--- 2 redis redis 4096 May 1 16:49 ./
drwxr-xr-x 118 root root 4096 Apr 27 06:31 ../
-rw-r----- 1 root redis 85843 May 1 16:48 redis1.conf
-rw-r----- 1 root redis 85843 May 1 16:49 redis2.conf
-rw-r----- 1 root redis 85843 May 1 16:49 redis3.conf
-rw-r----- 1 root redis 85846 May 1 16:47 redis.conf
修改配置文件中的使用端口号,这里主节点默认使用 6379 端口号:
当修改完端口号之后还需要 daemonize 配置,按照后台进程的方式来运行:
然后启动 Redis 服务的时候通过执行配置文件 redis-server 配置文件路径
的方式来启动:
root@iZ2ze5bzkbeuwwqowjzo27Z:/etc/redis# service redis-server stop
root@iZ2ze5bzkbeuwwqowjzo27Z:/etc/redis# ps aux | grep redis
root 513119 0.0 0.1 6480 2416 pts/0