赞
踩
docker pull mongo:4.0.0
## 为MongoDB集群创建独立的docker网桥
docker network create --subnet=10.1.1.0/24 mongodbnet
## 查看网络信息
docker network ls
docker network inspect 9d4910fdcf5a
路径:/mongos/mongos.conf
说明:
mongos不需要存储因此去掉storage字段;
可任意配置net.port字段,需要指定processManagement.fork为true以–fork方式启动;
sharding.configDB字段用于指定Config-Server集群地址,格式为[replSetName]/[config-server1:port],[config-server2:port],[config-server3:port]…
- systemLog:
- destination: file
- logAppend: true
- path: /var/log/mongodb/mongos.log
- net:
- port: 27020
- bindIp: 127.0.0.1
- processManagement:
- fork: true
- timeZoneInfo: /usr/share/zoneinfo
- sharding:
- configDB: cfg/10.1.1.2:27019,10.1.1.3:27019,10.1.1.4:27019
路径:/configsvr/mongod.conf
说明:MongoDB v3.4 之后要求Config-Server也需要组成副本集形式
- storage:
- dbPath: /data/db
- journal:
- enabled: true
- systemLog:
- destination: file
- logAppend: true
- path: /var/log/mongodb/mongod.log
- net:
- bindIp: 127.0.0.1
- processManagement:
- timeZoneInfo: /usr/share/zoneinfo
- replication:
- replSetName: cfg
- sharding:
- clusterRole: configsvr
路径:E:\hj-usingtools\mongoClusterConfig\shared1/mongod.conf
说明:此处配置3个分片为shard1,shard2,shard3;每个分片都需要组成副本集。
shard2,shard3目录下配置文件同名,修改replSetName字段的值分别为’shard2’和’shard3’
- storage:
- dbPath: /data/db
- journal:
- enabled: true
- systemLog:
- destination: file
- logAppend: true
- path: /var/log/mongodb/mongod.log
- net:
- bindIp: 127.0.0.1
- processManagement:
- timeZoneInfo: /usr/share/zoneinfo
- replication:
- replSetName: shard1
- sharding:
- clusterRole: shardsvr
- docker run -d --name=cfg_1 --network=mongodbnet --ip=10.1.1.2 -v E:\hj-usingtools\mongoClusterConfig\configsvr:/etc/mongodb hj_mongo:1.1 -f /etc/mongodb/mongod.conf
- docker run -d --name=cfg_2 --network=mongodbnet --ip=10.1.1.3 -v E:\hj-usingtools\mongoClusterConfig\configsvr:/etc/mongodb hj_mongo:1.1 -f /etc/mongodb/mongod.conf
- docker run -d --name=cfg_3 --network=mongodbnet --ip=10.1.1.4 -v E:\hj-usingtools\mongoClusterConfig\configsvr:/etc/mongodb hj_mongo:1.1 -f /etc/mongodb/mongod.conf
进入其中一个容器配置Config-Server副本集:
- # 宿主机
- docker exec -it cfg_1 bash
- # 容器中
- mongo --port 27019
- # Mongo Shell中
- rs.initiate({
- "_id":"cfg",
- "members":[
- {
- "_id":0,
- "host":"10.1.1.2:27019"
- },
- {
- "_id":1,
- "host":"10.1.1.3:27019"
- },
- {
- "_id":2,
- "host":"10.1.1.4:27019"
- }
- ]
- })
说明:分片服务器启动后默认是以27018作为端口。
- #启动第一个分片 - shard1
- docker run -d --name=shared1_1 --network=mongodbnet --ip=10.1.1.5 -v E:\hj-usingtools\mongoClusterConfig\shared1:/etc/mongodb hj_mongo:1.1 -f /etc/mongodb/mongod.conf
- docker run -d --name=shared1_2 --network=mongodbnet --ip=10.1.1.6 -v E:\hj-usingtools\mongoClusterConfig\shared1:/etc/mongodb hj_mongo:1.1 -f /etc/mongodb/mongod.conf
- docker run -d --name=shared1_3 --network=mongodbnet --ip=10.1.1.7 -v E:\hj-usingtools\mongoClusterConfig\shared1:/etc/mongodb hj_mongo:1.1 -f /etc/mongodb/mongod.conf
进入其中一个容器配置Shard-Server副本集:
- # 宿主机
- docker exec -it shard1_1 bash
- # 容器中
- mongo --port 27018
- # Mongo Shell中
- rs.initiate({
- "_id":"shard1",
- "members":[
- {
- "_id":0,
- "host":"10.1.1.5:27018"
- },
- {
- "_id":1,
- "host":"10.1.1.6:27018"
- },
- {
- "_id":2,
- "host":"10.1.1.7:27018"
- }
- ]
- })
- # 启动第二个分片 - shard2
- docker run -d --name=shared2_1 --network=mongodbnet --ip=10.1.1.8 -v E:\hj-usingtools\mongoClusterConfig\shared2:/etc/mongodb hj_mongo:1.1 -f /etc/mongodb/mongod.conf
- docker run -d --name=shared2_2 --network=mongodbnet --ip=10.1.1.8 -v E:\hj-usingtools\mongoClusterConfig\shared2:/etc/mongodb hj_mongo:1.1 -f /etc/mongodb/mongod.conf
- docker run -d --name=shared2_3 --network=mongodbnet --ip=10.1.1.10 -v E:\hj-usingtools\mongoClusterConfig\shared2:/etc/mongodb hj_mongo:1.1 -f /etc/mongodb/mongod.conf
-
- # 启动第三个分片 - shard3
- docker run -d --name=shared3_1 --network=mongodbnet --ip=10.1.1.11 -v E:\hj-usingtools\mongoClusterConfig\shared3:/etc/mongodb hj_mongo:1.1 -f /etc/mongodb/mongod.conf
- docker run -d --name=shared3_2 --network=mongodbnet --ip=10.1.1.12 -v E:\hj-usingtools\mongoClusterConfig\shared3:/etc/mongodb hj_mongo:1.1 -f /etc/mongodb/mongod.conf
- docker run -d --name=shared3_3 --network=mongodbnet --ip=10.1.1.13 -v E:\hj-usingtools\mongoClusterConfig\shared3:/etc/mongodb hj_mongo:1.1 -f /etc/mongodb/mongod.conf
分别进入第二个分片、第三个分配的任意一个容器,操作同分片1,配置Shard-Server副本集,注意"_id"的修改
- rs.initiate({
- "_id":"shard2",
- "members":[
- {
- "_id":0,
- "host":"10.1.1.8:27018"
- },
- {
- "_id":1,
- "host":"10.1.1.9:27018"
- },
- {
- "_id":2,
- "host":"10.1.1.10:27018"
- }
- ]
- })
- rs.initiate({
- "_id":"shard3",
- "members":[
- {
- "_id":0,
- "host":"10.1.1.11:27018"
- },
- {
- "_id":1,
- "host":"10.1.1.12:27018"
- },
- {
- "_id":2,
- "host":"10.1.1.13:27018"
- }
- ]
- })
说明:这里也使用了mongo镜像,但是需要开启mongos进程,mongod进程并不需要用到。
- docker run -d --name=mongos_1 --network=mongodbnet --ip=10.1.1.14 -v E:\hj-usingtools\mongoClusterConfig\mongos:/etc/mongodb hj_mongo:1.1
- docker run -d --name=mongos_2 --network=mongodbnet --ip=10.1.1.15 -v E:\hj-usingtools\mongoClusterConfig\mongos:/etc/mongodb hj_mongo:1.1
- docker run -d --name=mongos_3 --network=mongodbnet --ip=10.1.1.16 -v E:\hj-usingtools\mongoClusterConfig\mongos:/etc/mongodb hj_mongo:1.1
进入每个容器中,启动mongos进程(此处可以改进一下,自动运行mongos进程)
- # 宿主机
- docker exec -it mongos_1 bash
- # 容器中
- mongos -f /etc/mongodb/mongos.conf
可以就在其中一个mongos容器中使用mongo shell连接mongos进程配置分片集群。
- # 连接mongos,端口号与mongos配置文件中设定一致
- mongo -port 27020
- # 将分片加入集群
- sh.addShard("shard1/10.1.1.5:27018,10.1.1.6:27018,10.1.1.7:27018")
- sh.addShard("shard2/10.1.1.8:27018,10.1.1.9:27018,10.1.1.10:27018")
- sh.addShard("shard3/10.1.1.11:27018,10.1.1.12:27018,10.1.1.13:27018")
-
- # 对数据库开启分片功能
- sh.enableSharding("[dbName]")
- # 对数据库中集合开启分片,并指定片键
- sh.shardCollection("[dbName.collectionName]",{[keyName]:1})
- # 插入5百万个简单的文档,耐心等待插入结束
- for(var i=1;i<=5000000;i++){
- db.coll1.insert({
- name:i,
- age:Math.round(Math.random() * 100),
- score1:Math.round(Math.random() * 100),
- score2:Math.round(Math.random() * 100),
- score3:Math.round(Math.random() * 100),
- score4:Math.round(Math.random() * 100),
- score5:Math.round(Math.random() * 100)
- });
- }
-
- # 查看分片状态
- sh.status()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。