详解三分钟快速搭建分布式高可用的Redis集群
1. 准备工作
在开始之前,我们需要做好以下的准备工作:
- 一台或多台 Linux 主机
- 安装 Docker 和 Docker Compose
- 下载 Redis 的 Docker 镜像
2. 搭建集群
第一步:编写 docker-compose 文件
我们可以通过 docker-compose 的方式简单快速创建一个 Redis 集群。首先,我们在任意一台 Linux 主机上创建一个文件夹例如redis-cluster,然后在该目录下创建一个名为docker-compose.yaml的文件,并添加以下内容:
version: '3'
services:
redis:
image: redis:5.0.5-alpine3.10
container_name: redis
command: redis-server /etc/redis/redis.conf
volumes:
- ./conf/nodea/redis.conf:/etc/redis/redis.conf
ports:
- "7001:7001"
- "7002:7002"
networks:
- redisnet
environment:
CLUSTER_ANNOUNCE_IP: 127.0.0.1
CLUSTER_ANNOUNCE_PORT: 7001
CLUSTER_CREATE_MODE: yes
# 容器内 Redis 数据存储位置
REDIS_DATA_DIR: /redis/data
REDIS_LOG_DIR: /redis/log
# 在容器内部每个 redis 节点实例(容器)启动一个 supervisor 进程,用于监控和管理节点实例(容器)
ENABLE_REDIS_SUPERVISOR: yes
networks:
redisnet:
该 yaml 文件定义了一个服务叫 redis,使用 Redis 的 Docker 镜像,并将需要的节点配置文件指定为挂在本地机器中的redis-cluster/conf/nodea/redis.conf,redis 集群包括 2 个节点,每个节点运行在容器内,对应的监听端口为 7001 和 7002,在本机映射为同样的端口,使用了 redisnet 新建的网络(可以新增多个节点并将它们加入到同一个网络内),环境变量设置已使用注释标识,环境变量包括集群公告 IP 和端口、集群节点环境、Redis 存储位置、日志存储位置以及启用 node 进程监控功能等。
第二步:配置节点
我们在 redis-cluster 目录下创建 conf 目录,并在该目录下创建几个目录,每个目录分别代表一个节点,可以通过拷贝相同的配置文件或复制并修改的方式快速创建多个节点。其中,每个节点的 redis.conf 配置文件内容修改如下:
# 配置节点的端口号
port 7001
# 配置节点的工作目录
dir /redis/data
# 配置节点的日志文件名称
logfile /redis/log/redis.log
# 配置节点的主从信息(每个节点会有一个主节点和零个或多个从节点)
cluster-enabled yes
cluster-config-file /redis/data/nodes.conf
cluster-node-timeout 5000
cluster-replica-validity-factor 0
# 配置节点的注释信息
cluster-announce-ip 127.0.0.1
cluster-announce-port 7001
cluster-announce-bus-port 17001
appendonly yes
对于每个节点的配置文件,相当于对一个 Redis 服务器实例的单独适配,设置了端口、工作目录、日志文件名、集群启用、主从配置、注释信息以及 AOF 持久化等。这里,我们简单说明一下针对每个节点的配置文件:
- 配置节点的端口号:本例中,第一个节点监听端口为7001,第二个节点监听端口为7002,如果需要添加更多节点,只需要在docker-compose.yaml文件中新增一个服务定义,在服务定义中指定一个新的镜像及对应的配置文件即可。
- 配置节点的工作目录和日志文件名称:本例中,节点数据存储目录为/redis/data,节点日志存储路径为/redis/log/redis.log。
- 配置节点的主从信息:每个节点会被配置一个主节点和零个或多个从节点,Redis 集群共用一个集群配置文件,每个节点会将自己的信息写入到该文件中。配置文件的名称为nodes.conf,它存储在节点的工作目录中,如果该文件被删除或损坏,则需要重启 Redis 集群。
-
配置节点的注释信息:本例中,我们指定了以下集群注释信息:
-
集群公告 IP:127.0.0.1
- 集群公告端口:7001
-
集群公告总线端口:17001
-
配置节点的 AOF 持久化:本例中,我们同时启用了 AOF 持久化,表示即使出现崩溃状况,Redis 集群也能够恢复数据。
第三步:启动集群
启动集群非常简单,只需要在 redis-cluster 目录下执行以下命令即可:
docker-compose up -d
这条命令会将集群中的所有节点和网络启动,必要时随时可以添加新的节点。
示例一
接下来,我们需要验证 Redis 集群是否已经正常工作。首先,我们进入任意一个 Redis 节点内部:
docker exec -it redis sh
然后,我们连接 Redis 集群:
redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 --cluster-replicas 1
这条命令会创建一个 Redis 集群,并指定了 2 个节点,一个主节点和一个从节点,然后我们可以通过以下命令验证 Redis 集群是否正常工作:
redis-cli -c
cluster info
其中,cluster info 命令可以查看到以下的输出结果:
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
这表示 Redis 集群已经正常工作,集群创建了 2 个节点,目前集群的大小为 3。
示例二
我们还可以添加更多节点来扩展 Redis 集群。使用以下命令来添加新节点,并将它加入到已有的集群中:
docker-compose scale redis=3
这条命令会将当前的 Redis 集群扩展到 3 个节点(也可以选择任意其他数字),需要一些时间来完成该操作。完成后,我们可以查看集群大小:
redis-cli -c
cluster info
输出的结果应该如下:
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
表示 Redis 集群现在有 3 个节点。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解三分钟快速搭建分布式高可用的Redis集群 - Python技术站