A3-1-Linux下 Redis 集群了解

A3-1-Linux Redis 集群了解

参考:http://redisdoc.com/topic/cluster-tutorial.html

本次是通过对官网的学习做一次学习性的笔记

一、集群简介

1、什么是redis集群?

redis集群是一个可以在多个redis节点之间进行数据共享的设施(installation

图片来源:https://www.cnblogs.com/bcde/p/11163362.html

2redis集群特性

不支持需要同时处理多个键的 Redis 命令, 因为执行这些命令需要在多个 Redis 节点之间移动数据, 并且在高负载的情况下, 这些命令将降低 Redis 集群的性能, 并导致不可预测的行为。

Redis 集群通过分区(partition)来提供一定程度的可用性(availability): 即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求。

3redis集群优点

将数据自动切分(split)到多个节点的能力。
当集群中的一部分节点失效或者无法进行通讯时, 仍然可以继续处理命令请求的能力。

4、连接

与任意实例连接,即可获得整个集群的数据!通过这个,得做一下读写分离了。

二、集群数据共享

参考:https://www.cnblogs.com/bcde/p/11163362.html

参考:https://www.cnblogs.com/wangfajun/p/12198149.html

Redis 集群使用数据分片(sharding)而非一致性哈希(consistency hashing)来实现: 一个 Redis 集群包含 16384 个哈希槽(hash slot), 数据库中的每个键都属于这 16384 个哈希槽的其中一个, 集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽, 其中 CRC16(key) 语句用于计算键 key CRC16 校验和

这个得在之后的集群操作中熟悉。

三、集群主从复制

为了使得集群在一部分节点下线或者无法与集群的大多数(majority)节点进行通讯的情况下, 仍然可以正常运作, Redis 集群对节点使用了主从复制功能: 集群中的每个节点都有 1 个至 N 个复制品(replica), 其中一个复制品为主节点(master), 而其余的 N-1 个复制品为从节点(slave)。

只要一个槽点存活一个节点服务器,那么集群就不会蹦!

四、Redis 集群的一致性保证(guarantee)风险项,需要考虑解决办法

Redis 集群不保证数据的强一致性(strong consistency): 在特定条件下, Redis 集群可能会丢失已经被执行过的写命令。

1、使用异步复制(asynchronous replication)是 Redis 集群可能会丢失写命令的其中一个原因。 考虑以下这个写命令的例子:

  • 端向主 B 发送一条写命令
  • B 执行写命令,并向客户端返回命令回复
  • B 刚刚执行的写命令复制它的从 B1 B2 B3

如你所 命令的复制工作生在返回命令回复之后, 如果每次理命令求都需要等待复制操作完成的 那么主理命令求的速度将极大地降低 —— 在性能和一致性之做出衡。

2Redis 集群另外一种可能会丢失命令的情况是, 集群出现网络分裂(network partition), 并且一个客户端与至少包括一个主节点在内的少数(minority)实例被孤立。
举个例子, 假设集群包含 A B C A1 B1 C1 六个节点, 其中 A B C 为主节点, A1 B1 C1 分别为三个主节点的从节点, 另外还有一个客户端 Z1
假设集群中发生网络分裂, 那么集群可能会分裂为两方, 大多数(majority)的一方包含节点 A C A1 B1 C1 而少数(minority)的一方则包含节点 B 和客户端 Z1
在网络分裂期间, 主节点 B 仍然会接受 Z1 发送的写命令:

  • 如果网分裂出时间很短, 那么集群会继续正常运行;
  • 但是, 如果网分裂出时间够长 使得大多数一方将从 B1 设置为新的主节点, 并使用 B1 来代替原来的主 B 那么 Z1 发送给主节点 B 的写命令将失。

注意,在网分裂出 Z1 可以向主 B 发送写命令的最大时间是有限制的, 这一时间限制称为节点超时时间(node timeout), Redis 集群的一个重要的配置选项

  • 对于大多数一方来说, 如果一个主点未能在点超时时间定的限内重新系上集群, 那么集群会将个主视为线 并使用从点来代替个主继续工作。
  • 对于少数一方, 如果一个主点未能在点超时时间定的限内重新系上集群, 那么它将停止理写命令, 并向客错误
Linux下使用`redis-cli`搭建Redis集群通常不是直接操作的,因为`redis-cli`主要是用于交互式地测试和管理单个Redis实例。实际上,Redis集群的部署应该通过Redis服务器自身的`redis.conf`文件以及一些高级特性,例如`redis-cluster`模块,来进行配置和管理。 以下是基本步骤: 1. **安装Redis**:确保在所有节点上安装了Redis,并选择包含`redis-cluster`模块的版本。 2. **编辑配置文件**:在每台服务器的`redis.conf`文件中,启用`cluster-enabled`和`cluster-config-file`配置,设置`cluster-config-file`指向一个共享文件,用于记录节点信息。 ```bash cluster-enabled yes cluster-config-file nodes.conf ``` 3. **启动Redis服务器**:添加`--cluster`标志启动服务器,此时Redis会自动进入集群模式。 ``` redis-server --cluster --cluster-config-file nodes.conf ``` 4. **配置`nodes.conf`**:手动编写或由`redis-cli`生成`nodes.conf`,列出集群的节点信息,包括节点IP地址、端口、槽位分配等。 5. **初始化集群**:在所有节点上分别运行`redis-cli`的`CLUSTER ADDSLOTS`命令,按照配置的槽位分配给各个节点。 6. **验证集群**:使用`redis-cli`的`CLUSTER SLOTS`命令确认槽位已被正确分配。 请注意,这只是一个简化的指南,实际部署时可能涉及更多细节,比如网络连接的稳定性、故障转移机制、负载均衡等。对于复杂场景,推荐使用专门的运维工具,如Redis的官方集群监控工具`redis-cli monitor`,或者第三方可视化管理工具如Redis Commander。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值