生产mongodb 分片与集群 方案

原创
2015/05/06 18:05
阅读数 1.3W

生产mongodb 分片与集群 方案


一、 mongodb分片与集群拓扑图


 

二、分片与集群的部署

1.Mongodb的安装

分别在以上3台服务器安装好mongodb

安装方法见安装脚本。

2.Mongod 创建单个分片的副本集

10.68.4.209

①建立数据文件夹和日志文件夹

mdkir /data/{master,slave,arbiter}

mkdir /data/log/mongodb/{master,slave,arbiter}  -p

②建立配置文件

#master.conf

dbpath=/data/master

logpath=/data/log/mongodb/master/mongodb.log

pidfilepath=/var/run/mongo_master.pid

#directoryperdb=true

logappend=true

replSet=policydb

port=10002

oplogSize=10000

fork=true

noprealloc=true

profile=1

slowms=200


#slave.conf

dbpath=/data/slave

logpath=/data/log/mongodb/slave/mongodb.log

pidfilepath=/var/run/mongo_slave.pid

#directoryperdb=true

logappend=true

replSet=policydb

port=10001

oplogSize=10000

fork=true

noprealloc=true

profile=1

slowms=200

 

#arbiter.conf

dbpath=/data/arbiter

logpath=/data/log/mongodb/arbiter/mongodb.log

pidfilepath=/var/run/mongo_arbiter.pid

#directoryperdb=true

logappend=true

replSet=policydb

port=10000

oplogSize=10000

fork=true

noprealloc=true

profile=1

slowms=200

③启动mongodb

/etc/init.d/mongodb_master start

/etc/init.d/mongodb_slave  start

/etc/init.d/mongodb_arbiter start

④配置主、备、仲裁节点

主节点:

# /usr/local/mongodb/bin/mongo   10.68.4.209:10002

MongoDB shell version: 2.4.9

connecting to: 10.68.4.209:10002/test

> use admin

switched to db admin

>config={ _id:"policydb", members:[ {_id:0,host:'10.68.4.209:10002',priority:2}, {_id:1,host:'10.68.4.209:10001',priority:1},  

... {_id:2,host:'10.68.4.209:10000',arbiterOnly:true}] };

{

        "_id" : "policydb",

        "members" : [

                {

                        "_id" : 0,

                        "host" : "10.68.4.209:10002",

                        "priority" : 2

                },

                {

                        "_id" : 1,

                        "host" : "10.68.4.209:10001",

                        "priority" : 1

                },

                {

                        "_id" : 2,

                        "host" : "10.68.4.209:10000",

                        "arbiterOnly" : true

                }

        ]

}

rs.initiate(config)   #初始化

rs.status()   #查看集群状态

 

10.68.4.29

①建立数据文件夹和日志文件夹

mdkir /data/{master,slave,arbiter}

mkdir /data/log/mongodb/{master,slave,arbiter}  -p

②建立配置文件

#master.conf

dbpath=/data/master

logpath=/data/log/mongodb/master/mongodb.log

pidfilepath=/var/run/mongo_master.pid

#directoryperdb=true

logappend=true

replSet=policydb2

port=10002

oplogSize=10000

fork=true

noprealloc=true

profile=1

slowms=200

 

#slave.conf

dbpath=/data/slave

logpath=/data/log/mongodb/slave/mongodb.log

pidfilepath=/var/run/mongo_slave.pid

#directoryperdb=true

logappend=true

replSet=policydb2

port=10001

oplogSize=10000

fork=true

noprealloc=true

profile=1

slowms=200

 

#arbiter.conf

dbpath=/data/arbiter

logpath=/data/log/mongodb/arbiter/mongodb.log

pidfilepath=/var/run/mongo_arbiter.pid

#directoryperdb=true

logappend=true

replSet=policydb2

port=10000

oplogSize=10000

fork=true

noprealloc=true

profile=1

slowms=200

③启动mongodb

/etc/init.d/mongodb_master start

/etc/init.d/mongodb_slave  start

/etc/init.d/mongodb_arbiter start

 

④配置主、备、仲裁节点

主节点:

# /usr/local/mongodb/bin/mongo   10.68.4.209:10002

MongoDB shell version: 2.4.9

connecting to: 10.68.4.209:10002/test

> use admin

switched to db admin

> config={ _id:"policydb2", members:[ {_id:0,host:'10.68.4.29:10002',priority:2}, {_id:1,host:'10.68.4.29:10001',priority:1},  

... {_id:2,host:'10.68.4.209:10000',arbiterOnly:true}] };

{

        "_id" : "policydb",

        "members" : [

                {

                        "_id" : 0,

                        "host" : "10.68.4.29:10002",

                        "priority" : 2

                },

                {

                        "_id" : 1,

                        "host" : "10.68.4.29:10001",

                        "priority" : 1

                },

                {

                        "_id" : 2,

                        "host" : "10.68.4.29:10000",

                        "arbiterOnly" : true

                }

        ]

}

rs.initiate(config)   #初始化

rs.status()   #查看集群状态

10.68.4.30

①建立数据文件夹和日志文件夹

mdkir /data/{master,slave,arbiter}

mkdir /data/log/mongodb/{master,slave,arbiter}  -p

②建立配置文件

#master.conf

dbpath=/data/master

logpath=/data/log/mongodb/master/mongodb.log

pidfilepath=/var/run/mongo_master.pid

#directoryperdb=true

logappend=true

replSet=policydb3

port=10002

oplogSize=10000

fork=true

noprealloc=true

profile=1

slowms=200

 

#slave.conf

dbpath=/data/slave

logpath=/data/log/mongodb/slave/mongodb.log

pidfilepath=/var/run/mongo_slave.pid

#directoryperdb=true

logappend=true

replSet=policydb3

port=10001

oplogSize=10000

fork=true

noprealloc=true

profile=1

slowms=200

 

#arbiter.conf

dbpath=/data/arbiter

logpath=/data/log/mongodb/arbiter/mongodb.log

pidfilepath=/var/run/mongo_arbiter.pid

#directoryperdb=true

logappend=true

replSet=policydb3

port=10000

oplogSize=10000

fork=true

noprealloc=true

profile=1

slowms=200

③启动mongodb

/etc/init.d/mongodb_master start

/etc/init.d/mongodb_slave  start

/etc/init.d/mongodb_arbiter start

 

④配置主、备、仲裁节点

主节点:

# /usr/local/mongodb/bin/mongo   10.68.4.209:10002

MongoDB shell version: 2.4.9

connecting to: 10.68.4.209:10002/test

> use admin

switched to db admin

> config={ _id:"policydb3", members:[ {_id:0,host:'10.68.4.30:10002',priority:2}, {_id:1,host:'10.68.4.30:10001',priority:1},  

... {_id:2,host:'10.68.4.30:10000',arbiterOnly:true}] };

{

        "_id" : "policydb",

        "members" : [

                {

                        "_id" : 0,

                        "host" : "10.68.4.30:10002",

                        "priority" : 2

                },

                {

                        "_id" : 1,

                        "host" : "10.68.4.30:10001",

                        "priority" : 1

                },

                {

                        "_id" : 2,

                        "host" : "10.68.4.30:10000",

                        "arbiterOnly" : true

                }

        ]

}

rs.initiate(config)   #初始化

rs.status()   #查看集群状态

 

2.Mongod 创建单个分片的配置服务器

① 创建配置目录

10.68.4.209  mkdir  /data/config

10.68.4.29    mkdir  /data/config

10.68.4.30    mkdir  /data/config

②准备配置服务器的配置文件

3个服务器的配置服务器的配置文件一致

 

#config.conf

dbpath=/data/config

logpath=/data/log/mongodb/config/mongodb.log

pidfilepath=/var/run/mongo_config.pid

directoryperdb=true

logappend=true

port=10003

fork=true

configsvr=true

③启动配置服务器

/etc/init.d/mongodb_config start

 

3.Mongod 创建并配置mongos和开启分片模式

① 创建日志目录

Mkdir -p /data/log/mongodb/mongos/

② 准备mongos的配置文件

#mongos.conf

logpath=/data/log/mongodb/mongos/mongodb.log

pidfilepath=/var/run/mongo_mongos.pid

logappend=true

port=10004

fork=true

configdb=10.68.4.209:10003,10.68.4.29:10003,10.68.4.30:1000

③ 启动mongos

/etc/init.d/mongodb_mongos start

 

 

④ 配置分片

sh.addShard("policydb/10.68.4.209:10002")

sh.addShard("policydb2/10.68.4.29:10002")

sh.addShard("policydb3/10.68.4.30:10002")

sh.enableSharding("policydb")

db.runCommand({"shardcollection":"policydb.fullPolicyTextInfo_history", "key":{"key":1}})

 

db.printShardingStatus() #查看分片状态

sh.status({verbose:true})

sh.status()

 

3.快速创建副本集和配置服务脚本

上图

1.图1

2.图2 config.conf配置文件

3.图3

 

 

 附mongodb一键安装脚本:

 http://pan.baidu.com/s/1c0zvP7M

附mongodb副本集和配置服务器一键配置脚本:

http://pan.baidu.com/s/1GuQ0A



 

 

 

 

 

 

 


展开阅读全文
打赏
23
0 收藏
分享
加载中
嗯,总结的不错,这个也参考一下http://www.itxm.net/a/dashuju/2016/1221/892.html
2017/02/15 09:19
回复
举报
写的很清晰,不错
2015/08/27 15:15
回复
举报
有个问题请教一下,我有四个数据库需要存到分片集群,其中两个数据库的数据量比较大需要做分片,而另外两个数据库的数据量比较小不想做分片,同时,在应用程序端我只希望开启一个连接来同时操作这次四个数据库,那没有开启enableSharding的数据库是存在集群的什么地方?谢谢
2015/05/15 20:44
回复
举报

引用来自“咚往咚来”的评论

我们已决定废弃mongo了
我们已经放弃了。
2015/05/10 12:48
回复
举报

引用来自“运维技术”的评论

引用来自“jamesmo”的评论

引用来自“一只小桃子”的评论

如何解决mongos是单点的问题?

引用来自“运维技术”的评论

mongos 也可以交叉构建的
团队要有DBA,即使是兼职的

大公司才有 一般公司根本不配备。
运维兼职到处都是这样

看似增加成本,其实少走弯路,节约更多项目成本。
2015/05/08 17:42
回复
举报
路上
2015/05/08 11:51
回复
举报
运维技术博主

引用来自“jamesmo”的评论

引用来自“一只小桃子”的评论

如何解决mongos是单点的问题?

引用来自“运维技术”的评论

mongos 也可以交叉构建的
团队要有DBA,即使是兼职的

大公司才有 一般公司根本不配备。
运维兼职到处都是这样
2015/05/07 19:50
回复
举报

引用来自“一只小桃子”的评论

如何解决mongos是单点的问题?

引用来自“运维技术”的评论

mongos 也可以交叉构建的
团队要有DBA,即使是兼职的
2015/05/07 16:07
回复
举报
运维技术博主

引用来自“一只小桃子”的评论

如何解决mongos是单点的问题?
mongos 也可以交叉构建的
2015/05/07 14:30
回复
举报
运维技术博主

引用来自“一只小桃子”的评论

如何解决mongos是单点的问题?
右边在加一个副本集,你可以将拓扑图里面的所有的整体当做一台mongodb,然后在构建一个副本集就可以了。
2015/05/07 14:29
回复
举报
更多评论
打赏
22 评论
0 收藏
23
分享
返回顶部
顶部