使用docker-compose 快速搭建redis cluster服务

观看本文档前,请先了解docker、docker-compose、reids cluser相关知识,为了方便操作,本文档将在一台虚拟机上面通过docker-compose部署6台redis服务器,通过这6台服务器搭建redis cluster服务

1、创建redis服务的配置文件及数据卷

# 创建目录
mkdir -p /usr/local/docker-redis/redis-cluster
# 切换至指定目录
cd /usr/local/docker-redis/redis-cluster/
# 在当前目录下创建6371文件夹,在文件夹下面创建config和data目录
mkdir -p 6371/data 6371/conf
//进入配置文件夹目录,并在目录下创建redis.conf文件,将下面的内容保存在redis.conf配置文件中
cd 6371/conf
vi redis.conf
port 6371
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
cluster-announce-ip 192.168.40.6
cluster-announce-port 6371
cluster-announce-bus-port 16371

参数解释:
port:节点端口;
protected-mode:保护模式,默认值 yes,即开启。开启保护模式以后,需配置 bind ip 或者设置访问密码;关闭保护模式,外部网络可以直接访问;
daemonize:是否以守护线程的方式启动(后台启动),默认 no;
appendonly:是否开启 AOF 持久化模式,默认 no;
cluster-enabled:是否开启集群模式,默认 no;
cluster-config-file:集群节点信息文件;
cluster-node-timeout:集群节点连接超时时间;
cluster-announce-ip:集群节点 IP,填写宿主机的 IP;
cluster-announce-port:集群节点映射端口;
cluster-announce-bus-port:集群节点总线端口。

# 回到项目跟目录
cd /usr/local/docker-redis/redis-cluster/
# 复制文件夹,并修改将6371修改为对应的端口,如6372文件夹里面redis.conf文件里面的所有的6371都要修改为6372,包括16731也要修改为16372
cp -r 6371/ 6372
cp -r 6371/ 6373
cp -r 6371/ 6374
cp -r 6371/ 6375
cp -r 6371/ 6376
# 自行修改文件夹里面的内容
# 此时这个目录下已经存在6371、6372、6373、6374、6375、6376这几个目录,并且这些目录下所有的配置文件都已经修改为和文件名对应的端口

# 回到项目跟目录
cd /usr/local/docker-redis/redis-cluster/
# 创建docker-compose.yml,文件内容如下
vi docker-compose.yml
# 描述 Compose 文件的版本信息
version: "2"

# 定义服务,可以多个
services:
  redis-6371: # 服务名称
    image: redis # 创建容器时所需的镜像
    container_name: redis-6371 # 容器名称
    restart: always # 容器总是重新启动
    network_mode: "host" # host 网络模式
    volumes: # 数据卷,目录挂载
      - /usr/local/docker-redis/redis-cluster/6371/conf/redis.conf:/usr/local/etc/redis/redis.conf
      - /usr/local/docker-redis/redis-cluster/6371/data:/data
    command: redis-server /usr/local/etc/redis/redis.conf # 覆盖容器启动后默认执行的命令

  redis-6372:
    image: redis
    container_name: redis-6372
    network_mode: "host"
    volumes:
      - /usr/local/docker-redis/redis-cluster/6372/conf/redis.conf:/usr/local/etc/redis/redis.conf
      - /usr/local/docker-redis/redis-cluster/6372/data:/data
    command: redis-server /usr/local/etc/redis/redis.conf

  redis-6373:
    image: redis
    container_name: redis-6373
    network_mode: "host"
    volumes:
      - /usr/local/docker-redis/redis-cluster/6373/conf/redis.conf:/usr/local/etc/redis/redis.conf
      - /usr/local/docker-redis/redis-cluster/6373/data:/data
    command: redis-server /usr/local/etc/redis/redis.conf
  redis-6374:
    image: redis
    container_name: redis-6374
    network_mode: "host"
    volumes:
      - /usr/local/docker-redis/redis-cluster/6374/conf/redis.conf:/usr/local/etc/redis/redis.conf
      - /usr/local/docker-redis/redis-cluster/6374/data:/data
    command: redis-server /usr/local/etc/redis/redis.conf
  redis-6375:
    image: redis
    container_name: redis-6375
    network_mode: "host"
    volumes:
      - /usr/local/docker-redis/redis-cluster/6375/conf/redis.conf:/usr/local/etc/redis/redis.conf
      - /usr/local/docker-redis/redis-cluster/6375/data:/data
    command: redis-server /usr/local/etc/redis/redis.conf
  redis-6376:
    image: redis
    container_name: redis-6376
    network_mode: "host"
    volumes:
      - /usr/local/docker-redis/redis-cluster/6376/conf/redis.conf:/usr/local/etc/redis/redis.conf
      - /usr/local/docker-redis/redis-cluster/6376/data:/data
    command: redis-server /usr/local/etc/redis/redis.conf
# 启动redis服务
docker-compose up -d

在这里插入图片描述

创建redis集群

# 随便进入一个容器节点,然后进入 /usr/local/bin/
docker exec -it redis-6371 bash
cd /use/local/bin
# 使用redis-cli --cluster help查看集群的使用帮助
# 通过redis-cli create命令实现 Redis Cluster 集群的创建。注意需要将ip:端口换成你自己的ip:端口,
#--cluster-replicas 1 表示集群中主从服务器的比例,此处为1表示一个master服务器跟随一个slave服务器,
# 遇到提示输入yes即可
redis-cli --cluster create 192.168.10.10:6371 192.168.10.10:6372 192.168.10.10:6373 192.168.10.11:6374 192.168.10.11:6375 192.168.10.11:6376 --cluster-replicas 1

在这里插入图片描述
至此一个高可用的 Redis Cluster 集群搭建完成,

# 查看集群状态,需要进入redis服务器的/use/local/bin目录下执行
redis-cli --cluster check 192.168.40.6:6371
# 进入集群内部
redis-cli -c -p 6371
# 查看集群节点,需要进入集群内部执行
cluster nodes
# 设置值
set email  ganganlee@outlook.com
# 获取值
get email

在这里插入图片描述
客户端连接集群中的任意一个节点,不管是master节点或者slave节点都可以操作集群内部的数据

集群的扩容和缩容

扩容
# 扩容步骤
# 1、先准备两台redis服务,可以参考上文的docker-compose方式创建redis服务器
# 2、将服务器加入到集群中
# 随便进入一个redis集群节点的redis内部
docker exec -it redis-6371 bash
# 进入到bin目录下,查看帮助手册获取添加node节点的命令
cd /use/local/bin
# 添加master节点,前面的是需要添加的节点信息,后面是容器中任意一个节点的信息
redis-cli --cluster add-node 192.168.40.5:6377 192.168.40.6:6371
# 添加slave节点,前面的是需要添加的节点信息,后面是容器中任意一个节点的信息,最后一个是前面添加的master节点的id,这个id需要从redis服务器查看,参考上文进入集群内布,查看集群节点找到之前添加的节点id
redis-cli --cluster add-node 192.168.40.5:6378 192.168.40.6:6371 --cluster-slave --cluster-master-id 5176cbb1054871028963af4d88680e075d7f48ce
# 3、分配slot,后面的IP为需要得到slot的IP,后面按照提示输入需要的信息回车即可,最后即可查看节点信息就能看到节点分配到的slot
redis-cli --cluster reshard 192.168.40.5:6377

注意,出现如下错误时,请清空redis数据再添加
[ERR] Node 192.168.40.6:6377 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
在这里插入图片描述
在这里插入图片描述

缩容
# 缩容步骤
# 1、将需要删除的节点的slot移动到其他节点,参考上文分配节点方法
# 2、删除节点,先删除从节点,再删除主节点,节点IP:port  节点id
redis-cli --cluster del-node 192.168.40.5:6377 5176cbb1054871028963af4d88680e075d7f48ce

在这里插入图片描述
参考文章:https://www.cnblogs.com/mrhelloworld/p/docker14.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
使用 Docker Compose 搭建 Redis 集群,你可以按照以下步骤进行操作: 1. 创建一个名为 `docker-compose.yml` 的文件,并在其中定义 Redis 服务。以下是一个基本的示例: ```yaml version: '3' services: redis-1: image: redis ports: - 6379:6379 command: redis-server --port 6379 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes redis-2: image: redis ports: - 6380:6379 command: redis-server --port 6379 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes redis-3: image: redis ports: - 6381:6379 command: redis-server --port 6379 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes ``` 在上面的示例中,我们定义了三个 Redis 节点(`redis-1`,`redis-2` 和 `redis-3`),并使用不同的端口(6379,6380 和 6381)。 2. 运行以下命令来启动 Redis 集群: ```bash docker-compose up -d ``` 这将启动 Redis 容器,并将它们连接到一个集群中。 3. 等待一段时间,直到容器成功启动,并且集群已经建立。你可以使用以下命令来检查集群状态: ```bash docker exec -it <container_id> redis-cli cluster nodes ``` 替换 `<container_id>` 为 Redis 容器的 ID。该命令将显示正在运行的节点和它们之间的连接信息。 注意:在建立集群时,你需要使用单独的 IP 地址和端口来配置每个节点,以确保它们能够正确通信。 希望这可以帮助你搭建 Redis 集群使用 Docker Compose!如有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值