一台虚拟机配置mongodb集群

一台虚拟机配置mongodb集群

机器环境

uname -a 
Linux ubuntu1 4.4.0-131-generic #157-Ubuntu SMP Thu Jul 12 15:51:36 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

然后准备docker环境

sudo apt-get install docker
docker pull mongo:4.0.8
docker network create mongnet
sudo apt-get install mongo-clients
mkdir -p /mnt/mongo/data/ 
mkdir -p /mnt/mongo/log/

首先准备好mongo集群的端口

port 27001 28001 29001 shard1的3个端口 准备用作master
port 27002 28002 29002 shard2 的3个端口 arbiter
port 27012 28012 29012 shard3 的3个端口 replica
port 27003 28003 29003 configserver的3个端口
port 27004 mongos的端口 只准备一个mongos出口 可以设置多个

准备一个通用的mongod.conf文件 这个文件再本次配置中没用上,还是手配的

mkdir -p /mnt/mongo/conf.d
cd /mnt/mongo/conf.d
vi mongod.conf

port=27017
dbpath=/var/lib/mongodb/
directoryperdb=true
pidfilepath=/var/lib/pid/mongo236.pid
logpath=/var/log/mongodb/mongod.log
logappend=true
fork=true
profile=1
slowms = 2000
noprealloc=false

3个shard中共3个primary 3个replica 3个arbiter节点

然后将全部的9个mongodb的shard全部都装到docker里,执行如下的命令

docker run -d -p 27001:27018 \
-v /mnt/mongo/data/shard10/:/data/db/ \
-v /mnt/mongo/log/shard10/:/data/configdb/ \
--network mongnet --name shard10 mongo:4.0.8 \
mongod --shardsvr --replSet shard1 --logpath=/data/configdb/shard1.log

docker run -d -p 28001:27018 \
-v /mnt/mongo/data/shard11/:/data/db/ \
-v /mnt/mongo/log/shard11/:/data/configdb/ \
--network mongnet --name shard11 mongo:4.0.8 \
mongod --shardsvr --replSet shard1 --logpath=/data/configdb/shard1.log

docker run -d -p 29001:27018 \
-v /mnt/mongo/data/shard12/:/data/db/ \
-v /mnt/mongo/log/shard12/:/data/configdb/ \
--network mongnet --name shard12 mongo:4.0.8 \
mongod --shardsvr --replSet shard1 --logpath=/data/configdb/shard1.log

docker run -d -p 27002:27018 \
-v /mnt/mongo/data/shard20/:/data/db/ \
-v /mnt/mongo/log/shard20/:/data/configdb/ \
--network mongnet --name shard20 mongo:4.0.8 \
mongod --shardsvr --replSet shard2 --logpath=/data/configdb/shard2.log

docker run -d -p 28002:27018 \
-v /mnt/mongo/data/shard21/:/data/db/ \
-v /mnt/mongo/log/shard21/:/data/configdb/ \
--network mongnet --name shard21 mongo:4.0.8 \
mongod --shardsvr --replSet shard2 --logpath=/data/configdb/shard2.log

docker run -d -p 29002:27018 \
-v /mnt/mongo/data/shard22/:/data/db/ \
-v /mnt/mongo/log/shard22/:/data/configdb/ \
--network mongnet --name shard22 mongo:4.0.8 \
mongod --shardsvr --replSet shard2 --logpath=/data/configdb/shard2.log


docker run -d -p 27012:27018 \
-v /mnt/mongo/data/shard30/:/data/db/ \
-v /mnt/mongo/log/shard30/:/data/configdb/ \
--network mongnet --name shard30 mongo:4.0.8 \
mongod --shardsvr --replSet shard3 --logpath=/data/configdb/shard3.log

docker run -d -p 28012:27018 \
-v /mnt/mongo/data/shard31/:/data/db/ \
-v /mnt/mongo/log/shard31/:/data/configdb/ \
--network mongnet --name shard31 mongo:4.0.8 \
mongod --shardsvr --replSet shard3 --logpath=/data/configdb/shard3.log

docker run -d -p 29012:27018 \
-v /mnt/mongo/data/shard32/:/data/db/ \
-v /mnt/mongo/log/shard32/:/data/configdb/ \
--network mongnet --name shard32 mongo:4.0.8 \
mongod --shardsvr --replSet shard3 --logpath=/data/configdb/shard3.log

3个cofigserver一次配置

准备3个configserver的配置

docker run -d -p 27003:27003 --name confsvr1 \
-v /mnt/mongo/data/cfgsvr1/:/data/db/ \
 mongo:4.0.8 --configsvr --dbpath /data/db --replSet crs --port 27003

docker run -d -p 28003:27003 --name confsvr2 \
-v /mnt/mongo/data/cfgsvr2/:/data/db/ \
 mongo:4.0.8 --configsvr --dbpath /data/db --replSet crs --port 27003

docker run -d -p 29003:27003 --name confsvr3  \
-v /mnt/mongo/data/cfgsvr3/:/data/db/ \
mongo:4.0.8 --configsvr --dbpath /data/db --replSet crs --port 27003

将shard的replica和configserver的replica配置完成.

在上两步之后,要进行配置,否则安装的mongos会报错,先进行配置

mongo 192.168.174.128:27001
config = { _id:"shard1", members:[
                    {_id:0,host:"192.168.174.128:27001"},
                    {_id:1,host:"192.168.174.128:28001",arbiterOnly:true},
                    {_id:2,host:"192.168.174.128:29001"}
                ]
        }
rs.initiate(config)

mongo 192.168.174.128:27002
config = { _id:"shard2", members:[
                    {_id:0,host:"192.168.174.128:27002"},
                    {_id:1,host:"192.168.174.128:28002",arbiterOnly:true},
                    {_id:2,host:"192.168.174.128:29002"}
                ]
        }
rs.initiate(config)

mongo 192.168.174.128:27012
config = { _id:"shard3", members:[
                    {_id:0,host:"192.168.174.128:27012"},
                    {_id:1,host:"192.168.174.128:28012",arbiterOnly:true},
                    {_id:2,host:"192.168.174.128:29012"}
                ]
        }
rs.initiate(config)

mongo 192.168.174.128:27003
config = { _id:"crs",configsvr:true, members:[
                    {_id:0,host:"192.168.174.128:27003"},
                    {_id:1,host:"192.168.174.128:28003"},
                    {_id:2,host:"192.168.174.128:29003"}
                ]
        }
rs.initiate(config)

准备mongos的docker

然后配置monogs的docker

docker run -d -p 27004:27017 \
-v /mnt/mongo/log/mongos1/:/var/log/mongodb/ \
--network mongnet  --name mongos1 mongo:4.0.8 mongos --bind_ip_all --port 27017 \
--configdb crs/192.168.174.128:27003,192.168.174.128:28003,192.168.174.128:29003

这里的 --bind_ip_all 非常有用 因为是docker的原因,所以要非常注意这个. 否则会在mongos连接的时候报错.
可能是由于在一台机器上,多台机器暂没尝试.

最后将全部的shard统一到mongos中

配置shard

mongo 192.168.174.128:27004
use admin

db.runCommand( { addshard : "shard1/192.168.174.128:27001,192.168.174.128:28001,192.168.174.128:29001"});
db.runCommand( { addshard : "shard2/192.168.174.128:27002,192.168.174.128:28002,192.168.174.128:29002"});
db.runCommand( { addshard : "shard3/192.168.174.128:27012,192.168.174.128:28012,192.168.174.128:29012"});

db.runCommand( { listshards : 1 } );

测试分片是否成功

然后测试分片是否成功

db.runCommand( { enablesharding :"test"});
db.runCommand( { shardcollection : "test.tbl",key : {id: 1} } )     ## 这样要数据很大才能显出分片
db.runCommand( { shardcollection : "test.tbl",key : {id: "hashed"} } ) ## 这样 小量数据就能显出分片数据来了

测试数据

for (var i = 1; i <= 10000; i++) db.tbl.save({id:NumberLong(i),"test1":"test val "+i})

然后在数据库中执行

use test
db.tbl.stats()

...

就可以看到每个分片中的中数目

系统切换mongo集群尝试.

最后尝试了一下和现在的系统进对接
发现会报错 CannotImplicitlyCreateCollection
然后单独在客户端尝试 同样会报错

db.tbl.createIndex({name:1},{unique:true})

...error...

如果不删除就不能启动成功,后来将项目中的所有的

indexAttributes:[unique:true]   //gorm插件 可以在代码中直接配置

属性删除,就可以正常的将项目迁移到mongodb的集群中了.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值