环境准备
安装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.使用配置文件初始化集群文章来源:https://www.toymoban.com/news/detail-665587.html
单主机模式部署 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模板网!