首页 > 数据库 > > docker-compose 一键部署MongoDB
首先安装docker和docker-compose,如果不会,请先学习docker把。不然无法一键配置好的东西。
1、创建密文【以后需要增加MongoDB密码访问需要的】
openssl rand -base64 756 > $PWD/mongodbkeyfile
chmod 400 $PWD/mongodbkeyfile
配置说明
分片rs1 别名就是 rs11 rs12 rs13 【内部端口默认是27018】
分片rs2 别名就是 rs21 rs22 rs23 【内部端口默认是27018】
配置cs 别名就是 cs1 cs2 cs3 【内部端口默认是27019】
mongos 别名就是 ms1 【外部访问段端口默认是27017】
结构图
mongos1(27017) shard1(rs1:27018)
---- config services 1 ----
mongos2(27017) shard2(rs2:27018)
---- config services 1 ----
mongosN(27017) shardN(rsN:27018)
---- config services 1(27019 最少3台)
2、废话不说,马上给你docker-compose.yml
version: "3.3"
networks:
mynetword:
driver: bridge
ipam:
config:
- subnet: 172.22.0.0/16
# gateway: 172.19.0.1
services:
rs11:
image: mongo
# ports:
# - "27018:27018"
restart: always
#让容器拥有root权
privileged: true
volumes:
- "$PWD/mongodb/rs11:/data/db"
- "$PWD/mongodbkeyfile:/mongodbkeyfile"
command: /bin/sh -c 'mongod --shardsvr --replSet "rs1" --bind_ip_all --maxConns 20000'
# command: /bin/sh -c 'mongod --shardsvr --replSet "rs1" --bind_ip_all --maxConns 20000 --auth --keyFile /mongodbkeyfile'
networks:
mynetword:
ipv4_address: 172.22.101.111
rs12:
image: mongo
# ports:
# - "27018:27018"
restart: always
#让容器拥有root权
privileged: true
volumes:
- "$PWD/mongodb/rs12:/data/db"
- "$PWD/mongodbkeyfile:/mongodbkeyfile"
command: /bin/sh -c 'mongod --shardsvr --replSet "rs1" --bind_ip_all --maxConns 20000'
# command: /bin/sh -c 'mongod --shardsvr --replSet "rs1" --bind_ip_all --maxConns 20000 --auth --keyFile /mongodbkeyfile'
networks:
mynetword:
ipv4_address: 172.22.101.112
rs13:
image: mongo
# ports:
# - "27018:27018"
restart: always
#让容器拥有root权
privileged: true
volumes:
- "$PWD/mongodb/rs13:/data/db"
- "$PWD/mongodbkeyfile:/mongodbkeyfile"
command: /bin/sh -c 'mongod --shardsvr --replSet "rs1" --bind_ip_all --maxConns 20000'
# command: /bin/sh -c 'mongod --shardsvr --replSet "rs1" --bind_ip_all --maxConns 20000 --auth --keyFile /mongodbkeyfile'
networks:
mynetword:
ipv4_address: 172.22.101.113
rs21:
image: mongo
# ports:
# - "27018:27018"
restart: always
#让容器拥有root权
privileged: true
volumes:
- "$PWD/mongodb/rs21:/data/db"
- "$PWD/mongodbkeyfile:/mongodbkeyfile"
command: /bin/sh -c 'mongod --shardsvr --replSet "rs2" --bind_ip_all --maxConns 20000'
# command: /bin/sh -c 'mongod --shardsvr --replSet "rs2" --bind_ip_all --maxConns 20000 --auth --keyFile /mongodbkeyfile'
networks:
mynetword:
ipv4_address: 172.22.101.121
rs22:
image: mongo
# ports:
# - "27018:27018"
restart: always
#让容器拥有root权
privileged: true
volumes:
- "$PWD/mongodb/rs22:/data/db"
- "$PWD/mongodbkeyfile:/mongodbkeyfile"
command: /bin/sh -c 'mongod --shardsvr --replSet "rs2" --bind_ip_all --maxConns 20000'
# command: /bin/sh -c 'mongod --shardsvr --replSet "rs2" --bind_ip_all --maxConns 20000 --auth --keyFile /mongodbkeyfile'
networks:
mynetword:
ipv4_address: 172.22.101.122
rs23:
image: mongo
# ports:
# - "27018:27018"
restart: always
#让容器拥有root权
privileged: true
volumes:
- "$PWD/mongodb/rs23:/data/db"
- "$PWD/mongodbkeyfile:/mongodbkeyfile"
command: /bin/sh -c 'mongod --shardsvr --replSet "rs2" --bind_ip_all --maxConns 20000'
# command: /bin/sh -c 'mongod --shardsvr --replSet "rs2" --bind_ip_all --maxConns 20000 --auth --keyFile /mongodbkeyfile'
networks:
mynetword:
ipv4_address: 172.22.101.123
cs1:
image: mongo
# ports:
# - "27019:27019"
restart: always
#让容器拥有root权
privileged: true
volumes:
- "$PWD/mongodb/cs1:/data/configdb"
- "$PWD/mongodbkeyfile:/mongodbkeyfile"
command: /bin/sh -c 'mongod --configsvr --replSet "cs" --bind_ip_all --maxConns 20000'
# command: /bin/sh -c 'mongod --configsvr --replSet "cs" --bind_ip_all --maxConns 20000 --auth --keyFile /mongodbkeyfile'
networks:
mynetword:
ipv4_address: 172.22.101.51
cs2:
image: mongo
# ports:
# - "27019:27019"
restart: always
#让容器拥有root权
privileged: true
volumes:
- "$PWD/mongodb/cs2:/data/configdb"
- "$PWD/mongodbkeyfile:/mongodbkeyfile"
command: /bin/sh -c 'mongod --configsvr --replSet "cs" --bind_ip_all --maxConns 20000'
# command: /bin/sh -c 'mongod --configsvr --replSet "cs" --bind_ip_all --maxConns 20000 --auth --keyFile /mongodbkeyfile'
networks:
mynetword:
ipv4_address: 172.22.101.52
cs3:
image: mongo
# ports:
# - "27019:27019"
restart: always
#让容器拥有root权
privileged: true
volumes:
- "$PWD/mongodb/cs3:/data/configdb"
- "$PWD/mongodbkeyfile:/mongodbkeyfile"
command: /bin/sh -c 'mongod --configsvr --replSet "cs" --bind_ip_all --maxConns 20000'
# command: /bin/sh -c 'mongod --configsvr --replSet "cs" --bind_ip_all --maxConns 20000 --auth --keyFile /mongodbkeyfile'
networks:
mynetword:
ipv4_address: 172.22.101.53
ms1:
image: mongo
ports:
- "27017:27017"
restart: always
#让容器拥有root权
privileged: true
volumes:
- "$PWD/mongodbkeyfile:/mongodbkeyfile"
command: /bin/sh -c 'mongos --configdb cs/cs1:27019,cs2:27019,cs3:27019 --bind_ip_all --maxConns 20000'
# command: /bin/sh -c 'mongos --configdb cs/cs1:27019,cs2:27019,cs3:27019 --bind_ip_all --maxConns 20000 --keyFile /mongodbkeyfile'
networks:
mynetword:
ipv4_address: 172.22.101.1
然后运行docker-compose up -d
恭喜你,已经准备好rs1,rs2,cs ,与mongod 不过还没配置,需要一一配置才可以
1、配置分片 rs1 rs2
docker-compose exec rs11 bash
mongo --host rs11 --port 27018
rs.initiate(
{
_id : "rs1",
members: [
{ _id : 0, host : "rs11:27018" },
{ _id : 1, host : "rs12:27018" },
{ _id : 2, host : "rs13:27018" }
]
}
);
exit
mongo --host rs21 --port 27018
rs.initiate(
{
_id : "rs2",
members: [
{ _id : 0, host : "rs21:27018" },
{ _id : 1, host : "rs22:27018" },
{ _id : 2, host : "rs23:27018" }
]
}
);
exit2、配置config services
docker-compose exec cs1 bash
mongo --host cs1 --port 27019
rs.initiate(
{
_id: "cs",
configsvr: true,
members: [
{ _id : 0, host : "cs1:27019" },
{ _id : 1, host : "cs2:27019" },
{ _id : 2, host : "cs3:27019" }
]
}
);
exit3、配置mongos
docker-compose exec ms1 bash
mongo --host ms1
# 增加分片 已添加以后不用配置了,直接增加mongos就可以
sh.addShard("rs1/rs11:27018,rs12:27018,rs13:27018")
sh.addShard("rs2/rs21:27018,rs22:27018,rs23:27018")
# 此库启用分片 已添加以后不用配置了,直接增加mongos就可以
sh.enableSharding("test")
#mytable 表 哈希分片设置 已添加以后不用配置了,直接增加mongos就可以
sh.shardCollection("test.mytable", {"_id": "hashed" })
use test
for (i = 1; i <= 10; i=i+1){db.mytable.insert({'price': 1})}
db.mytable.find().count()
exit
恭喜你,已经配置好rs1,rs2,cs ,与mongod 不过还没配置,需要一一配置才可以
无密码者,到这里结束了。恭喜恭喜
需要增加密码者。这里继续折腾
配置密码
还记得第一步的 创建密文?这步是必须创建的。创建完毕就配置如下
docker-compose exec ms1 bash
mongo --host ms1
use admin
db.createUser({user:"root",pwd:"pass",roles:[{role:"root", db:"admin"}]});
exit
# rs1:PRIMARY> 修改 分片 密码
mongo -host rs11 -port 27018
use admin
db.createUser({user:"root",pwd:"123",roles:[{role:"root", db:"admin"}]});
exit
# rs2:PRIMARY> 修改 分片 密码
mongo -host rs21 -port 27018
use admin
db.createUser({user:"root",pwd:"123",roles:[{role:"root", db:"admin"}]});
exit
配置 docker-compose.yml
分片与配置 bin/sh -c 增加 --auth --keyFile /mongodbkeyfile
mongos bin/sh -c 增加 --keyFile /mongodbkeyfile
重启即可
docker-compose restart
如果配置不成功,第一时间看下是否进入分片里面的主区PRIMARY 分片。如果是分区SECONDARY 是不能创建密码的。
到这里完成了,肯定会有坑,爬一下吧。应该能爬出来
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3140097/ ,如需转载,请注明出处,否则将追究法律责任。