当前位置: 首页 > news >正文

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.lryc.cn/news/142414.html

相关文章:

  • IDEA常用插件之类Jar包搜索Maven Search
  • 使用proxman对iOS真机进行抓包
  • sdk manager (ubuntu20.4) 安装
  • Oracle修改字符集为SIMPLIFIED CHINESE_CHINA.ZHS16GBK
  • 函数的参数传递和返回值-PHP8知识详解
  • 【Redis】 Redis短连接的性能优化
  • 无涯教程-分类算法 - 逻辑回归
  • URL中传递JSON字符串
  • Python Opencv实践 - Sobel边缘检测
  • IDEA快速设置Services窗口
  • 【CSS】CSS 背景设置 ( 背景半透明设置 )
  • 基于android的学生公寓后勤系统/学生公寓管理系统APP
  • 跳跃游戏 II
  • GPT教我学Vue-Router
  • Tokenview再度升级:全新Web3开发者APIs数据服务体验!
  • 什么是原型链(Prototype Chain)?它在JavaScript中有什么作用?请解释一下JavaScript中的“this”关键字的含义和用法。
  • JS-this知识点、面试题
  • 【C++入门到精通】C++入门 —— 多态(抽象类和虚函数的魅力)
  • 基于springboot学生社团管理系统/基于Java的高校社团管理系统的设计与实现
  • 【C++】C++ 引用详解 ⑦ ( 指针的引用 )
  • ubuntu安装goland
  • 海康摄像头通过SDK接入到LiveNVR实现双向语音喊话对讲与网页无插件播放,并支持GB28181级联语音对讲...
  • 解锁开发中的创意:用户为中心的设计思维的力量
  • python+mysql+前后端分离国内职位数据分析(源码+文档+指导)
  • uniapp封装ajax请求
  • 电路原理分析2:应急照明灯电路
  • 构造函数内的方法 直接写在构造函数内部 与 写在prototype上 的区别
  • 系统架构主题之七:基于架构的软件设计方法及应用
  • Python-if __name__ == ‘__main__‘和collections.Mapping的用法
  • Linux 基金会宣布正式进驻中国