【Redis集群】使用docker compose创建docker集群,并暴露外部接口

使用 Docker Compose 创建一个 Redis 集群并暴露外部接口需要配置 docker-compose.yml 文件。以下是一个基本的步骤,包括 Redis 集群的创建和外部接口的暴露。

1、创建 docker-compose.yml

首先,您需要创建一个 docker-compose.yml 文件,配置 Redis 服务。这里是一个创建 Redis 集群的示例:

version: '3'services:redis-1:image: redis:latestcontainer_name: redis-1ports:- "7001:6379"  # 暴露端口7001,内部端口6379- "17001:16379"volumes:- ./redis-1.conf:/usr/local/etc/redis/redis.conf  # 挂载自定义配置command: redis-server /usr/local/etc/redis/redis.confnetworks:- redis-netrestart: alwaysredis-2:image: redis:latestcontainer_name: redis-2ports:- "7002:6379"  # 暴露端口7002,内部端口6379- "17002:16379"volumes:- ./redis-2.conf:/usr/local/etc/redis/redis.confcommand: redis-server /usr/local/etc/redis/redis.confnetworks:- redis-netrestart: alwaysredis-3:image: redis:latestcontainer_name: redis-3ports:- "7003:6379"  # 暴露端口7003,内部端口6379- "17003:16379"volumes:- ./redis-3.conf:/usr/local/etc/redis/redis.confcommand: redis-server /usr/local/etc/redis/redis.confnetworks:- redis-netrestart: alwaysredis-4:image: redis:latestcontainer_name: redis-4ports:- "7101:6379"  # 暴露端口7003,内部端口6379- "17101:16379"volumes:- ./redis-4.conf:/usr/local/etc/redis/redis.confcommand: redis-server /usr/local/etc/redis/redis.confnetworks:- redis-netrestart: alwaysredis-5:image: redis:latestcontainer_name: redis-5ports:- "7102:6379"  # 暴露端口7004,内部端口6379- "17102:16379"volumes:- ./redis-5.conf:/usr/local/etc/redis/redis.confcommand: redis-server /usr/local/etc/redis/redis.confnetworks:- redis-netrestart: alwaysredis-6:image: redis:latestcontainer_name: redis-6ports:- "7103:6379"  # 暴露端口7005,内部端口6379- "17103:16379"volumes:- ./redis-6.conf:/usr/local/etc/redis/redis.confcommand: redis-server /usr/local/etc/redis/redis.confnetworks:- redis-netrestart: alwaysnetworks:redis-net:driver: bridge
  • 创建 Redis 服务:在该 docker-compose.yml 文件中,我们定义了 6 个 Redis 实例(redis-1, redis-2, …, redis-6),每个实例都运行一个 Redis 容器,并且映射外部端口(7001-7003,7101~7103)到内部端口 6379。
  • 挂载配置文件:每个 Redis 服务都挂载了自定义的 redis.conf 配置文件。您可以根据需要在该配置文件中设置集群相关的配置(如启用集群、设置密码等)。
  • 设置集群网络:所有 Redis 实例都在 redis-net 网络下运行,这意味着它们可以互相通信。
  • 暴露外部接口:通过 ports 配置将 Redis 容器的端口映射到宿主机端口,使外部可以通过宿主机 IP 访问 Redis 服务。
  • 自动重启:容器设置为自动重启,以保证 Redis 服务持续运行。

2、 配置文件

redis-1.conf

# 启用集群模式
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000# 设置 AOF 持久化
appendonly yes# 设置密码
requirepass 123123
masterauth 123123# 关闭保护模式,允许外部访问
protected-mode no# 在集群模式下,指定外部 IP 和端口
cluster-announce-ip 192.168.188.101
cluster-announce-port 7001
cluster-announce-bus-port 17001# 启用连接的最大客户端数
maxclients 10000

redis-2.conf

# 启用集群模式
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000# 设置 AOF 持久化
appendonly yes# 设置密码
requirepass 123123
masterauth 123123# 关闭保护模式,允许外部访问
protected-mode no# 在集群模式下,指定外部 IP 和端口
cluster-announce-ip 192.168.188.101
cluster-announce-port 7002
cluster-announce-bus-port 17002# 启用连接的最大客户端数
maxclients 10000

redis-3.conf

# 启用集群模式
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000# 设置 AOF 持久化
appendonly yes# 设置密码
requirepass 123123
masterauth 123123# 关闭保护模式,允许外部访问
protected-mode no# 在集群模式下,指定外部 IP 和端口
cluster-announce-ip 192.168.188.101
cluster-announce-port 7003
cluster-announce-bus-port 17003# 启用连接的最大客户端数
maxclients 10000

redis-4.conf

# 启用集群模式
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000# 设置 AOF 持久化
appendonly yes# 设置密码
requirepass 123123
masterauth 123123# 关闭保护模式,允许外部访问
protected-mode no# 在集群模式下,指定外部 IP 和端口
cluster-announce-ip 192.168.188.101
cluster-announce-port 7101
cluster-announce-bus-port 17101# 启用连接的最大客户端数
maxclients 10000

redis-5.conf

# 启用集群模式
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000# 设置 AOF 持久化
appendonly yes# 设置密码
requirepass 123123
masterauth 123123# 关闭保护模式,允许外部访问
protected-mode no# 在集群模式下,指定外部 IP 和端口
cluster-announce-ip 192.168.188.101
cluster-announce-port 7102
cluster-announce-bus-port 17102# 启用连接的最大客户端数
maxclients 10000

redis-6.conf

# 启用集群模式
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000# 设置 AOF 持久化
appendonly yes# 设置密码
requirepass 123123
masterauth 123123# 关闭保护模式,允许外部访问
protected-mode no# 在集群模式下,指定外部 IP 和端口
cluster-announce-ip 192.168.188.101
cluster-announce-port 7103
cluster-announce-bus-port 17103# 启用连接的最大客户端数
maxclients 10000

3、 启动集群

docker-compose up -d

4、创建 Redis 集群

启动容器后,您可以通过以下命令连接到容器并创建 Redis 集群:

[root@localhost redis-cluster]# docker exec -it redis-1 redis-cli  -a 123123 --cluster create   192.168.188.101:7001 192.168.188.101:7002 192.168.188.101:7003   192.168.188.101:7101 192.168.188.101:7102 192.168.188.101:7103   --cluster-replicas 1

此命令将会创建一个有 3 个主节点和 3 个副本节点的 Redis 集群。

\Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.188.101:7102 to 192.168.188.101:7001
Adding replica 192.168.188.101:7103 to 192.168.188.101:7002
Adding replica 192.168.188.101:7101 to 192.168.188.101:7003
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 84147aee87f743a6af916d0003ee35ae2555f662 192.168.188.101:7001slots:[0-5460] (5461 slots) master
M: e62aafbdf2bca9d616d0ae9513023d4843d5713c 192.168.188.101:7002slots:[5461-10922] (5462 slots) master
M: f28d1338ab896db913b6154bbef95119b86fc25c 192.168.188.101:7003slots:[10923-16383] (5461 slots) master
S: 7d59a668d0f37d29de8ef1975939737a52363cbb 192.168.188.101:7101replicates f28d1338ab896db913b6154bbef95119b86fc25c
S: 37bde0f815fd4742ec9e7ed70ea36023734af0ff 192.168.188.101:7102replicates 84147aee87f743a6af916d0003ee35ae2555f662
S: 10fe40aff0430597c2157367e53ef0e4dbf09077 192.168.188.101:7103replicates e62aafbdf2bca9d616d0ae9513023d4843d5713c
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.
>>> Performing Cluster Check (using node 192.168.188.101:7001)
M: 84147aee87f743a6af916d0003ee35ae2555f662 192.168.188.101:7001slots:[0-5460] (5461 slots) master1 additional replica(s)
M: f28d1338ab896db913b6154bbef95119b86fc25c 192.168.188.101:7003slots:[10923-16383] (5461 slots) master1 additional replica(s)
S: 7d59a668d0f37d29de8ef1975939737a52363cbb 192.168.188.101:7101slots: (0 slots) slavereplicates f28d1338ab896db913b6154bbef95119b86fc25c
S: 37bde0f815fd4742ec9e7ed70ea36023734af0ff 192.168.188.101:7102slots: (0 slots) slavereplicates 84147aee87f743a6af916d0003ee35ae2555f662
S: 10fe40aff0430597c2157367e53ef0e4dbf09077 192.168.188.101:7103slots: (0 slots) slavereplicates e62aafbdf2bca9d616d0ae9513023d4843d5713c
M: e62aafbdf2bca9d616d0ae9513023d4843d5713c 192.168.188.101:7002slots:[5461-10922] (5462 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

输入命令后,输入yes,将执行对应集群创建,看到上面的日志输出说明集群已经搭建完成。

5、验证集群状态

创建集群后,您可以使用以下命令验证集群状态:


docker exec -it redis-1 redis-cli -a 123123 cluster info

如果集群设置成功,应该会看到集群的状态信息。

6、使用外部程序来验证链接

package mainimport ("context""flag""fmt""github.com/redis/go-redis/v9""log""strings"
)func main() {// 定义命令行参数var clusterAddrs stringvar password string// 使用 flag 包解析命令行参数flag.StringVar(&clusterAddrs, "addrs", "192.168.188.101:7001,192.168.188.101:7002,192.168.188.101:7003,192.168.188.101:7101,192.168.188.101:7102,192.168.188.101:7103", "Redis 集群地址")flag.StringVar(&password, "password", "123123", "Redis 集群密码")flag.Parse()// 将集群地址字符串转换为切片addrs := strings.Split(clusterAddrs, ",")// 创建 Redis 集群客户端配置rdb := redis.NewClusterClient(&redis.ClusterOptions{Addrs:    addrs,    // 从命令行参数获取的 Redis 集群地址Password: password, // 从命令行参数获取密码})// 确保 Redis 连接成功ctx := context.Background()err := rdb.Ping(ctx).Err()if err != nil {log.Fatalf("连接到 Redis 失败: %v", err)}fmt.Println("成功连接到 Redis 集群")// 设置一个键值对err = rdb.Set(ctx, "example_key", "Hello Redis", 0).Err()if err != nil {log.Fatalf("设置键值对失败: %v", err)}fmt.Println("成功设置键值对")// 获取一个键的值val, err := rdb.Get(ctx, "example_key").Result()if err != nil {log.Fatalf("获取键值对失败: %v", err)}fmt.Printf("获取到的键值对: %v\n", val)
}

运行main函数
输出:

成功连接到 Redis 集群
成功设置键值对
获取到的键值对: Hello Redis

7、小结

使用 Docker Compose 配置 Redis 集群并暴露外部接口是一个高效的方式。通过 docker-compose.yml 文件,我们定义了多个 Redis 实例并暴露了外部接口,便于从外部进行访问和管理。确保每个 Redis 实例的配置文件正确,特别是集群相关的配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/63510.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis面试专题-持久化

目录 前言 持久化相关知识 1.三种持久化机制 2.RDB持久化 3.深入剖析一下RDB持久化过程 4.AOF持久化 5.RDB和AOF对比​编辑 面试题 1.redis持久化机制有哪些? 2.那仔细讲讲你对他们的理解 3.你刚刚说AOF的文件很大,那AOF文件会越来越大&#xf…

数据结构之初始二叉树(1)

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏:数据结构(Java版) 目录 树型结构 树的概念 与树的有关概念 树的表示形式 树的应用 二叉树 概念 两种特殊的…

LeetCode139. 单词拆分(2024冬季每日一题 29)

给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 示例 1: 输入: s “leetcode”, wordDic…

酷柚易汛生产管理系统PHP+Uniapp

生产管理系统,帮助企业数字化转型,打造智能工厂,专业为生产企业量身开发的一套完整的生产管理系统。主要包含以下模块:购货模块、生产模块、仓库模块、资料模块,可配合酷柚易汛进销存无缝衔接使用。 产品理念: 共享功…

从零开始学TiDB(2)深入了解TiDB Server模块

TiDB Server 架构 TiDB Server 的主要功能: 一条SQL的执行流程: 1.将整个SQL语句解析成一个个的token,生成一个树形结构。 2.编译模块 1.首先需要做一个合法性验证,比如表存不存在等。 2.做逻辑优化:依据关系型代数等…

贪心算法专题(四)

目录 1. 单调递增的数字 1.1 算法原理 1.2 算法代码 2. 坏了的计算器 2.1 算法原理 2.2 算法代码 3. 合并区间 3.1 算法原理 3.2 算法代码 4. 无重叠区间 4.1 算法原理 4.2 算法代码 5. 用最少数量的箭引爆气球 5.1 算法原理 ​5.2 算法代码 1. 单调递增的数字…

241207-通过Docker部署Wiki.JS并设置ElasticSearch进行中文搜索

A. 最终效果 B. 配置文件 version: "3" services:wiki:image: ghcr.io/requarks/wiki:2container_name: wikijsports:- "3000:3000"volumes:- /home/lgk/Projects/WikiJS/config:/configenvironment:- DB_TYPEpostgres- DB_HOSTdatabase- DB_PORT5432- DB…

Spring Boot如何实现防盗链

一、什么是盗链 盗链是个什么操作,看一下百度给出的解释:盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的…

Splatter Image运行笔记

文章标题:Splatter Image: Ultra-Fast Single-View 3D Reconstruction 1. 环境配置 下载Splatter Image代码 git clone https://github.com/szymanowiczs/splatter-image.git 创建环境 conda create --name splatter-image python3.8 激活环境 conda activat…

springboot394疫情居家办公系统(论文+源码)_kaic

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统疫情居家办公系统信息管理难度大,容错率低&a…

RabbitMQ七种工作模式之 RPC通信模式, 发布确认模式

文章目录 六. RPC(RPC通信模式)客户端服务端 七. Publisher Confirms(发布确认模式)1. Publishing Messages Individually(单独确认)2. Publishing Messages in Batches(批量确认)3. Handling Publisher Confirms Asynchronously(异步确认) 六. RPC(RPC通信模式) 客⼾端发送消息…

模型训练数据-MinerU一款Pdf转Markdown软件

模型训练数据-MinerU一款Pdf转Markdown软件-说明 简介: MinerU是什么 MinerU是上海人工智能实验室OpenDataLab团队推出的开源智能数据提取工具,专注于复杂PDF文档的高效解析与提取。MinerU能将包含图片、公式、表格等元素的多模态PDF文档转化为易于分析…

STM32F103 PWM配置

在《STM32F103定时器配置》中我们介绍了PWM的产生原理,本节介绍介绍如何编码实现PWM的输出。 一、PWM相关寄存器 TIMx如果要产生PWM,除了我们上一节提到的如下寄存器: 控制寄存器(TIMx_CR1);DMA/中断使能寄存器(TIMx_DIER)&#x…

Flink Python作业快速入门

Flink Python快速入门_实时计算 Flink版(Flink)-阿里云帮助中心 import argparse # 用于处理命令行参数和选项,使程序能够接收用户通过命令行传递的参数 import logging import sysfrom pyflink.common import WatermarkStrategy, Encoder, Types from pyflink.data…

三菱CNC数采超详细,资料全备教程,后续更新发那科数采教程

三菱数采详细教程 文章目录 三菱数采详细教程一、介绍1.背景2.需要掌握知识3.需要资料①三菱SDK包:A2②三菱com接口文档③C#代码:④VStudio⑤资料存放网盘 二、程序运行1.调试设备①条件②命令 2.运行软件①打开软件②运行程序 三、数据采集1.代码了解2.…

Atcoder ABC382

C 在回转寿司店里面有n个标为 A i A_i Ai​人和m个标为 B j B_j Bj​寿司。 每个寿司依次从1 2 3 … n人面前经过,当 B j ≥ A i B_j \geq A_i Bj​≥Ai​时i人就拿走寿司。 问:每个寿司被谁吃了? 对寿司进行排序,依次从1 2 3 ……

常见限流算法详细解析

常见限流算法详细解析 分布式系统中,由于接口API无法控制上游调用方的行为,因此当瞬时请求量突增时,会导致服务器占用过多资源,发生响应速度降低、超时、乃至宕机,甚至引发雪崩造成整个系统不可用。 限流,…

图片上传HTML

alioss sky:jwt:# 设置jwt签名加密时使用的秘钥admin-secret-key: itcast# 设置jwt过期时间admin-ttl: 7200000# 设置前端传递过来的令牌名称admin-token-name: tokenalioss:endpoint: ${sky.alioss.endpoint}access-key-id: ${sky.alioss.access-key-id}access-key-secret: $…

C# 抽奖程序winform示例

C# 抽奖程序winform示例 using System; using System.Collections.Generic; using System.Linq;public class LotterySimulator {private Random random new Random();public List<string> GenerateWinners(int numberOfWinners, int totalParticipants){List<strin…

java+ssm+mysql高校学籍管理系统

项目介绍&#xff1a; 使用javassmmysql开发的高校学籍管理系统&#xff0c;系统包含超级管理员&#xff0c;系统管理员、教师、学生角色&#xff0c;功能如下&#xff1a; 超级管理员&#xff1a;管理员管理&#xff08;可以新增管理员&#xff09;&#xff1b;专业管理&…