AWS EC2 docker-compose部署MongoDB4.2

这篇具有很好参考价值的文章主要介绍了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.2
    container_name: mongo1
    restart: always
    ports:
      - 27017:27017
    environment:
      - MONGO_INITDB_ROOT_USERNAME=admin
      - MONGO_INITDB_ROOT_PASSWORD=${PASSWD}
    command: mongod --replSet ${CLUSTER_NAME} --keyFile /mongodb.key
    volumes:
      - /etc/localtime:/etc/localtime
      - /data/mongodb/mongo1/data:/data/db
      - /data/mongodb/mongo1/configdb:/data/configdb
      - /data/mongodb/mongo1/mongodb.key:/mongodb.key
    networks:
      - mongoNet
    entrypoint:
      - bash
      - -c
      - |
        chmod 400 /mongodb.key
        chown 999:999 /mongodb.key
        exec docker-entrypoint.sh $$@
  # 副节点
  mongodb2:
    image: mongo:4.2
    container_name: mongo2
    restart: always
    ports:
      - 27018:27017
    environment:
      - MONGO_INITDB_ROOT_USERNAME=admin
      - MONGO_INITDB_ROOT_PASSWORD=${PASSWD}
    command: mongod --replSet ${CLUSTER_NAME} --keyFile /mongodb.key
    volumes:
      - /etc/localtime:/etc/localtime
      - /data/mongodb/mongo2/data:/data/db
      - /data/mongodb/mongo2/configdb:/data/configdb
      - /data/mongodb/mongo2/mongodb.key:/mongodb.key
    networks:
      - mongoNet
    entrypoint:
      - bash
      - -c
      - |
        chmod 400 /mongodb.key
        chown 999:999 /mongodb.key
        exec docker-entrypoint.sh $$@
  # 副节点
  mongodb3:
    image: mongo:4.2
    container_name: mongo3
    restart: always
    ports:
      - 27019:27017
    environment:
      - MONGO_INITDB_ROOT_USERNAME=admin
      - MONGO_INITDB_ROOT_PASSWORD=${PASSWD}
    command: mongod --replSet ${CLUSTER_NAME} --keyFile /mongodb.key
    volumes:
      - /etc/localtime:/etc/localtime
      - /data/mongodb/mongo3/data:/data/db
      - /data/mongodb/mongo3/configdb:/data/configdb
      - /data/mongodb/mongo3/mongodb.key:/mongodb.key
    networks:
      - mongoNet
    entrypoint:
      - bash
      - -c
      - |
        chmod 400 /mongodb.key
        chown 999:999 /mongodb.key
        exec 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 主机则无法访问文章来源地址https://www.toymoban.com/news/detail-665587.html

# 注意_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)

到了这里,关于AWS EC2 docker-compose部署MongoDB4.2的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AWS EC2实例管理

    针对近期学习的AWS EC2实例进行知识归纳与总结,欢迎家人们指正错误!ψ(`∇´)ψ AWS:亚马逊网络服务平台(亚马逊云服务平台)(Amazon Web Service) 英文全称:Amazon Elastic Compute Cloud 中文全称:亚马逊弹性计算云,又名“实例(instance)” 通俗理解:实例是 AWS 云中的 虚拟服

    2024年02月04日
    浏览(52)
  • 【aws】| 04 | AWS EC2 实例磁盘空间扩容

    进入控制台,选择 EBS - Volumes -Action - Modify Volume 首先使用lsblk可以查看附加到实例上的所有存储卷的真实size以及分区情况 注: 挂载在根目录上的是EBS存储卷上的分区而不是这个卷,而且卷被扩容但是分区大小不变依旧不能扩容。 xvda是一个存储卷,xvda1是存储卷上的一个分区

    2024年02月11日
    浏览(69)
  • AWS CDK安装到AWS EC2 Linux 2

    AWS CDK安装到AWS EC2 Linux 2,并记录过程。 以上报·epel·提供的·libuv·版本过低,关闭·epel·的·YUM·源, 以上报没找到GLIBC库,卸载版本20.10.0,安装版本16.0.0: 碰到了没有找到Python3的问题, 由于我使用的是Python3.8,需要创建一个软链接: aws-cdk-lib 2.116.0 AWS: Getting started with th

    2024年02月03日
    浏览(76)
  • 设置 AWS EC2 允许使用密码登录

    AWS 的服务器默认是使用秘钥进行登录,如果想要使用密码进行登录,可进行如下设置 1、先使用秘钥登录(安装aws网站上的教程即可) 2、登录之后为 root 创建密码 系统会让你输入两次密码,一定要注意了。 3、切换为root用户 4、编辑 sshd_config 并做修改 将  PasswordAuthenticati

    2024年02月11日
    浏览(94)
  • AWS EC2的SSM配置(AWS云中的跳板机)

    开发人员需要访问AWS云中私有子网的数据库服务等,都需要通过EC2进行SSH隧道代理。这里假设本地已经有一款稳定优秀的SSH客户端工具,并且假设已经会熟练使用SSH的隧道代理。 搜索找到EC2服务,如下图: 点击“启动实例”,开始EC2实例创建,如下图: 填入名称后,选择默

    2024年02月02日
    浏览(40)
  • Prometheus 自动发现监控AWS EC2实例

    本文章简述对接自动发现AWS云EC2实例 前提环境: Promethues Grafana AWS IAM权限 涉及参考文档: AWS EC2 Grafana 通用监控模板 一、IAM 用户创建 1、创建Prometheus 策略 策略规则: 2、创建用户赋予Prometheus 策略 创建过程成,请下载ak、sk 此过程不演示。 二、配置Prometheus 可参考本文章进

    2024年02月04日
    浏览(74)
  • AWS EC2 服务启动显示磁盘挂载异常

    首先启动异常,在AWS网站中,肯定能定位到错误日志,找到实例,然后点击操作,找到监控和故障排除,然后找到日志,我这里日志问题如下: [0m] A start job is running for dev-xvdf.device (1min 29s / 1min 30s) [0m] A start job is running for dev-xvdf.device (1min 30s / 1min 30s) [0m] Timed out waiting for dev

    2024年02月13日
    浏览(46)
  • AWS——01篇(AWS入门 以及 AWS之EC2实例及简单实用)

    什么是AWS? 好,我就截这么多,更多的自己搜搜看…… 官网地址如下: https://aws.amazon.com/cn/. 注册时,如果有谷歌邮箱,最好使用谷歌邮箱,如下: 按照提示注册成功之后,登录即可使用 随便点点,貌似看到了点东西 继续…… 3.1.1 入口 如下: 3.1.2 设置名称 + 选择服务 如

    2024年02月14日
    浏览(57)
  • 【AWS】如何用SSH连接aws上的EC2实例(虚拟机)?

    目录 0.环境 1.连接结果示例 2.SSH连接思路 3.具体步骤 1)安装并运行ssh服务 2)启动ssh服务 3)在AWS上找到正在运行的EC2实例,并且根据提供的ssh连接语句进行连接 windows 11 64位 前提: 有aws账户(IAM),已经存在一个EC2实例(虚拟机) 首先,需要有AWS账户以及正在运行的EC2实

    2024年02月10日
    浏览(39)
  • AWS EC2手动/自动切换Elastic IP

    一,手动切换 Elastic IP  1,进入ec2控制台,选中实例然后操作-联网-管理IP地址  2进入分配 Elastic IP页面,点击分配 3,分配 Elastic IP 4,配置 Elastic IP   5,关联ip地址 二,自动脚本更换实例ip地址 1,进入服务器设置aws configure,先到iam界面生成一个Access keys,然后到实例中配置Access keys  

    2024年02月11日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包