更新时间:2022-02-15 09:53:29 来源:极悦 浏览923次
要创建 redis 的分布式环境,您有 2 个选项,如下所示 -
Redis Sentinel — 当速度不是您最关心的问题时使用 sentinel,这使其成为具有高可用性问题的小型实施的绝佳选择。
Redis 集群——它提供高可用性和集群解决方案。考虑到访问您的数据,它是确保高可用性同时保持快速访问速度的绝佳选择
底线 — 如果您需要自动故障转移解决方案而不使用完整的集群解决方案,请使用 sentinel。要使用分片获得完整的集群集群解决方案,请使用集群。
对于这个故事,我将创建一个完整的集群解决方案,因此我将采用集群方式。
每个 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 集群使用主从配置来支持分布式环境。在本例中,我们将创建 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.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基础的小伙伴学习,希望对大家能够有所帮助哦。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习