1. Redis 集群概述
Redis 是一个高性能的 内存数据库,广泛应用于缓存、队列等场景。随着数据量的增长和高可用性要求的提高,单节点 Redis 已经不能满足需求,为此,Redis 提供了 集群部署 方案,以达到 分布式存储和高可用性 的目的。
1.1 Redis 集群架构
Redis 集群采用了 分片架构,将数据分片存储在多个节点上。每个节点负责若干个槽位中的数据,通过 一致性哈希算法 将数据按照 key 进行分片,将数据均匀分配到不同节点上,从而实现了分布式存储。
2. Redis 集群部署
2.1 安装 Redis
Redis 集群部署需要 Redis 版本在 3.0 及以上,因此需要安装最新版本的 Redis。
sudo apt update
sudo apt install redis
安装完成后,可以使用如下命令检查 Redis 版本:
redis-server -v
2.2 配置 Redis 集群
Redis 集群需要多个节点,我们可以使用多个虚拟机来模拟多节点的环境。在配置 Redis 集群前,需要修改 Redis 配置文件,在 /etc/redis 目录下找到 redis.conf 文件,修改以下配置项:
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip <your-ip-address>
cluster-announce-port <your-listening-port>
其中:
bind:将 Redis 绑定到指定 IP,这里设置为 0.0.0.0 表示所有 IP 都可以访问。
cluster-enabled:启用集群模式。
cluster-config-file:指定集群配置文件的名称。
cluster-node-timeout:节点失联的超时时间,单位为毫秒。
cluster-announce-ip:节点所使用的 IP 地址。
cluster-announce-port:节点的监听端口。
修改完成后,需要将其复制到其他节点中,并分别修改 cluster-announce-ip 和 cluster-announce-port 参数,设置为不同的 IP 地址和端口号。
2.3 启动 Redis 集群
启动 Redis 集群需要先运行每个节点的 Redis 服务,然后使用 redis-trib 工具创建集群。
先在每个节点上启动 Redis 服务:
redis-server redis.conf
然后在任意一个节点上使用 redis-trib 工具创建集群,具体操作如下:
进入 Redis 安装目录下的 src 目录,执行下面的命令来启动 Redis 管理工具:
cd /usr/bin
redis-cli --cluster create <your-ip-address>:<your-listening-port> ... <other-nodes>:<other-ports>
其中,<your-ip-address> 和 <your-listening-port> 分别为当前节点的 IP 地址和监听端口号,<other-nodes> 和 <other-ports> 则为其他节点的 IP 地址和监听端口号。
根据提示输入 yes 确认创建集群,并输入 yes 确认分配槽位。
创建完成后,您可以使用 redis-cli 连接任意一个节点,并执行相关操作,集群将自动处理所有数据的路由。
3. Redis 集群常用操作
3.1 添加节点到 Redis 集群
在 Redis 集群中添加节点需要使用 redis-trib 工具,具体操作如下:
停止要加入 Redis 集群的新节点上的 Redis 服务。
修改新节点的 Redis 配置文件(redis.conf):
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
使用 redis-trib 工具将新节点加入集群,命令如下:
redis-trib add-node <new-node-ip>:<new-node-port> <existing-node-ip>:<existing-node-port>
其中,<new-node-ip> 和 <new-node-port> 分别为新节点的 IP 地址和监听端口,<existing-node-ip> 和 <existing-node-port> 则为一个现有节点的 IP 地址和监听端口。
重复以上步骤,将新节点加入集群。
更新节点分片信息,命令如下:
redis-trib rebalance <existing-node-ip>:<existing-node-port>
3.2 从 Redis 集群中移除节点
使用 redis-trib 工具从 Redis 集群中移除节点的步骤如下:
停止要移除的节点上的 Redis 服务。
使用 redis-trib 工具将要移除的节点标记为 Fail,命令如下:
redis-trib call <node-ip>:<node-port> forget <failed-node-ip>:<failed-node-port>
其中,<node-ip> 和 <node-port> 分别为任意一个在集群中的节点的 IP 地址和监听端口,<failed-node-ip> 和 <failed-node-port> 则为要移除的节点的 IP 地址和监听端口。
重启被标记为 Fail 的节点的 Redis 服务,并使用 --slaveof 选项将其设置为其他节点的从节点。
最后,使用 redis-trib 工具删除标记为 Fail 的节点,命令如下:
redis-trib call <node-ip>:<node-port> remove <failed-node-ip>:<failed-node-port>
3.3 查看 Redis 集群状态
可以通过 redis-cli 工具查看 Redis 集群的状态。使用以下命令连接到 Redis 集群中的任意一个节点:
redis-cli -c -h <node-ip> -p <node-port>
然后使用 cluster nodes 命令查看节点状态:
cluster nodes
将输出每个节点的相关信息,如节点 ID、IP 地址、端口号、状态等。
4. 结语
本文介绍了 Redis 集群的部署和常用操作,希望对读者有所帮助。在实际生产环境中,Redis 的集群架构将极大地提升数据处理的效率和可靠性,为提升业务性能提供了必要的支持。