使用 redis-cli 搭建 Redis 集群

使用 redis-cli 搭建 Redis 集群,第1张

参考: Redis 集群教程

redisconf 文件中包含很多信息,如:端口号、持久化方式、持久化的文件等等。

使用写入了不同端口号的配置文件就可以启动多个 Redis 实例。
下面是一个最少选项的集群的配置文件:

文件中的 cluster-enabled 选项用于开实例的集群模式, 而 cluster-conf-file 选项则设定了保存节点配置文件的路径, 默认值为 nodesconf 。节点配置文件无须人为修改, 它由 Redis 集群在启动时创建, 并在有需要时自动进行更新。

要让集群正常运作至少需要三个主节点,不过在刚开始试用集群功能时, 强烈建议使用六个节点: 其中三个为主节点, 而其余三个则是各个主节点的从节点。

首先, 让我们进入一个新目录, 并创建六个以端口号为名字的子目录, 稍后我们在将每个目录中运行一个 Redis 实例: 命令如下:

在文件夹 7000 至 7005 中, 各创建一个 redisconf 文件, 文件的内容可以使用上面的示例配置文件, 但记得将配置中的 port 和 cluster-conf-file 中的端口号数字 从 7000 改为与文件夹名字相同的号码。不同的集群节点要使用不同的 cluster-conf-file 。
配置文件的路径是可以自定义的。创建完毕后分别启动一个实例。

网上看到的教程,包括参考的官方文档里的文章,大多是使用以下方式创建集群。

这个命令在这里用于创建一个新的集群, 选项–replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。
之后跟着的其他参数则是这个集群实例的地址列表,3 个 master 3 个 slave redis-trib 会打印出一份预想中的配置给你看,如果你觉得没问题的话,就可以输入 yes,redis-trib 就会将这份配置应用到集群当中,让各个节点开始互相通讯,最后可以得到如下信息:

这表示集群中的 16384 个槽都有至少一个主节点在处理,集群运作正常。

但是在 Redis 的 github 仓库 中看到,该文件已经不建议使用。

我在 手把手教你实现 Docker 部署 Redis 集群 的评论中看到, 现在 redis-cli --cluster 命令已经可以创建集群,分配槽,分配主从服务器了 ,于是使用以下命令了解到相关的命令。

可以看到,命令的组成形式和旧方式是一致的。

可以看到执行命令后,redis 客户端做了以下工作:

输入 yes 后,redis 客户端做了以下工作:

集群搭建完毕。

因为 Redis Cluster 默认要求所有的槽位被覆盖,可以通过修改 cluster-require-full-coverage yes 配置来改变该行为。
CLUSTERDOWN The cluster is down in redis 这里的回答中提到:我们可以使用 N 个Master 和 N+1 个 Slave,正常情况下多余的一个实例作为随机一个 Master 的 Slave,一旦有实例宕机,可以迅速顶替,以保证每个主节点总是有至少一个从节点保持数据同步。

ps:搜索命令行的输出时,才看到 深入理解Redis系列之集群环境搭建 这篇文章,有时候搜索的关键词不合适容易走弯路啊……

我们知道node是单进程的,但实际上目前cpu都是多核的,单进程只能跑一个核,这样cpu资源就没有得到充分利用。
cluster是一个node内置的集群模块,可以用于多进程管理。cluster非常好用,它大大减轻了我们多进程开发的难度,让我们可以轻松构建一个负载均衡集群。

express框架比较常用,我们可以在它下面集成cluster,使其拥有多进程的功能:

我的电脑是4核的,因此会fork出4个子进程,这个>

是一种去中心化的集群架构

Redis Cluster 的性能与单节点部署是同级别的。
多主节点、负载均衡、读写分离

Redis Cluster 支持标准的 主从复制配置来保障高可用和高可靠。
failover (故障转移)
Redis Cluster 也实现了一个类似 Raft 的共识方式,来保障整个集群的可用性。

向 Redis Cluster 中添加新节点,或者移除节点,都是透明的,不需要停机。
水平、垂直方向都非常容易扩展。
数据分区,海量数据存储

部署 Redis Cluster 不需要其他的代理或者工具,而且 Redis Cluster 和单机 Redis 几乎完全兼
容。

角色: master、slave

Redis Cluster 由多个Redis节点组构成,是一个P2P(point to point)无中心节点的集群架构,依靠Gossip协议传播集群

Gossip协议是一个通信协议,一种传播消息的方式。

思想启发于:病毒传播

这些收到信息的节点接下来会做同样的事情,即把这些信息传递给其他一些随机选择的节点。

信息会周期性的传递给N个目标节点。这个N被称为fanout(扇出)

gossip协议包含多种消息,包括meet、ping、pong、fail、publish等等

通过gossip协议,cluster可以提供 集群间状态同步更新 选举自助failover 等重要的集群功能。

分布式架构设计中,核心问题即为如何分片数据。在技术的更替中出现过以下分布式hash算法:

redis-cluster把所有的物理节点映射到[0-16383]个slot上,基本上采用平均分配和连续分配的方式。

slot槽必须在节点上连续分配,如果出现不连续的情况,则RedisCluster不能工作。

采用 raft 协议(参照Paxos算法 >Redis哨兵集群模式,每个节点都保存全量同步数据,冗余的数据比较多。从Redis30开始官方推出了RedisCluster集群模式 ,采用分片集群模式,可以减少冗余数据,但也提高了集群成本,RedisCluster集群最大的优点: 动态扩容、缩容 。

以最简单的为例,分别搭建3组节点,每组1主2从,如上图示。因机器有限,3组节点分别搭在3个虚拟机中,3台虚拟机IP: 19216810051、19216810052、19216810053 ,每组节点端口: 6381、6382、6383

配置文件基本和原来的一样,主要区别是要开启CLuster集群模式,

3台虚拟机,9个node节点分别启动

因为搭建在了 3台虚拟主机上,所以要先关闭防火墙

用命令将9台节点组成集群,在一台机器运行就行
连接集群和单机基本一样,但需要注意2点:

连接以后用 cluster nodes 命令查看节点信息,测试写入
杀死52上的主节点,等几秒钟,查看集群情况
然后重启,在查看集群情况,如下图:

集群减少一组主从节点,现在有3组,先把51:6381这一组去掉吧。

19216810051:6381 的从节点分别是 19216810052:6382 , 19216810053:6382 ,直接删除这2个,注意 *** 作时都用到node id

主节点 19216810051:6381 的slots转移到其他1个或多个节点,看硬件配置分配,这里就直接都给 19216810053:6381 吧。

删除之前,先查看一遍节点信息,确认槽位已经转移,再删除

集群扩容肯定是增加一组,即主从一块增加

启动好要增加的服务节点,新增主节点,命令中第2个地址是现在集群中任一个node节点的,注意不要搞错

从节点有2个,分别添加


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10910317.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-12
下一篇2023-05-12

发表评论

登录后才能评论

评论列表(0条)

    保存