Redis分布式集群的创建 - 极悦
专注Java教育14年 全国咨询/投诉热线:444-1124-454
极悦LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 Redis分布式集群的创建

Redis分布式集群的创建

更新时间:2022-02-15 09:53:29 来源:极悦 浏览923次

要创建 redis 的分布式环境,您有 2 个选项,如下所示 -

Redis Sentinel — 当速度不是您最关心的问题时使用 sentinel,这使其成为具有高可用性问题的小型实施的绝佳选择。

Redis 集群——它提供高可用性和集群解决方案。考虑到访问您的数据,它是确保高可用性同时保持快速访问速度的绝佳选择

底线 — 如果您需要自动故障转移解决方案而不使用完整的集群解决方案,请使用 sentinel。要使用分片获得完整的集群集群解决方案,请使用集群。

对于这个故事,我将创建一个完整的集群解决方案,因此我将采用集群方式。

了解redis

每个 Redis 集群节点都需要打开两个 TCP 连接。用于服务客户端的普通 Redis TCP 端口,例如 6379,加上数据端口加上 10000 得到的端口,即 16379。请确保在防火墙中打开这两个端口,否则 Redis 集群节点将无法通信。

Redis Cluster 不使用一致性散列,而是使用不同形式的分片,其中每个键在概念上都是我们所谓的散列槽的一部分。Redis Cluster 中有16384个哈希槽。

Redis 集群中的每个节点都负责哈希槽的子集,例如,您可能有一个具有 3 个节点的集群,其中:

节点 A 包含从 0 到 5500 的哈希槽。

节点 B 包含从 5501 到 11000 的哈希槽。

节点 C 包含从 11001 到 16383 的哈希槽。

创建和使用 Redis 集群

Redis 集群使用主从配置来支持分布式环境。在本例中,我们将创建 3 个主节点和 3 个从节点。每个主节点至少有 1 个从节点。

如果您想以最少的配置立即启动并运行集群,请使用redis 包中默认提供的“ create-cluster”脚本。有很多关于如何使用 `create-cluster` 脚本创建集群的教程,所以我不打算介绍。相反,我将展示如何手动执行此操作,这为您提供了极大的自由度来调整集群配置参数。

安装

由于我们正在模拟一个 6 节点集群(3 个主节点和 3 个从节点),我们将创建 6 个文件夹,即 6001、6002、6003、6004、6005、6006。这里的文件夹名称代表每个实例将运行的端口号。在每个节点上,即在每个文件夹中,通过执行以下命令下载并制作 redis 包 -

$ wget http://download.redis.io/releases/redis-5.0.5.tar.gz $ tar xzf redis-5.0.5.tar.gz $ cd redis-5.0.5 $ make

您也可以简单地下载一个文件夹中的包并将其复制到其他文件夹。这将为您节省一些下载时间和带宽。

现在编译的二进制文件在src目录中可用。

以集群模式运行 Redis

现在你有了 redis,你可以在目录中看到一个 `redis.conf` 文件src。这是您应该在其中定义所有集群配置参数的配置文件。以下是您应该在 `redis.conf` 中开始的最小配置示例 -

端口 6001 cluster-enabled 是cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly 是

如您所见,启用集群模式的只是cluster-enabled指令。每个实例还包含存储此节点配置的文件的路径,默认情况下为nodes.conf. 该文件永远不会被人类触及;它只是由 Redis 集群实例在启动时生成,并在每次需要时更新。请注意,按预期工作的最小集群需要包含至少三个主节点。

在每个目录中创建一个redis.conf文件,从 6001 到 6006。作为配置文件的模板,只需使用上面的小示例,但请确保6001根据目录名称将端口号替换为正确的端口号。

最后在您最喜欢的终端应用程序中打开 6 个终端选项卡。像这样启动每个实例,每个选项卡一个:

./src/redis-server ./redis.conf

以下是启动后其中一个节点的屏幕截图。您可以看到从每个实例的日志中可以看到,由于不nodes.conf存在文件,因此每个节点都为自己分配了一个新 ID。

此特定实例将永远使用此 ID,以便实例在集群上下文中具有唯一名称。每个节点都使用此 ID 记住其他所有节点,而不是通过 IP 或端口。IP 地址和端口可能会改变,但唯一的节点标识符在节点的整个生命周期内都不会改变。我们将此标识符简称为Node ID。

创建集群

现在打开一个新的终端窗口并在src目录中执行以下命令。

./redis-cli --cluster create 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006 --cluster-replicas 1

该选项--cluster-replicas 1意味着我们希望为每个创建的主服务器创建一个从服务器。其他参数是您要用于创建新集群的实例的地址列表。

显然,符合我们要求的唯一设置是创建一个具有 3 个主节点和 3 个从节点的集群。

您可以在以下屏幕截图中看到它说[OK] All 16384 slots covered

在上面的屏幕截图中,以下行的意思正是他们所说的。

将副本 127.0.0.1:6005 添加到 127.0.0.1:6001
将副本 127.0.0.1:6006 添加到 127.0.0.1:6002
将副本 127.0.0.1:6004 添加到 127.0.0.1:6003

运行在端口 6001、6002 和 6003 上的节点是主节点,运行在端口 6005、6006 和 6004 上的节点分别是这些主节点的从节点。

集群现在已启动并运行。您可以通过执行命令来测试它,如下面的屏幕截图所示

以下命令表明我在集群模式下使用 redis-cli 并连接到在端口 6001 上运行的节点。

./src/redis-cli -c -p 6001

之后,您可以看到键值对存储在节点中,具体取决于它们保存到的哈希槽。它还表明我可以从任何节点访问任何密钥。在上面的屏幕截图中,密钥 foo 保存在节点 6003 中,但即使我在节点 6002 上,我也能够检索到它。

您的 redis 集群现在已启动并完全正常运行。如果您想了解更多相关知识,可以关注一下极悦的Java极悦在线学习,里面的课程内容全面,从入门到精通,适合0基础的小伙伴学习,希望对大家能够有所帮助哦。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>