在Ubuntu 14.04上配置Redis集群的方法

简介

Redis 是一个开源的键值对数据存储,采用内存存储模型,并可选择磁盘写入以实现持久化。它具有事务、发布/订阅和自动故障转移等功能。推荐在生产环境中使用 Linux 来部署 Redis,但开发人员也提到 OS X 作为他们开发和测试的平台。Redis 拥有大多数语言编写的客户端,在其官网上推荐了一些客户端。

在生产环境中,将数据复制到至少两个节点被认为是最佳实践。冗余性可以在环境故障时实现恢复,这在应用程序的用户基数增长时尤为重要。

在本指南结束时,我们将在 DigitalOcean 上设置两个 Redis Droplets,如下所示:

  • 一个 Droplet 用于 Redis 主服务器
  • 一个 Droplet 用于 Redis 从服务器

我们还将演示如何切换到从服务器并将其设置为临时主服务器。

可以随意设置多个从服务器。

本文重点介绍如何设置主从 Redis 集群;要了解有关 Redis 的一般信息以及其作为数据库的基本用法,请参阅此使用教程。

先决条件

虽然这可能适用于早期版本和其他 Linux 发行版,但我们建议使用 Ubuntu 14.04。

出于测试目的,我们将使用小型实例,因为没有真正的工作负载需要处理,但生产环境可能需要更大的服务器。

  • Ubuntu 14.04 LTS
  • 两个 Droplets,可以是任何你需要的大小;一个和一个或多个
  • 通过 sudo 非 root 用户通过 SSH 访问您的机器,如《使用 Ubuntu 14.04 初始服务器设置》中所述

步骤 1 — 安装 Redis

从将托管我们的主服务器的 Droplet 开始,我们的第一步是安装 Redis。首先,我们需要添加 Chris Lea 的 Redis 仓库(像往常一样,在添加第三方仓库时要非常小心;我们使用这个仓库是因为其维护者是一个值得信赖的人):

sudo add-apt-repository ppa:chris-lea/redis-server

ENTER 接受该仓库。

运行以下命令来更新我们的软件包:

sudo apt-get update

安装 Redis 服务器:

sudo apt-get install redis-server

检查 Redis 是否正在运行:

redis-benchmark -q -n 1000 -c 10 -P 5

上述命令表示我们希望 redis-benchmark 以安静模式运行,总共 1000 个请求,10 个并行连接和管道 5 个请求。有关在 Redis 上运行基准测试的更多信息,请在终端中键入 redis-benchmark --help,将打印有用的信息和示例。

让基准测试运行。完成后,您应该看到类似以下的输出:


PING_INLINE: 166666.67 requests per second
PING_BULK: 249999.98 requests per second
SET: 249999.98 requests per second
GET: 499999.97 requests per second
INCR: 333333.34 requests per second
LPUSH: 499999.97 requests per second
LPOP: 499999.97 requests per second
SADD: 499999.97 requests per second
SPOP: 499999.97 requests per second
LPUSH (needed to benchmark LRANGE): 499999.97 requests per second
LRANGE_100 (first 100 elements): 111111.12 requests per second
LRANGE_300 (first 300 elements): 27777.78 requests per second
LRANGE_500 (first 450 elements): 8333.33 requests per second
LRANGE_600 (first 600 elements): 6369.43 requests per second
MSET (10 keys): 142857.14 requests per second

现在为 Redis 从服务器 重复此部分。如果您正在配置更多 Droplets,可以设置尽可能多的从服务器。

此时,Redis 已安装并在我们的两个节点上运行。如果任何节点的输出与上述内容不相似,请仔细重复设置过程并检查是否满足所有先决条件。

步骤 2 — 配置 Redis 主服务器

现在 Redis 在我们的两个 Droplet 集群上运行,我们需要编辑它们的配置文件。正如我们将看到的,配置主服务器和从服务器之间存在细微差异。

让我们首先从我们的主服务器开始。

使用您喜欢的文本编辑器打开 /etc/redis/redis.conf

sudo nano /etc/redis/redis.conf

编辑以下行。

为 TCP 设置合理的保持活动计时器值:

tcp-keepalive 60

通过注释掉此行,使服务器对任何人都可访问:

# bind 127.0.0.1
# 绑定 127.0.0.1

由于 Redis 的特性以及其非常高的速度,攻击者可能会轻松地对密码进行暴力破解。因此,我们建议取消注释 requirepass 行并添加一个复杂的密码(或者最好是一个复杂的口令):

requirepass your_redis_master_password

根据您的使用场景,您可能需要更改以下行或保持不变。在本教程中,我们假设不需要进行任何键的删除。取消注释此行并将其设置如下:

maxmemory-policy noeviction

最后,我们需要进行以下更改,以备份数据。取消注释和/或设置这些行如下所示:

appendonly yes
appendfilename redis-staging-ao.aof

保存您的更改。

重新启动 Redis 服务以重新加载我们的配置更改:

sudo service redis-server restart

如果您想更上一层楼,您可以通过按照本教程中的 Redis 操作 部分的步骤,向主数据库添加一些独特的内容,这样我们稍后就可以看到它是如何被复制到从服务器的。

现在我们已经准备好主服务器,让我们继续进行从服务器的配置。

步骤 3 — 配置 Redis 从服务器

我们需要进行一些更改,以允许我们的 从服务器 连接到我们的主实例:

使用您喜欢的文本编辑器打开 /etc/redis/redis.conf

sudo nano /etc/redis/redis.conf

编辑以下行;一些设置将与主服务器的类似。

通过注释掉这行,使服务器对任何人都可以访问:

#bind 127.0.0.1

从服务器也需要一个密码,这样我们就可以给它发送命令(比如 INFO)。取消注释此行并设置一个服务器密码:

requirepass your_redis_slave_password

取消注释此行,并指示可以访问 主服务器 的 IP 地址,后面跟着该机器上设置的端口。默认情况下,端口是 6379:

slaveof your_redis_master_ip 6379

取消注释 masterauth 行,并提供您在 主服务器 上先前设置的密码/口令:

masterauth your_redis_master_password

现在保存这些更改,并退出文件。接下来,像我们在主服务器上做的那样重新启动服务:

sudo service redis-server restart

这将重新初始化 Redis 并加载我们修改过的文件。

连接到 Redis:

redis-cli -h 127.0.0.1 -p 6379 

使用 从服务器的密码 进行授权:

AUTH your_redis_slave_password

此时,我们正在运行一个功能齐全的主从 Redis 集群,两台机器都已经正确配置。

步骤 4 — 验证主从复制

测试我们的设置将使我们更好地了解我们的 Redis Droplets 的行为,一旦我们想要开始编写故障转移行为。我们现在要做的是确保我们的配置正常工作,并且我们的主服务器正在与从 Redis 实例通信。

首先,通过我们的终端连接到 主服务器 上的 Redis:

首先连接到本地实例,默认情况下运行在端口 6379。如果您已更改端口,请相应修改命令。

redis-cli -h 127.0.0.1 -p 6379

现在使用您在配置主服务器时设置的密码对 Redis 进行授权:

AUTH your_redis_master_password

您应该会得到一个 OK 作为响应。现在,您只需要运行:

INFO

您将看到关于主 Redis 服务器的一切您需要了解的内容。我们特别关注 #Replication 部分,它应该看起来像以下输出:

. . .# Replication
role:master
connected_slaves:1
slave0:ip=111.111.111.222,port=6379,state=online,offset=407,lag=1
master_repl_offset:407
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:406. . .

注意 connected_slaves:1 行,它表示我们的另一个实例正在与主 Droplet 进行通信。您还可以看到我们获得了从 IP 地址,以及端口、状态和其他信息。

现在让我们来看看我们的从服务器上的 #Replication 部分。该过程与我们的主服务器相同。登录到 Redis 实例,发出 INFO 命令,并查看输出:

. . .

复制

角色:从服务器
主机:111.111.111.111
端口:6379
主链接状态:正常
上次 I/O 同步时间:3 秒前
同步进度:0
复制偏移量:1401
从服务器优先级:100
只读模式:是
连接的从服务器数量:0
主服务器复制偏移量:0
复制后备日志状态:关闭
复制后备日志大小:1048576
复制后备日志起始字节偏移量:0
复制后备日志历史长度:0

. . .

我们可以看到这台机器的角色是从服务器,正在与主 Redis 服务器通信,并且没有自己的从服务器。## 步骤 5 — 切换到从服务器构建这种架构意味着我们也希望能够处理故障,以确保数据完整性,并尽可能减少应用程序的停机时间。任何从服务器都可以晋升为主服务器。首先,让我们手动测试切换。在**从服务器**上,我们应该连接到 Redis 实例:```command
redis-cli -h 127.0.0.1 -p 6379

现在使用配置从服务器时设置的密码进行 Redis 认证

AUTH your_redis_slave_password

关闭从服务器行为:

SLAVEOF NO ONE

响应应该是 OK。现在输入:

INFO

查找 # 复制 部分,找到以下输出:


. . .# 复制
角色:主服务器
连接的从服务器数量:0
主服务器复制偏移量:1737
复制后备日志状态:关闭
复制后备日志大小:1048576
复制后备日志起始字节偏移量:0
复制后备日志历史长度:0. . .

正如我们预期的那样,从服务器已经变成了主服务器,并且现在可以接受来自其他机器的连接(如果有的话)。我们可以在调试主要主服务器时将其用作临时备份。

这可以很容易地编写脚本,一旦检测到故障,就需要执行以下步骤:

  • 从应用程序,将所有对 Redis 的请求发送到从服务器
  • 在该从服务器上,执行 SLAVEOF NO ONE 命令。从 Redis 版本 1.0.0 开始,此命令告诉从服务器停止复制数据,并开始充当主服务器
  • 对所有剩余的从服务器(如果有的话),运行 SLAVEOF 主机名 端口 将指示它们停止从旧主服务器复制,完全丢弃现在已过时的数据,并开始从新主服务器复制。确保用新晋升的主服务器的正确值替换 主机名端口
  • 分析问题后,如果您的特定设置需要,可以将初始服务器恢复为主服务器

步骤 6 — 重新连接到主服务器

让我们重新连接到原始主服务器。在从服务器上,登录到 Redis 并执行以下操作:

SLAVEOF your_redis_master_ip 6379

如果再次运行 INFO 命令,您应该看到我们已经恢复到原始设置。

结论

我们已经正确设置了由一个充当 Redis 主服务器,另一个作为从服务器复制数据的环境。这样,如果主服务器下线或丢失我们的数据,我们知道如何切换到其中一个从服务器进行恢复,直到问题得到解决。

下一步可能包括编写自动故障转移程序的脚本,或通过使用 VPN 解决方案(如 OpenVPN 或 Tinc)来确保所有您的 Droplets 之间的安全通信。此外,测试程序和脚本对于验证您的配置至关重要。

此外,在生产环境中部署此类设置时,您应该采取预防措施。应该研究 Redis 文档页面,并且必须清楚了解哪种安全模型适合您的应用程序。我们经常将 Redis 用作会话存储,其中包含的信息对攻击者可能很有价值。常见做法是仅通过私有网络访问这些机器,并将它们放在多层安全之后。

这是您的数据存储可以构建的简单起点;绝不是关于设置 Redis 使用主从架构的详尽指南。如果有任何您认为本指南应涵盖的内容,请在下面留下评论。有关此主题的更多信息和帮助,DigitalOcean Q&A 是一个很好的起点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/818891.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何配置和使用网关(Gateway)

简介 在现代的微服务架构中,网关(Gateway)扮演着非常重要的角色。本文将介绍网关的基本概念以及如何配置和使用它。我们将以一个实际的示例来说明如何设置和使用网关。 什么是网关? 简要介绍网关在微服务架构中的作用,以及为什么我们需要它。选择网关 介绍当前流行的网关…

Spring Boot 学习(5)——组件注册

也是学得头晕眼花,终于知道学有多么难了,更知道教有多么难了…… 各位大神们出的教程终归和正规出版社还是差距的,我觉得是没有“审定”,这对于大多数做教程的人来说这应该通病:自己做(讲)的东西…

Java基础(一)--语法入门

文章目录 第一章、语法入门一、Java简介1、JVM2、Java程序执行过程3、JDK4、JRE5、JDK、JRE和JVM三者关系 二、Java常量与变量1、标识符2、关键字3、保留字4、变量5、数据类型6、常量 三、运算符1、算术运算符2、赋值运算符3、关系运算符4、逻辑运算符5、条件运算符6、运算符的…

DataX自动化生成配置json,创建ODS表,多线程调度脚本[mysql-->hive]

DataX自动生成json配置文件及多线程执行脚本(仅支持mysql-->hive),其他版本自行实现,修改json模版即可 执行Datax任务 datax_run.py # 指定项目下的所有的ods任务,如果不指定参数,默认执行dw下的prefix过滤后的所有抽取任务 # 使用方式:python3 datax_run.py -p 项目名 -…

反爬虫之代理IP封禁-协采云IP池

反爬虫之代理IP封禁-协采云IP池 1、目标网址2、IP封禁4033、协采云IP池 1、目标网址 aHR0cDovL3d3dy5jY2dwLXRpYW5qaW4uZ292LmNuLw 2、IP封禁403 这个网站对IP的要求很高,短时间请求十几次就会遭关进小黑屋。如下图: 明显是网站进行了反爬处理&…

【JVM】JVM的垃圾回收机制与垃圾回收器的选择

昨天说了JVM的工作流程,感兴趣的可以先去看一看。今天咱们接着来探讨JVM的垃圾回收机制,包括其工作原理、如何确定对象回收、可用的垃圾回收器以及如何进行垃圾回收器的选择与配置。 1.工作原理 JVM的垃圾回收机制主要依赖于垃圾回收器来自动管理内存的…

Cannot access ‘androidx.activity.FullyDrawnReporterOwner‘

Android Studio新建项目就报错: Cannot access ‘androidx.activity.FullyDrawnReporterOwner’ which is a supertype of ‘cn.dazhou.osddemo.MainActivity’. Check your module classpath for missing or conflicting dependencies 整个类都报错了。本来原来一直…

OpenCV-AMF算法(自适应中值滤波Adaptive Median Filtering)

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 实现原理 AMF(Adaptive Median Filter,自适应中值滤波)是一种用于图像处理和信号处理的滤波算…

了解.DevicData-P-XXXXXXXX勒索病毒,以及如何保护您的数据

导言: 随着网络技术的快速发展,网络安全问题日益凸显,其中勒索病毒成为了一种严重的网络安全威胁。在众多勒索病毒中,.DevicData-P-XXXXXXXX勒索病毒以其强大的加密能力和恶劣的勒索行为引起了广泛关注。本文将对该病毒进行详细介…

运维——1.网线接在家用无线路由器LAN口依然可以上网,什么原理

当你将网线连接到家用无线路由器的LAN口时,这种连接方式实际上是将路由器作为一个普通的网络交换机来使用。家用无线路由器通常具有多个LAN口,这些LAN口实际上就是一个内置的网络交换机,用于在局域网内连接多台设备。 无线路由器的LAN口连接…

蓝桥杯2024年第十五届省赛真题-R 格式(高精度乘法 + 加法)

本题链接:蓝桥杯2024年第十五届省赛真题-R 格式 - C语言网 题目:​​​​​​​ 样例: 输入 2 3.14 输出 13 思路: 根据题意,结合数据范围,这是一道模板的高精度乘以低精度问题。 题意是double 类型 d 与…

论文笔记:Time Travel in LLMs: Tracing Data Contamination in Large Language Models

iclr 2024 spotlight reviewer评分 688 1 intro 论文认为许多下游任务(例如,总结、自然语言推理、文本分类)上观察到的LLMs印象深刻的表现可能因数据污染而被夸大 所谓数据污染,即这些下游任务的测试数据出现在LLMs的预训练数据…

mac电脑软件 Magnet v2.14.0免激活中文版

Magnet是一款窗口管理工具,适用于Mac操作系统。它可以帮助用户轻松地管理和组织多个应用程序的窗口,提高工作效率。 Magnet支持多种窗口布局和组合方式,可以将窗口分为左右、上下、四分之一等不同的比例和位置,用户可以根据实际需…

Mac上的PD虚拟机安装parallels tools问题

本文主要记录mac上的虚拟机软件安装好centos7.9的时候安装parallels tools的错误的解决办法: Centos 7.9虚拟机安装parallels tools 前言 在centos高版本上安装parallells tools时会报错,具体错误信息可以在/var/log/parallels.log文件中查看。 本文…

阿里云Centos7下编译glibc

编译glibc 原来glibc版本 编译前需要的环境: CentOS7 gcc 8.3.0 gdb 8.3.0 make 4.0 binutils 2.39 (ld -v) python 3.6.8 其他看INSTALL, 但有些版本也不易太高 wget https://mirrors.aliyun.com/gnu/glibc/glibc-2.37.tar.gz tar -zxf glibc-2.37.tar.gz cd glibc-2.37/ …

Spring Boot 整合 Mockito:提升Java单元测试的高效实践

引言 在Java开发领域,Spring Boot因其便捷的配置和强大的功能而受到广泛欢迎,而Mockito作为一款成熟的单元测试模拟框架,则在提高测试质量、确保代码模块间解耦方面扮演着至关重要的角色。本文将详细介绍如何在Spring Boot项目中整合Mockito&…

c++总结笔记(一)

计算机可以将程序转化为二进制指令(即机器码),并由CPU执行,CPU会按照指令的顺序依次执行每个指令。 C语言特点: 简洁高效可移植模块化标准化 C语言的标准 C89(C90)标准C99标准C11标准 导入 使用include导入包含…

《R语言与农业数据统计分析及建模》学习——数据读入

一、工作目录 # 获取当前工作目录 getwd()# 改变工作目录为指定路径下的文件夹 # 注意工作目录的表达方式 setwd(D:/R_class) setwd(D:\\R_class) 二、文件路径 读取文件中的数据首先要确定文件路径,如果文件不在工作目录下,则必须使用绝对路径 1、文…

Nginx 负载均衡配置

负载均衡算法 1. 轮询 权重 (最为合理,常用) 2. ip_hash / n取模(n 节点个数) (移动端会因为网络,基站的变动,ip会变动。生产不推荐不用) 3. 最少访问 (记…

AI、AGI、AIGC、AI Agent、Prompt、LLM 名词解释

啊!ChatGPT 最近很火呀,你们说的 AGI、AIGC、AI Agent、Prompt、LLM … 到底是什么意思啊?还有 Midjourney、Lensa、Sora、DALL-E、Llama … 又是什么鬼? AI(Artificial Intelligence,人工智能&#xff09…