目录标题
- 环境
- 目的
- 实操
- 一主多仆
- 服务器和本地主机配置环境
- docker 环境配置
- 薪火相传
- 反客为主
- 主从复制的流程
- 主从复制的特性
- 主从复制的缺点
- 本篇结语
环境
我的环境介绍window环境VM虚拟机一台并安装centos7,一台阿里云Linux服务器,另一台Linux系统主机并安装docker环境。
目的
配置一主三从redis集群,验证主从复制的特性。
-
数据复制:在主从复制中,一个 Redis主节点(Master)会将其数据异步地复制给一个或多个从节点(Slave)。这意味着主节点上的数据更改将被自动传播到从节点,从而保持从节点的数据与主节点的数据同步。
-
读写分离:在主从复制中,客户端可以向主节点发出写操作(写入数据),而读操作可以分发给主节点或从节点。这使得负载均衡更容易实现,因为读操作可以分散到多个从节点上,减轻了主节点的负担。
-
高可用性:如果主节点失败,可以选择一个从节点晋升为新的主节点,以保持Redis集群的可用性。这是通过选举过程完成的,其中从节点中的一个被选为新主节点。
-
数据冗余:由于数据被复制到从节点,即使主节点发生故障,也可以从从节点恢复数据,从而减少数据丢失的风险。
-
故障转移:主节点故障后,Redis 集群可以自动选择一个从节点作为新主节点,以保持服务的连续性。这是通过 Sentinel或其他监控工具来实现的。
-
降低读操作对主节点的负载:通过将读操作分发到从节点,可以减少主节点上的读操作负载,从而提高系统的性能和可伸缩性。
-
实时监控:Redis 提供了监控机制,您可以随时查看主从节点的同步状态、延迟等信息,以确保数据一致性。
-
数据备份:从节点可以用于生成 Redis您可以定期将从节点的数据进行快照(snapshot)并存储起来,以便在需要时进行数据还原。
实操
一主多仆
服务器和本地主机配置环境
先下载自己需要的redis版本
然后在自己的Linux环境选定目录解压,接着make编译,找到redis.conf
文件修改配置。主要修改的配置:
bind
在 Redis 的配置文件中,bind 参数用于指定 Redis 服务器监听的网络接口(IP 地址)。默认情况下,Redis 会监听所有可用的网络接口,但您可以通过配置 bind 参数来限制 Redis 只监听特定的 IP 地址或主机名。这可以用于增强安全性,限制 Redis 服务器仅接受来自指定 IP 地址的连接,从而减少未经授权的访问风险。
以下是一些 bind 参数的常见用法和作用:
bind 127.0.0.1:此配置将使 Redis 服务器仅监听本地回环接口(127.0.0.1),从而只能通过本地访问 Redis 服务器,不允许远程连接。这有助于增加 Redis 服务器的安全性,因为只有本地应用可以连接到 Redis。
bind 0.0.0.0:这是默认设置,Redis 服务器将监听所有可用的网络接口,允许来自任何 IP 地址的连接。这在内部网络环境中很常见,但在公共网络上可能会增加安全风险。
bind <IP地址>:您可以指定一个具体的 IP 地址,使 Redis 服务器仅监听该 IP 地址上的连接。这对于在多个网络接口上运行 Redis 服务器的情况很有用,可以选择一个特定的接口。
protected-mode
它是用来控制 Redis 是否启用受保护模式的选项。受保护模式是为了增强 Redis 的安全性而设计的,特别是当 Redis 服务器在公共网络上运行时。以下是 protected-mode 的作用和影响:
防止未经授权访问:当 protected-mode 设置为 “yes” 时,Redis 服务器只接受来自本地回环接口(127.0.0.1)的连接请求,即只有本地应用可以连接到 Redis 服务器。这可以防止未经授权的远程访问,从而增强了 Redis 的安全性。
防止拒绝服务攻击:受保护模式还可以防止潜在的拒绝服务(DoS)攻击,因为只有本地应用可以连接到 Redis 服务器,远程主机无法访问 Redis。
默认值:protected-mode 的默认值为 “yes”,这意味着默认情况下,Redis 只接受本地连接。这有助于确保 Redis 在初始配置下更加安全。
如果您需要允许远程访问到 Redis,您可以将 protected-mode 参数设置为 “no”,但这需要非常谨慎,因为这可能会增加潜在的安全风险。在生产环境中,通常建议保持 protected-mode 为 “yes” 并使用其他方法来安全地允许远程访问,如配置密码认证、使用防火墙规则等。
port
这个就是你的redis服务端口,检查一下有没有被占用。不然启动不了reids服务。
daemonize
它用于控制 Redis 服务器是否以守护进程(daemon)的方式运行。Redis 是一个内存数据库,通常情况下,它在终端窗口中启动并以前台进程的方式运行,方便在终端观察日志和输出。但在生产环境中,通常希望 Redis 以守护进程的方式运行,不依赖于终端会话,以确保持久稳定的运行。
以下是 daemonize 参数的作用和取值:
daemonize yes:将 Redis 服务器以守护进程的方式运行。它会在后台运行,不会占用终端窗口,并且不依赖于终端会话。这通常是在生产环境中的推荐设置。
daemonize no:Redis 服务器将以前台进程的方式运行,通常用于开发和调试目的。在这种模式下,Redis 会将日志和输出信息发送到终端窗口,方便监视和调试。
这个要在docker中注意一下如果设置守护进程会启动不了
logfile
logfile配置redis日志地址。
RDB和AOF的那些配置大家默认就好,这里先不详解不然篇幅太大
requirepass
用于设置 Redis 服务器的密码认证。当 requirepass 被设置为一个非空的密码时,客户端连接到 Redis 服务器时必须提供正确的密码才能进行操作
replicaof
用于设置 Redis 主从复制(replication)的关系。通过配置 replicaof,您可以指定一个 Redis 服务器作为主服务器,而当前的 Redis 服务器将成为该主服务器的从服务器,从而建立主从复制关系。
主从复制是 Redis 的一种特性,它允许一个 Redis 主服务器将其数据实时复制到一个或多个从服务器上,以实现数据冗余、负载均衡、高可用性等目标。主服务器负责处理写操作,而从服务器则负责复制主服务器的数据并处理读操作,从而分担了主服务器的负载。
以下是一些关于 replicaof 参数的说明:
replicaof 的格式是 replicaof ,其中 和 分别是主服务器的 IP 地址和端口号。
在 Redis 服务器配置文件中配置 replicaof 后,Redis 将尝试连接指定的主服务器,并开始复制主服务器上的数据。
主服务器和从服务器之间的数据同步是实时的,主服务器上的写操作将立即被复制到从服务器上。
在配置主从复制时,通常情况下,从服务器的数据将被清空,然后从主服务器开始复制数据。如果需要保留从服务器上的数据,可以使用快照(RDB 文件)来初始化从服务器。
masterauth
masteruser
masterauth:
masterauth 是用于配置主服务器密码认证的参数。当主服务器启用了密码认证(通过设置 requirepass 参数)时,从服务器必须提供正确的密码才能连接到主服务器并进行数据同步。
masteruser:
masteruser 是用于配置主服务器用户名认证的参数。当主服务器启用了用户名认证时,从服务器必须提供正确的用户名和密码才能连接到主服务器并进行数据同步。
docker 环境配置
其他配置一样,但是最好做好部分文件的映射这样有利于查看日志和修改配置,我给出一个实例
docker run --name redis01 -id -p 6380:6380 -v /etc/node02:/usr/local/etc/redis -v /usr/node02/data:/data redis:latest redis-server /usr/local/etc/redis/redis.conf
小提示:
新版的docker redis容器中好像没有redis.conf文件了。大家可以映射进去。
这个几个是经常会用到的命令
info replication 显示集群或者节点信息
replicaof 主从复制
salveof 改换门庭
replica no 自立为王
从主节点查看集群信息可以观察到,这里有一个主节点三个从节点。
薪火相传
大概就是这样,配置也很多可以在开始的时候就在配置文件中配置也可以使用命令
salveof 改换门庭
反客为主
这个更简单,就是把salve节点变成master节点可以使用命令
replica no 自立为王
主从复制的流程
- 连接建立: 从服务器通过发送 SYNC 命令向主服务器请求建立连接。主服务器接受请求后,开始准备复制数据。
- 快照: 主服务器将当前的数据集快照保存到一个 RDB 文件中。这个 RDB 文件包含了主服务器的完整数据集。
- 缓冲区同步: 主服务器将 RDB 文件中的数据块发送给从服务器。从服务器接收到数据后,存储在内存中的缓冲区开始更新。
- redis也会通过ping检查主从是否保持联系。当主服务器接收到来自从服务器的 PING 命令后,它会回复 PONG,表示它仍然处于活跃状态。这有助于从服务器检测到主服务器是否仍然在线。如果主服务器不再响应 PING,从服务器可能会认为主服务器已经宕机,并采取适当的措施,例如触发故障转移操作。
- 命令传播: 主服务器将执行在 RDB
文件生成期间的所有写命令记录到一个缓冲区中,并将这些命令发送给从服务器。从服务器在接收到命令后,执行这些命令以更新自己的数据集。 - 增量复制: 一旦数据同步完成,主服务器将进入增量复制模式。在这个模式下,主服务器将实时将写命令传播给从服务器,以保持数据的一致性。
在 Redis 复制中,数据是通过异步复制的,因此在主从服务器之间可能会有一定程度的延迟。这意味着从服务器的数据不一定与主服务器的数据完全同步。如果需要更高的数据一致性,可以使用 Redis 集群。
我用我的window版本的redis连接master节点时可以直观的观察到上述的几个步骤。
虽然这个连接失败了但是也可以看到上述过程的影子。
主从复制的特性
数据冗余和高可用性:主从复制提供了数据冗余,即从服务器复制了主服务器的数据。如果主服务器故障,可以快速切换到从服务器,从而提高了系统的可用性。
先停掉主机
从机数据正常保留
读写分离:主服务器负责写入操作,从服务器负责读取操作。这允许主服务器专注于写入性能,而从服务器可以分担读取请求,提高了系统的吞吐量。
在主机先写入
在从机写入
在主机查
在从机查
热备份:从服务器可以用于创建热备份,而不影响主服务器的性能。这使得可以在运行中进行备份操作,而不需要停机。
我没有启用AOF目前的备份只有RDB这个时从节点的热备份文件。
总是搞混的是主从复制不具有负载均衡的特性
故障恢复:如果主服务器出现故障,可以快速将一个从服务器升级为新的主服务器,从而恢复服务。
把目前的master节点停掉
把其中一台自立为王
给它设置一个从机
查看这个主机的结果
增加数据中心:可以将从服务器部署在不同的数据中心,实现数据的跨数据中心复制,提高数据的可用性和灾难恢复能力。
主从复制的缺点
复杂性:配置和维护主从复制环境可能会增加系统的复杂性,需要考虑数据一致性和故障转移等问题。
网络带宽:复制过程需要占用网络带宽,特别是在复制大数据集时,可能会对网络产生较大压力。
延迟:从服务器的数据复制通常存在一定的延迟,这意味着读取从服务器的数据可能不是实时的。
数据一致性:在主从复制中,可能存在数据不一致的情况,特别是在网络分区或复制延迟的情况下。
本篇结语
为什么有主从复制呢,我觉得他是后面学习哨兵,集群的基础。只是单纯的主从复制显然是达不到生产的要求的。这些缺点都是致命的。下一篇我们记录哨兵的实操笔记。进入更好玩的世界。