如何在 CentOS 8 中设置 Redis 复制(禁用集群模式)—第 1 部分
Redis(远程字典服务器)是一个非常流行和广泛使用的开源、快速、分布式、高效的内存键值数据库/数据结构服务器。
它提供了丰富的功能,使其适用于广泛的用例:作为数据库、缓存层、消息代理或队列;适用于 Web 应用程序、聊天和消息应用程序、游戏、实时数据分析等。
它支持灵活的数据结构、主从异步复制以扩展读取性能并防止数据丢失、客户端分片以扩展写入性能、两种持久性形式(用于以紧凑格式将内存数据写入磁盘)、集群和分区。它还具有通过Redis Sentinel、Lua 脚本、事务等实现高可用性部署的自动故障转移功能。
Redis是一种非关系型数据库,它比传统数据库系统(如MySQL/MariaDB、PostgreSQL等)具有一些性能优势,因为它的所有数据都驻留在内存中,并且可以被应用程序轻松访问,而传统数据库必须将所有数据写入磁盘或外部源,或者从磁盘或外部源读取数据。
Redis已成为一种越来越流行的缓存选择,它允许重复使用缓存数据(存储在应用程序的主内存空间中),而不是总是查询数据库以查找常用数据。因此,它是RDMS(关系数据库管理系统)的绝佳伴侣,最终可提高应用程序性能。
在这个由三部分组成的Redis教程系列中,我们将介绍如何设置和使用 Redis 的一些关键功能,即复制、使用Redis Sentinel和Redis Cluster实现的高可用性,文章如下:
本指南介绍如何在CentOS 8 Linux 中设置Redis 复制(禁用集群模式),包括如何安装 Redis、配置主服务器和副本服务器以及测试复制。
重要提示:禁用集群模式的Redis 集群(即复制集群)具有单个节点组(例如,一个主服务器和一个或两个副本服务器),而启用集群模式的 Redis 集群可能由两个或多个节点组组成(例如,三个主服务器,每个主服务器具有一个或两个从属服务器)。
先决条件:
测试环境设置
Redis Master Server: 10.42.0.247 Redis Replica1/Slave1: 10.42.0.21 Redis Replica2/Slave2: 10.42.0.34
通过上述设置(具有单个读/写主节点和 2 个只读副本节点),我们有一个节点组,其中包含每个节点中的所有集群数据。一旦从属服务器连接到主服务器,它将收到完整数据库的初始副本,并且从属服务器上之前存在的任何数据都将被丢弃。
此外,客户端只能向主服务器写入数据,但可以从集群中的任何节点读取数据。当在主服务器上执行写入操作时,它们会传播到所有连接的从服务器,以实时更新从服务器数据集。
步骤1:在 CentOS 8 上安装 Redis
1.首先,通过 SSH 登录所有CentOS 8节点,然后使用DNF 包管理器在所有节点(主节点和副本节点)上安装Redis包,如图所示。
# dnf install @redis
2.完成Redis包安装后,启动Redis服务,使其在每次系统启动时自动启动,并检查它是否启动并运行,如下所示。
# systemctl start redis # systemctl enable redis # systemctl status redis
3.您还可以通过使用ss 命令检查监听端口来确认Redis服务器已启动并正在运行,如下所示。
# ss -ltpn | grep redis-server
第 2 步:配置 Redis 主服务器
4.使用/etc/redis.conf配置文件(一个自文档化的示例配置文件)配置 Redis 。首先,创建原始文件的备份,然后使用您选择的命令行编辑器打开它进行编辑。
# cp /etc/redis.conf /etc/redis.conf.org # vi /etc/redis.conf
5.默认情况下,使用 bind 指令将Redis实例配置为侦听并接受环回接口上的连接。要与副本进行通信,应将主服务器配置为侦听IPv4环回地址及其 LAN IP 地址,即10.42.0.247。
bind 127.0.0.1 10.42.0.247
6.接下来,将保护模式参数设置为以no
允许与副本进行通信,如下所示。
protected-mode no
此外,Redis 监听使用指令设置的端口6379。port
这是用于与应用程序 API 或 CLI 客户端通信的数据端口。
port 6379
7.为了选择性地保护主服务器与副本服务器之间的通信,我们可以使用requirepass指令来保护主服务器,这样客户端/副本服务器在运行任何命令或启动复制同步过程之前必须发出身份验证密码,否则主服务器将拒绝客户端/副本服务器的请求(记得设置一个安全密码)。
我们将使用以下选项进行演示,以展示其工作原理。
requirepass Securep@55Here
8.此外,Redis 日志存储在/var/log/redis/redis.log文件中,这是使用logfile指令设置的,默认服务器详细级别是notice ,使用loglevel参数定义。
loglevel notice logfile /var/log/redis/redis.log
9.由于systemd是CentOS 8中的默认系统和服务管理器,因此您可以通过将supervised参数设置为systemd来配置Redis与systemd监督树交互。
supervised systemd
10.完成所有必要的配置后,保存并关闭文件。然后重新启动Redis服务以应用新的更改。
# systemctl daemon-reload # systemctl restart redis
11.要访问Redis服务器,我们需要使用redis-cli(redis-server 的命令行界面)。默认情况下,它会连接到本地主机上的服务器(位于127.0.0.1端口6379)。请注意,由于服务器使用密码保护客户端,因此在身份验证之前运行命令会失败。
使用auth命令提供身份验证密码,如下面的屏幕截图所示。
# redis-cli 127.0.0.1:6379> client list 127.0.0.1:6379> AUTH Securep@55Here 127.0.0.1:6379> client list
12.要连接到副本(按照下一节所述配置它们之后),请使用-h
和-p
选项分别指定副本的 IP 地址/主机名和端口(不是说端口6379必须在副本的防火墙中打开)。
# redis-cli -h 10.42.0.21 -p 6379
13.接下来,在防火墙中打开Redis服务器数据端口以允许到主服务器的入站连接,然后使用firewall-cmd 命令重新加载防火墙规则,如图所示。
# firewall-cmd --zone=public --permanent --add-port=6379/tcp # firewall-cmd --reload
步骤3:配置Redis副本/从属服务器
14.要快速将Redis实例设置为副本,请使用redis-cli实用程序并调用REPLICAOF命令,如图所示。
# redis-cli replicaof 10.42.0.247 6379 OR # redis-cli 127.0.0.1:6379> REPLICAOF 10.42.0.247 6379
15.要使复制连接永久化,您需要在配置文件中进行以下更改。首先备份原始文件,然后打开它进行编辑。
# cp /etc/redis.conf /etc/redis.conf.org # vi /etc/redis.conf
16.为了允许客户端连接到副本以读取数据,请将副本 IP 地址添加到绑定指令。
# replica1 bind 127.0.0.1 10.42.0.21 # replica2 bind 127.0.0.1 10.42.0.34
将 Redis 实例设置为副本
17.要将 Redis 实例配置为副本,请使用replicaof参数并将主节点的 IP 地址(或主机名)和端口设置为值。
replicaof 10.42.0.247 6379
设置副本服务器以向主服务器进行身份验证
18.接下来,由于我们的主实例使用密码保护,我们需要在副本配置中设置密码,以使其能够使用 masterauth参数向主实例进行身份验证。
masterauth Securep@55Here
19.此外,当副本与主服务器失去连接时,或者复制正在进行时,副本配置为回复客户端请求,可能使用“过期”数据。但如果这是第一次同步,则数据集可能为空。此行为由replica-serve-stale-data参数控制。
而且,由于Redis 2.6默认副本是只读的,因此这由replica-read-only参数控制。您可以根据应用程序需求进行其他副本配置调整。
20.完成所有必要的更改后,在所有副本上重新启动 Redis 服务。
# systemctl restart redis
21.另外,在防火墙中打开端口6379以允许从主服务器和客户端到副本的连接,然后重新加载防火墙规则。
# firewall-cmd --zone=public --permanenent --add-port=6379/tcp # firewall-cmd --reload
步骤 4:检查主副本复制状态
22.主副本复制配置完成后,我们可以按如下方式检查设置是否正常工作。
在主服务器上,运行以下命令。
# redis-cli 127.0.0.1:6379> AUTH Securep@55Here 127.0.0.1:6379> info replication
23.另外,检查副本/从属服务器上的复制状态,如下所示。
# redis-cli 127.0.0.1:6379> info replication
23.现在让我们通过在主实例中设置键值来测试复制,并检查数据是否同步到副本。
在主服务器上执行以下操作:
# redis-cli 127.0.0.1:6379> AUTH Securep@55Here 127.0.0.1:6379> set domain 'www.example.com'
24.然后检查数据是否已同步到副本,如图所示。
# redis-cli 127.0.0.1:6379> get domain
保护主实例免受丢失部分写入的风险
25. Redis 具有一项功能,可以使主实例将在可用副本不足的情况下丢失某些写入的风险限制在指定的秒数内。
这意味着,如果连接的副本少于N 个,且滞后小于或等于M秒,则主服务器可以停止接受写入,分别由min-replicas-to-write和min-replicas-max-lag选项控制。
要设置它们,请取消注释它们,然后根据/etc/redis.conf中的设置要求设置值,如以下屏幕截图所示。此配置意味着,从最后一次 ping 副本开始,10 秒后,如果在线副本少于 2 个,主服务器将停止接受写入。
min-replicas-to-write 2 min-replicas-max-lag 10
您可以在/etc/redis.conf配置文件的其余部分找到更多选项,有关更多详细信息,请阅读Redis 文档中有关复制的内容。
在下一篇文章中,我们将介绍如何在CentOS 8中使用 Sentinel设置Redis 以实现高可用性。在此之前,请继续关注,并记得使用下面的评论表分享您的想法和问题,您可以与我们联系。