Redis(Remote Dictionary Server)是一种非常流行和广泛使用的开源、快速、分布式和高效的内存中的键值数据库/数据结构服务器。
它提供了一套丰富的功能,使它对于广泛的使用案例都很有效:作为数据库、缓存层、消息代理或队列;适用于网络应用程序、聊天和消息应用程序、游戏、实时数据分析等。
它支持灵活的数据结构、主从异步复制以扩展读性能并保护数据不被丢失、客户端分片以扩展写性能、两种形式的持久性以将内存数据写入磁盘以紧凑的格式、集群和分区。它还提供了Redis Sentinel、Lua脚本、事务等高可用部署的自动故障转移以及许多其他功能。
由于NO SQL或非关系数据库,Redis在传统数据库系统(例如MySQL/MariaDB、PostgreSQL等)中提供了一些性能优势,因为所有其数据都存储在内存中,易于应用程序访问,而传统数据库则必须将所有数据写入或从磁盘或外部源读取。
Redis越来越成为缓存的首选,它允许重用缓存数据(存储在应用程序的主内存空间中),而不是始终查询数据库以获取频繁使用的数据。因此,它是RDMS(关系数据库管理系统)的绝佳伴侣,最终提高了应用程序的性能。
在这个由三部分组成的Redis教程系列中,我们将涵盖如何设置和使用一些Redis Sentinel和Redis Cluster的关键功能,文章包括:
本指南展示了如何在CentOS 8 Linux中设置Redis Replication(带有集群模式禁用),包括如何安装Redis,配置主节点和副本,并测试复制。
重要:带有集群模式禁用的Redis Cluster(即复制集群)具有单个节点组(例如一个主节点和一个或两个副本),而带有集群模式启用的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. Redis 使用 /etc/redis.conf 配置文件进行配置,这是一个自我记录的示例配置文件。首先,创建原始文件的备份,然后使用您选择的 命令行编辑器 打开它进行编辑。
# cp /etc/redis.conf /etc/redis.conf.org # vi /etc/redis.conf
5. 默认情况下,Redis 实例被配置为在 回环 接口上监听并接受连接,使用 bind 指令。为了与副本进行通信,主服务器应配置为在 IPv4 回环地址和其局域网 IP 地址上监听,即 10.42.0.247。
bind 127.0.0.1 10.42.0.247
6. 接下来,将 protected-mode 参数设置为 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的命令行界面)。默认情况下,它连接到localhost(在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
第三步:配置 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. 为了允许客户端连接到副本以读取数据,请在 bind 指令中添加副本 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
此外,当副本与主服务器失去连接或复制正在进行时,副本被配置为可能使用“过期”的数据回复客户端请求。但如果是首次同步,则数据集可能为空。此行为由 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.tecmint.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的高可用性。在此之前,请继续关注,并记得使用我们下方的评论表单分享您的想法和问题,以便您联系我们。
Source:
https://www.tecmint.com/setup-redis-replication-in-centos-8/