本地使用docker-componse搭建mongodb3节点集群【1主2从,自动切换主备,可改为真正的远程物理节点】支持:在另一个docker-componseapp中访问集群支持:在宿主机访问集群事务功能需要集群读写分离,搭建异地容灾mongo集群docker-compose.ymlversion:'3'services:mongo1:hostname:mongo1container_name:localmongo1image:mongorestart:always暴露:-27017端口:-27017:27017命令:'--quiet--bind_ip_all--port27017--replSetrs0'卷:-./db1/mongo:/data/db#environment:#MONGO_INITDB_ROOT_USERNAME:root#MONGO_INITDB_ROOT_PASSWORD:rootnetworks:-default-nginx-proxymongo2:hostname:mongo2container_name:localmongo2image:mongorestart:alwaysexpose:-27018ports:-27018:27018命令:'--quiet--bind_ip_all--port27018--replSetrs0'volumes:-./db2/mongo:/data/db#depends_on:#-mongo1networks:-default-nginx-proxymongo3:hostname:mongo3container_name:localmongo3i法师:mongo重启:始终暴露:-27019端口:-27019:27019命令:'--quiet--bind_ip_all--port27019--replSetrs0'卷:-./db3/mongo:/data/db#depends_on:#-mongo2网络:-默认-nginx-proxyrsinit:build:context:.dockerfile:rsinitdepends_on:-mongo1-mongo2-mongo3entrypoint:["sh","-c","rs.sh"]networks:-default-nginx-proxynetworks:nginx-proxy:外部:truers.sh#!/bin/bashecho"准备rs启动"check_db_status(){mongo1=$(mongo--hostmongo1--port27017--eval"db.stats().ok"|tail-n1|grep-E'(^|\s)1($|\s)')mongo2=$(mongo--hostmongo2--port27018--eval"db.stats().ok"|tail-n1|grep-E'(^|\s)1($|\s)')mongo3=$(mongo--hostmongo3--port27019--eval"db.stats().ok"|tail-n1|grep-E'(^|\s)1($|\s)')如果[[$mongo1==1]]&&[[$mongo2==1]]&&[[$mongo3==1]];然后init_rselsecheck_db_statusfi}init_rs(){ret=$(mongo--hostmongo1--port27017--eval"rs.initiate({_id:'rs0',members:[{_id:0,host:'mongo1:27017'},{_id:1,host:'mongo2:27018'},{_id:2,host:'mongo3:27019'}]})">/dev/null2>&1)}check_db_status>/dev/null2>&1echo"rsinitiatingfinished"exit0rsinitFROMmongoADDrs.sh/usr/local/bin/RUNchmod+x/usr/local/bin/rs.shrundocker-composeup--buildstopdocker-composedown在访问集群的宿主机中,在本地host文件mongodb://mongo1:27017,mongo2:27018中添加解析127.0.0.1mongo1127.0.0.1mongo2127.0.0.1mongo3访问集群的连接地址,mongo3:27019/?replicaSet=rs0可选配置mongodb://mongo1:27017,mongo2:27018,mongo3:27019/?replicaSet=rs0&slaveOk=true&authSource=admin&readPreference=secondaryPreferred&w=majority&ssl=falseMongoDBComposs将显示为3-如果连接成功,其他docker中的节点集群-Componse访问应用程序容器中的集群启用DockerfileFROMnode:12.13.1-alpine3.10MAINTAINERblack#RUNapkadd--no-cachecurl#创建一个特定的用户来运行这个容器#RUNadduser-S-Duser-app#将文件添加到容器#ADD。/app#指定工作目录WORKDIR/appRUNchmod-R777/app#buildprocess#RUNnpminstall#RUNnpmrunbuild#RUNnpmprune--production#使用特定用户运行容器#USERuser-app#EXPOSE8080#runapplication#CMD["npm","start"]docker-compose.ymlversion:'3.7'services:graphql:build:context:./dockerfile:Dockerfile命令:'npmrunstart'#environment:#UV_THREADPOOL_SIZE:128#NODE_APP_INSTANCE:0#NODE_ENV:docker#DB_URL:postgres://root:123@postgres/projectexpose:-4000ports:-"80:4000"volumes:#-./:/usr/src/app/-./:/app/networks:-default-nginx-proxynetworks:nginx-proxy:external:true运行docker-composeup--build停止docker-composedown原文件地址:https://github.com/WangShuXia...
