帮助中心

立即注册 咨询客服

当前位置:首页 > 帮助中心> 如何在CentOS 8中设置Redis复制(禁用集群模式)

如何在CentOS 8中设置Redis复制(禁用集群模式)

发布时间:2020年04月09日 09:15:44    来源: A5互联

Redis(远程字典服务器)是一种非常流行且广泛使用的开源,快速,分布式和高效的内存中键值数据库/数据结构服务器。

它提供了丰富的功能,可使其广泛用于各种用例:作为数据库,缓存层,消息代理或队列;适用于Web应用程序,聊天和消息传递应用程序,游戏,实时数据分析等。

它支持灵活的数据结构,主从异步复制以扩展读取性能并防止数据丢失,客户端分片以扩展写入性能,两种以压缩格式将内存中数据写入磁盘的持久性形式,集群和分区。它还具有自动故障转移功能,可通过Redis Sentinel,Lua脚本,事务等进行高可用性部署。

作为非SQL数据库或非关系数据库,Redis与传统的数据库系统(例如MySQL / MariaDB,PostgreSQL等)相比,在性能上有一些优势,因为它的所有数据都驻留或存储在内存中,因此应用程序可以轻松访问它,传统数据库必须将所有数据写入磁盘或外部源或从磁盘或外部源读取数据。

本将介绍如何在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

确认Redis服务器端口

步骤2:配置Redis主服务器

4. Redis使用/etc/redis.conf配置文件进行配置,该文件是自介绍的示例配置文件。首先,创建原始文件的备份,然后使用您选择的命令行编辑器将其打开以进行编辑。

# cp /etc/redis.conf /etc/redis.conf.org

# vi /etc/redis.conf

5.默认情况下,Redis实例配置为使用bind指令侦听和接受回送接口上的连接。为了与副本进行通信,应将主服务器配置为侦听IPv4环回地址及其LAN IP地址(即10.42.0.247)。

bind 127.0.0.1 10.42.0.247

6.接下来,将保护模式参数设置no为允许与副本通信,如图所示。

protected-mode no

另外,Redis会监听使用指令设置的端口6379port。这是用于与应用程序API或CLI客户端进行通信的数据端口。

port 6379

配置Redis主服务器

7.为了有选择地保护主副本通信,我们可以使用requirepass指令保护主副本,以便客户端/副本必须在运行任何命令或启动复制同步过程之前发出身份验证密码,否则主副本将拒绝客户端/副本请求(请记住设置安全密码)。

我们将使用以下选项进行演示,以显示其工作原理。

requirepass Securep@55Here

设置认证密码

8.同样,Redis日志存储在/var/log/redis/redis.log文件中,这是使用logfile伪指令设置的,并且默认的服务器详细级别是notify,使用loglevel参数定义。

loglevel notice

logfile /var/log/redis/redis.log

设置Redis日志文件和日志级别

9.由于systemd是在默认的系统和服务管理的CentOS 8,您可以配置Redis的与互动systemd通过设置监督树监督参数systemd。

supervised systemd

将Redis Supervisor设置为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

通过Redis CLI访问Redis Server

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

或者

# redis-cli

127.0.0.1:6379> REPLICAOF 10.42.0.247 6379

连接到主Redis实例

15.要使复制连接永久化,您需要在配置文件中进行以下更改。首先备份原始文件,然后将其打开以进行编辑。

# cp /etc/redis.conf /etc/redis.conf.org

# vi /etc/redis.conf

16.要允许客户端连接到副本以读取数据,请将副本IP地址添加到bind指令。

# replica1

bind 127.0.0.1 10.42.0.21


# replica2

bind 127.0.0.1 10.42.0.34

将Redis实例设置为副本

17.要将Redis实例配置为副本,请使用copyof参数,并将主节点的IP地址(或主机名)和端口设置为值。

replicaof 10.42.0.247 6379

设置副本以对主服务器进行身份验证

18.接下来,由于我们的主实例使用密码进行保护,因此我们需要在副本配置中设置密码,以使其能够使用masterauth参数向主服务器进行身份验证。

masterauth Securep@55Here

19.另外,当副本失去与主数据库的连接时,或者正在进行复制时,副本被配置为回复客户端请求,可能带有“ 过期 ”数据。但是,如果是第一次同步,则数据集可能只是空的。此行为由复制副本-serve-stale-data参数控制。

而且,由于Redis 2.6默认情况下副本是只读的,因此这由副本只读参数控制。您可以进行其他副本配置调整,以适应您的应用程序需求。

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

检查主服务器上的Redis迁移信息

23.另外,按照以下步骤检查副本/从属服务器上的复制状态。

# redis-cli

127.0.0.1:6379> info replication

检查Redis副本1上的Redis复制信息

在Redis副本2上检查Redis复制信息

23.现在,我们通过在主实例中设置键值来测试复制,并检查数据是否已同步到副本。

在主服务器上,执行以下操作:

# redis-cli

127.0.0.1:6379> AUTH Securep@55Here

127.0.0.1:6379> set domain 'www.a5idc.net'

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

保护Redis主机免受写入损失

您可以在/etc/redis.conf配置文件的其余部分中找到更多选项,有关更多详细信息,请参阅Redis文档中的复制。

在后面的文章中,我们将介绍如何在CentOS 8中使用Sentinel设置Redis以实现高可用性。