AWS EC2 docker-compose部署MongoDB4.2

环境准备

安装docker

参考EC2官方文档:创建容器镜像以在 Amazon ECS 上使用 - Amazon Elastic Container Service

sudo yum update -y
sudo amazon-linux-extras install docker
sudo usermod -a -G docker ec2-user
sudo systemctl enable docker
sudo systemctl start docker
sudo systemctl status docker

安装docker-compose

https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/bin/docker-compose
chmod +x /usr/bin/docker-compose

1. 生成 keyFile

  • MongoDB使用keyfile认证,副本集中的每个mongod实例使用keyfile内容作为认证其他成员的共享密码。mongod实例只有拥有正确的keyfile才可以加入副本集。
  • keyFile的内容必须是6到1024个字符的长度,且副本集所有成员的keyFile内容必须相同。
  • 有一点要注意是的:在UNIX系统中,keyFile必须没有组权限或完全权限(也就是权限要设置成X00的形式)。Windows系统中,keyFile权限没有被检查。
  • 可以使用任意方法生成keyFile。例如,如下操作使用openssl生成复杂的随机的1024个字符串。然后使用chmod修改文件权限,只给文件拥有者提供读权限。这是MongoDB官方推荐keyFile的生成方式
  • ## 400权限是要保证安全性,否则mongod启动会报错
    openssl rand -base64 756 > mongodb.key
    chmod 400 mongodb.key

2. docker-compose.yaml文件内容

version: "3"services:#主节点mongodb1:image: mongo:4.2container_name: mongo1restart: alwaysports:- 27017:27017environment:- MONGO_INITDB_ROOT_USERNAME=admin- MONGO_INITDB_ROOT_PASSWORD=${PASSWD}command: mongod --replSet ${CLUSTER_NAME} --keyFile /mongodb.keyvolumes:- /etc/localtime:/etc/localtime- /data/mongodb/mongo1/data:/data/db- /data/mongodb/mongo1/configdb:/data/configdb- /data/mongodb/mongo1/mongodb.key:/mongodb.keynetworks:- mongoNetentrypoint:- bash- -c- |chmod 400 /mongodb.keychown 999:999 /mongodb.keyexec docker-entrypoint.sh $$@# 副节点mongodb2:image: mongo:4.2container_name: mongo2restart: alwaysports:- 27018:27017environment:- MONGO_INITDB_ROOT_USERNAME=admin- MONGO_INITDB_ROOT_PASSWORD=${PASSWD}command: mongod --replSet ${CLUSTER_NAME} --keyFile /mongodb.keyvolumes:- /etc/localtime:/etc/localtime- /data/mongodb/mongo2/data:/data/db- /data/mongodb/mongo2/configdb:/data/configdb- /data/mongodb/mongo2/mongodb.key:/mongodb.keynetworks:- mongoNetentrypoint:- bash- -c- |chmod 400 /mongodb.keychown 999:999 /mongodb.keyexec docker-entrypoint.sh $$@# 副节点mongodb3:image: mongo:4.2container_name: mongo3restart: alwaysports:- 27019:27017environment:- MONGO_INITDB_ROOT_USERNAME=admin- MONGO_INITDB_ROOT_PASSWORD=${PASSWD}command: mongod --replSet ${CLUSTER_NAME} --keyFile /mongodb.keyvolumes:- /etc/localtime:/etc/localtime- /data/mongodb/mongo3/data:/data/db- /data/mongodb/mongo3/configdb:/data/configdb- /data/mongodb/mongo3/mongodb.key:/mongodb.keynetworks:- mongoNetentrypoint:- bash- -c- |chmod 400 /mongodb.keychown 999:999 /mongodb.keyexec docker-entrypoint.sh $$@
networks:mongoNet:driver: bridge

3.部署3副本集群

mkdir /data/mongodb/mongo{1,2,3}/{data,configdb} -pv## 提供redis.conf配置
cp mongodb.key /data/mongodb/mongo1/
cp mongodb.key /data/mongodb/mongo2/
cp mongodb.key /data/mongodb/mongo3/
cp -pr docker-compose.yaml  /data/mongodb/cd /data/mongodb/
docker-compose up -d

4.配置集群

# 选择第一个容器mongo1,进入mongo 容器
docker exec -it mongo1 bash# 登录mongo
mongo -u admin -p ${PASSWD}# 认证
> use admin
> db.auth('admin', '${PASSWD}')

5.使用配置文件初始化集群

单主机模式部署 3副本集 添加节点必须使用宿主机IP+PORT,
使用容器内部IP的情况下代码层面连接到 mongodb-cluster 集群,
获取到的集群地址信息为 docker 容器内部 IP
若业务代码没有部署在 mongodb 主机则无法访问

# 注意_id 后面的${CLUSTER_NAME} 应该与docker-compose中 command 指定的集群名称一致
config={_id:"${CLUSTER_NAME}",members:[ 
{_id:0,host:"10.205.145.86:27017"}, 
{_id:1,host:"10.205.145.86:27018"}, 
{_id:2,host:"10.205.145.86:27019"}] 
}#初始化配置
rs.initiate(config)

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

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

相关文章

算法通关村第十五关——从10亿数字中寻找最小的100万个数字

题目要求:设计一个算法,给定一个10亿个数字,找出最小的100万的数字。假定计算机内存足以容纳全部10亿个数字。 本题有三种常用的方法,一种是先排序所有元素,然后取出前100万个数,该方法的时间复杂度为O(nl…

数学建模(四)整数规划—匈牙利算法

目录 一、0-1型整数规划问题 1.1 案例 1.2 指派问题的标准形式 2.2 非标准形式的指派问题 二、指派问题的匈牙利解法 2.1 匈牙利解法的一般步骤 2.2 匈牙利解法的实例 2.3 代码实现 一、0-1型整数规划问题 1.1 案例 投资问题: 有600万元投资5个项目&…

mac 10.13.6安装后开发准备工作

git下载安装 xcode旧版安装搜索 brew国内源安装 brew国内源安装地址2 brew更换源 SwitchHosts github hosts nfts磁盘读写工具 更新ssl证书 证书下载 然后备份一下系统原来的pem文件 cp /etc/ssl/cert.pem /etc/ssl/cert.bak.pem 之后将新下载的pem文件,拷贝到/etc…

【笔记】经典Integer对象赋值128问题

Integer经典面试问题:两个Integer对象都赋值为128,这两个对象比较是否相同?为什么? 回答这个问题,首先我们要知道,在Java中,当你写Integer a 1; 实际上是调用了Java的自动装箱功能。这会将整数…

Redis7安装

1. 使用什么系统安装redis 由于企业里面做Redis开发,99%都是Linux版的运用和安装,几乎不会涉及到Windows版,上一步的讲解只是为了知识的完整性,Windows版不作为重点,同学可以下去自己玩,企业实战就认一个版…

几个nlp的小任务(抽取式问答)

几个nlp的小任务(抽取式问答) 安装库抽取式问答介绍、SQuAD数据集初始化参数加载、导入数据集查看数据集示例加载tokenizer对长文本处理的演示对答案的位置进行验证整合刚才的步骤对数据集中的数据进行预处理加载微调模型设置args 参数使用数据清洗设置训练函数,开始训练安装…

从零学算法 (剑指 Offer 13)

地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如&am…

STM32开发 | 移远4G-Cat.1模组EC200N-CN开发

一、硬件说明 1、引脚分配图 文章来源地址https://www.yii666.com/blog/326636.html文章来源地址:https://www.yii666.com/blog/326636.html 2、常用引脚说明 模块输入电源 引脚名描述VBAT_BB模块基带电源(Vnom 3.8 V)VBAT_RF模块射频电源&#xff0…

Linux操作系统--常用指令(帮助命令)

(1).概述 在日常生活中,我们遇到不认识的字怎么办?小学的时候,我们知道我们可以查字典来认识这一个字,那么如果是Linux操作系统中遇到不认识的指令,该怎么办呢?同样,linux提供了帮助命令以便于我们更好的认识这一个指令。下面我们一起来看一下Linux操作系统提供给我们的…

软件测试技术分享丨使用Postman搞定各种接口token实战

现在许多项目都使用jwt来实现用户登录和数据权限,校验过用户的用户名和密码后,会向用户响应一段经过加密的token,在这段token中可能储存了数据权限等,在后期的访问中,需要携带这段token,后台解析这段token才…

设计模式之工厂方法模式

目录 工厂方法模式 简介 优缺点 结构 使用场景 实现 1.抽象产品 2.具体产品 3.抽象工厂 4.具体工厂 5.调用 总结 抽象工厂模式 简介 结构 实现 区别 工厂方法模式 简介 提供一个用于创建对象的接口(工厂接口),让其实现类(工厂实现类)决定实例化哪…

Redis内存策略

文章目录 Redis内存策略过期策略DB结构惰性删除周期删除 淘汰策略 Redis内存策略 Redis是基于内存存储,所以其性能很强。但单节点的Redis内存不宜过大,否则会影响持久化或主从同步性能。 可以手动修改配置文件来设置Redis的最大内存 # 格式&#xff1…

【Unity3D赛车游戏】【五】Unity中汽车加速效果是如何优化的?

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:Uni…

【滑动窗口】leetcode3:无重复字符的最长子串

一.题目描述 无重复字符的最长子串 二.思路分析 题目要求我们找符合要求的最长子串,要求是不能包含重复字符 确定一个子串只需确定它的左右区间即可,于是我们可以两层循环暴力枚举所有的子串,找到符合要求的,并通过比较得到最长…

软件工程(十五) 行为型设计模式(一)

1、责任链模式 简要说明 通过多个对象处理的请求,减少请求的发送者与接收者之间的耦合。将接受对象链接起来,在链中传递请求,直到有一个对象处理这个请求。 速记关键字 传递职责 类图如下 由类图可以比较容易的看出来,其实就是自己关联自己,形成了一个链,并且自己有…

链表的实现

本程序List链表用两种方式实现,一种是双向链表,一种是双向循环链表。循环双向链表和双向链表,它们的编码差别很小;但是循环链表在插入效率上胜出很多,同时查询时候更灵活。综合考虑,循环链表是首选。 另外…

等保测评--安全通信网络--测评方法

安全子类--安全架构 a)应保证网络设备的业务处理能力满足业务高峰期需要; 一、测评对象 路由器、交换机、无线接入设备和防火墙等提供网络通信功能的设备或相关组件 二、测评实施 1) 应核查业务高峰时期一段时间内主要网络设备(一般包括核心交换机、汇聚交换机、边界路…

JavaScript伪协议是什么?

JavaScript伪协议是什么? 伪协议不同于因特网上所真实存在的协议,如http://,https://,ftp://, 而是为关联应用程序而使用的.如:tencent://(关联QQ),data:(用base64编码来在浏览器端输出二进制文件)&#xf…

vue 04-reactive与ref的选择

reactive与re两者区别? reactive可以转换对象成为响应式数据对象,但是不支持简单数据类型 ref可以转换简单数据类型为响应式数据对象,也支持复杂数据类型,但是操作的时候需要.value 推荐使用的话: 如果能确定数据是对象且字段名称也确定,可以使用reactive转成响应式…

❤ leetCode简易2--回文数判断

❤ leetCode简易2–回文数判断 题目要求判断回文数 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的…