[原创]MongoDB综合实例二
MongoDB-Sharding部署方案
一、 部署环境
- 五台主机:
- Amongoshard01: 10.212.74.43
- Amongoshard02: 10.212.84.4
- Amongoshard03: 10.212.98.23
- Amongoshard04: 10.212.46.5
- Amongoshard05: 10.212.70.21
- 安装;
- CentOS 6.5系统
- mongodb-linux-x86_64-rhel62-3.0.2.tgz
二、 部署方案
方案目标是搭建两个shard(shard1和shard2)实现数据分片,每个shard分别由一个副本集(一主两从一仲裁)组成。Amongoshard01主机开启27017和30000端口作为shard11和mongos实例端口;Amongoshard02开启27017、27018、27019和30000端口作为shard12、shard13、config和mongos实例端口;Amongoshard03主机开启27017和30000端口作为shard21和mongos实例端口;Amongoshard04开启27017、27018、27019和30000端口作为shard22、shard23、config和mongos实例端口;Amongoshard05开启端口27017、27018、27019作为shard14、shard24和config实例端口。
Shard11(主写操作:priority为2)、shard12(从读操作:priority为1)、shard13(仲裁)和shard14(从备份:priority为0)组成一个副本集shard1作为一个分片shard1;shard21(主写操作:priority为2)、shard22(从读操作:priority为1)、shard23(仲裁)和shard24(从备份:priority为0)组成另一个副本集shard2作为另一个分片shard2。实例部署如下:
1)Amongoshard01上:
Shard11:10.212.74.43:27017
Mongos :10.212.74.43:30000
2)Amongoshard02上:
Shard12: 10.212.84.4:27017
Shard13: 10.212.84.4:27018
Config: 10.212.84.4:27019
Mongos: 10.212.84.4:30000
3)Amongoshard03上:
Shard21:10.212.98.23:27017
Mongos :10.212.98.23:30000
4)Amongoshard04上:
Shard22:10.212.46.5:27017
Shard23: 10.212.46.5:27018
Config: 10.212.46.5:27019
Mongos: 10.212.46.5:30000
5)Amongoshard05上:
Shard14:10.212.70.21:27017
Shard24:10.212.70.21:27018
Config:10.212.70.21:27019
总概况如下图所示:

该部署方案可实现数据的读写分离和备份容灾。Config放在不同主机上或者独立,仲裁机和从机放在一起或独立,无论哪台主机当机均能提供服务。
三、 部署实现
- mongodb的安装:
Amongoshard01(10.212.74.43 ):
--#cd /opt/software
--#tar -zxvf mongodb-linux-x86_64-rhel62-3.0.2.tgz
--#mv mongodb-linux-x86_64-rhel62-3.0.2 /opt/mongodb3.2
--#useradd mongodb
--#chmod -R mongodb.mongodb /data/mongodb
--#su - mongodb
--$mkdir -p /data/mongodb/data/shard11
Amongoshard02(10.212.84.4 ):
--#cd /opt/software
--#tar -zxvf mongodb-linux-x86_64-rhel62-3.0.2.tgz
--#mv mongodb-linux-x86_64-rhel62-3.0.2 /opt/mongodb3.2
--#useradd mongodb
--#chmod -R mongodb.mongodb /data/mongodb
--#su - mongodb
--$mkdir -p /data/mongodb/data/shard12
--$mkdir -p /data/mongodb/data/shard13
--$mkdir -p /data/mongodb/data/config
Amongoshard03(10.212.98.23 ):
--#cd /opt/software
--#tar -zxvf mongodb-linux-x86_64-rhel62-3.0.2.tgz
--#mv mongodb-linux-x86_64-rhel62-3.0.2 /opt/mongodb3.2
--#useradd mongodb
--#chmod -R mongodb.mongodb /data/mongodb
--#su - mongodb
--$mkdir -p /data/mongodb/data/shard21
Amongoshard04(10.212.46.5 ):
--#cd /opt/software
--#tar -zxvf mongodb-linux-x86_64-rhel62-3.0.2.tgz
--#mv mongodb-linux-x86_64-rhel62-3.0.2 /opt/mongodb3.2
--#useradd mongodb
--#chmod -R mongodb.mongodb /data/mongodb
--#su - mongodb
--$mkdir -p /data/mongodb/data/shard22
--$mkdir -p /data/mongodb/data/shard23
--$mkdir -p /data/mongodb/data/config
Amongoshard05(10.212.70.21 ):
--#cd /opt/software
--#tar -zxvf mongodb-linux-x86_64-rhel62-3.0.2.tgz
--#mv mongodb-linux-x86_64-rhel62-3.0.2 /opt/mongodb3.2
--#useradd mongodb
--#chmod -R mongodb.mongodb /data/mongodb
--#su - mongodb
--$mkdir -p /data/mongodb/data/shard14
--$mkdir -p /data/mongodb/data/shard24
--$mkdir -p /data/mongodb/data/config
2.mongodb的配置:
Amongoshard01(10.212.74.43 ):
--$vi shard11.conf
shardsvr = true
replSet = shard1
port = 27017
dbpath = /data/mongodb/data/shard11
oplogSize = 100
logpath = /data/mongodb/data/shard11.log
logappend = true
maxConns = 10000
pidfilepath = /data/mongodb/data/shard11.pid
bind_ip = 10.212.74.43
rest = true
fork = true
noprealloc = true
directoryperdb = true
Amongoshard02(10.212.84.4 ):
--$vi shard12.conf
shardsvr = true
replSet = shard1
port = 27017
dbpath = /data/mongodb/data/shard12
oplogSize = 100
logpath = /data/mongodb/data/shard12.log
logappend = true
maxConns = 10000
pidfilepath = /data/mongodb/data/shard12.pid
bind_ip = 10.212.84.4
rest = true
fork = true
noprealloc = true
directoryperdb = true
--$vi shard13.conf
shardsvr = true
replSet = shard1
port = 27018
dbpath = /data/mongodb/data/shard13
oplogSize = 100
logpath = /data/mongodb/data/shard13.log
logappend = true
maxConns = 10000
pidfilepath = /data/mongodb/data/shard13.pid
bind_ip = 10.212.84.4
rest = true
fork = true
noprealloc = true
directoryperdb = true
--$vi configsvr.conf
dbpath = /data/mongodb/data/config
logpath = /data/mongodb/data/config.log
logappend = true
bind_ip = 10.212.84.4
port = 27019
fork = true
Amongoshard03(10.212.98.23 ):
--$vi shard21.conf
shardsvr = true
replSet = shard2
port = 27017
dbpath = /data/mongodb/data/shard21
oplogSize = 100
logpath = /data/mongodb/data/shard21.log
logappend = true
maxConns = 10000
pidfilepath = /data/mongodb/data/shard21.pid
bind_ip = 10.212.98.23
rest = true
fork = true
noprealloc = true
directoryperdb = true
Amongoshard04(10.212.46.5 ):
--$vi shard22.conf
shardsvr = true
replSet = shard2
port = 27017
dbpath = /data/mongodb/data/shard22
oplogSize = 100
logpath = /data/mongodb/data/shard22.log
logappend = true
maxConns = 10000
pidfilepath = /data/mongodb/data/shard22.pid
bind_ip = 10.212.46.5
rest = true
fork = true
noprealloc = true
directoryperdb = true
--$vi shard23.conf
shardsvr = true
replSet = shard2
port = 27018
dbpath = /data/mongodb/data/shard23
oplogSize = 100
logpath = /data/mongodb/data/shard23.log
logappend = true
maxConns = 10000
pidfilepath = /data/mongodb/data/shard23.pid
bind_ip = 10.212.46.5
rest = true
fork = true
noprealloc = true
directoryperdb = true
--$vi configsvr.conf
dbpath = /data/mongodb/data/config
logpath = /data/mongodb/data/config.log
logappend = true
bind_ip = 10.212.46.5
port = 27019
fork = true
Amongoshard05(10.212.70.21 ):
--$vi shard14.conf
shardsvr = true
replSet = shard1
port = 27017
dbpath = /data/mongodb/data/shard14
oplogSize = 100
logpath = /data/mongodb/data/shard14.log
logappend = true
maxConns = 10000
pidfilepath = /data/mongodb/data/shard14.pid
bind_ip = 10.212.70.21
rest = true
fork = true
noprealloc = true
directoryperdb = true
--$vi shard24.conf
shardsvr = true
replSet = shard2
port = 27018
dbpath = /data/mongodb/data/shard24
oplogSize = 100
logpath = /data/mongodb/data/shard24.log
logappend = true
maxConns = 10000
pidfilepath = /data/mongodb/data/shard24.pid
bind_ip = 10.212.70.21
rest = true
fork = true
noprealloc = true
directoryperdb = true
--$vi configsvr.conf
dbpath = /data/mongodb/data/config
logpath = /data/mongodb/data/config.log
logappend = true
bind_ip = 10.212.70.21
port = 27019
fork = true
3.mongodb的启动:
Amongoshard01(10.212.74.43 ):
--$cd /data/mongodb/bin
--./mongod -shardsvr -f /data/mongodb/data/shard11.conf
--./mongos -configdb 10.212.84.4:27019,10.212.46.5:27019,10.212.70.21:27019 -port 30000 -chunkSize 5 -logpath /data/mongodb/data/mongos.log -logappend -fork
Amongoshard02(10.212.84.4 ):
--$cd /data/mongodb/bin
--./mongod -shardsvr -f /data/mongodb/data/shard12.conf
--./mongod -shardsvr -f /data/mongodb/data/shard13.conf
--./mongod -configsvr -f /data/mongodb/data/config.conf
--./mongos -configdb 10.212.84.4:27019,10.212.46.5:27019,10.212.70.21:27019 -port 30000 -chunkSize 5 -logpath /data/mongodb/data/mongos.log -logappend -fork
Amongoshard03(10.212.98.23 ):
--$cd /data/mongodb/bin
--./mongod -shardsvr -f /data/mongodb/data/shard21.conf
--./mongos -configdb 10.212.84.4:27019,10.212.46.5:27019,10.212.70.21:27019 -port 30000 -chunkSize 5 -logpath /data/mongodb/data/mongos.log -logappend -fork
Amongoshard04(10.212.46.5 ):
--$cd /data/mongodb/bin
--./mongod -shardsvr -f /data/mongodb/data/shard22.conf
--./mongod -shardsvr -f /data/mongodb/data/shard23.conf
--./mongod -configsvr -f /data/mongodb/data/config.conf
--./mongos -configdb 10.212.84.4:27019,10.212.46.5:27019,10.212.70.21:27019 -port 30000 -chunkSize 5 -logpath /data/mongodb/data/mongos.log -logappend -fork
Amongoshard05(10.212.70.21 ):
--$cd /data/mongodb/bin
--./mongod -shardsvr -f /data/mongodb/data/shard14.conf
--./mongod -shardsvr -f /data/mongodb/data/shard24.conf
--./mongod -configsvr -f /data/mongodb/data/config.conf
4.初始化副本集:
第一个副本集:
--#su - monogdb
--$cd /data/mongodb/bin
--$./mongo 10.212.74.43:27017
>use admin
>config={_id:'shard1',members:[{_id:0,host:'10.212.74.43:27017',priority:2},{_id:1,host:'10.212.84.4:27017',priority:1},{_id:2,host:'10.212.84.4:27018',arbiterOnly:true},{_id:3,host:'10.212.70.21:27017',priority:0}]};
>rs.initiate(config)
Shard1:PRIMARY>rs.status()
第二个副本集:
--#su - monogdb
--$cd /data/mongodb/bin
--$./mongo 10.212.74.43:27017
>use admin
>config={_id:'shard2',members:[{_id:0,host:'10.212.98.23:27017',priority:2},{_id:1,host:'10.212.46.5:27017',priority:1},{_id:2,host:'10.212.46.5:27018',arbiterOnly:true},{_id:3,host:'10.212.70.21:27018',priority:0}]};
>rs.initiate(config)
Shard2:PRIMARY>rs.status()
5.配置sharding:
Login到任意一台mongos机器上:
--#su - monogdb
--$cd /data/mongodb/bin
--$./mongo 10.212.74.43:30000/admin
mongos>db.runCommand( { addshard : "shard1/10.212.74.43:27017,10.212.84.4:27017,10.212.84.4:27018,10.212.70.21:27017",name:"shard1",maxsize:2048000});
mongos>db.runCommand( { addshard : "shard2/10.212.98.23:27017,10.212.46.5:27017,10.212.46.5:27018,10.212.70.21:27018",name:"shard2",maxsize:2048000});
mongos>db.runCommand({listshards:1})
6.数据库分片以及Collection分片:
--#su - monogdb
--$cd /data/mongodb/bin
--$./mongo 10.212.74.43:30000/admin
mongos>db.runCommand( { enablesharding : “<dbname>” } );
mongos> db.runCommand( { shardcollection : “<namespace>”,key : <shardkeypatternobject> });
注意:
--数据库中不同的collection将被存放在不同的shard上;
--一个collection仍旧存放在同一个shard上,要使单个collection也分片,还需单独对collection作些操作;
--分片的collection系统会自动创建一个索引(也可用户提前创建好);
--分片的collection只能有一个在分片key上的唯一索引,其它唯一索引不被允许
四、 测试与总结
使用for(i=1;i<=100000;i++){db.test.insert({_id:i})}语句对环境进行测试并查看分片情况。
部署时遇到的问题及解决方法:
问题1:如果在从机上查看数据时出现不能查看错误时,则在从机上执行命令:db.getMongo().setSlave0k()。再查询就可以了。Mongodb3.0以上版本的使用db.getMongo().setSlave0k()或rs.slaveOk()之后退出再次登录时还是会出现此错误,需要编辑文件:#vi ~/.mongorc.js添加rs.slaveOk();即可。
问题2:配置sharding后需注意maxSize值得指定,若发现数据开始可以分片后来不行则可能是数据储存超出maxSize的大小,调整之后即可。maxSize值(单位是M)表示一个shard可使用的磁盘大小,超出的数据不会分片但会存储在primary sharding上。使用一下语句指定或更改其大小:
第一种:
>db.runCommand({addshard:”shardIP:port”,maxSize:20480})
第二种:
>use config
>db.shards.update({_id:”[shardname]”},{$set:{maxSize:20480}})
[原创]MongoDB综合实例二的更多相关文章
- [原创]MongoDB综合实例一
CentOS-6.5单机实现mongoDB分片 环境:1)CentOS 6.5系统 2)IP:本机3)MongoDB:MongoDB-linux-x86_64-2.6.1 实现:两个副本集s ...
- Android笔记三十四.Service综合实例二
综合实例2:client訪问远程Service服务 实现:通过一个button来获取远程Service的状态,并显示在两个文本框中. 思路:如果A应用须要与B应用进行通信,调用B应用中的getName ...
- ReportingServies——SQLServer报表开发综合实例
如果我们安装了sqlserver2008 R2,将会自动安装一个报表开发工具 不要以为此报表开发工具只适合于sqlserver2008,其实在sqlserver2012中也是支持的,事实上我现在项目中 ...
- Loadrunner 关联 web_custom_request综合实例
Loadrunner 关联 web_custom_request综合实例 Loadrunner 关联web_custom_request,针对自带的订票系统的一个综合实例,相信看了本文大家对学习loa ...
- 使用VS2012 开发SharePoint 2013 声明式的action(activity) 综合实例
本文讲述使用VS2012 开发SharePoint 2013 声明式的action 综合实例. 需求同: http://blog.csdn.net/abrahamcheng/article/detai ...
- mongodb入门教程二
title: mongodb入门教程二 date: 2016-04-07 10:33:02 tags: --- 上一篇文章说了mongodb最基本的东西,这边博文就在深入一点,说一下mongo的一些高 ...
- C语言库函数大全及应用实例二
原文:C语言库函数大全及应用实例二 [编程资料]C语言库函数大全及应用实例二 函数名: bioskey 功 能 ...
- 一个综合实例讲解vue的基础知识点。
本文通过一个简单的实例来讲解一下vue的基本知识点.通过这个综合实例的讲解,vue的基础知识就会掌握的差不多了. 首先看一下项目的效果:
- WebGL多模型光照综合实例
原文地址:WebGL多模型光照综合实例 WebGL是一个非常的接近硬件底层的光栅化API, 从非常类似C/C++风格的API调用方式就可以看出来, 习惯了高级语言的我们会觉得很不友好,觉得特别 ...
随机推荐
- WPF自定义控件(1)——仪表盘设计[1]
0.小叙闲言 又接手一个新的项目了,再来一次上位机开发.网上有很多控件库,做仪表盘(gauge)的也不少,功能也很强大,但是个人觉得库很臃肿,自己就计划动手来写一个控件库,一是为学习,二是为了项目.下 ...
- macos系统下共语言gopath变量的设置
一.问题 在macos下安装golang开发环境,想更改gopath路径,通过export GOPATH=/Volume/E/go 在vscode中通过go env命令查看GOPATH还是原始默认的, ...
- MYSQL 行转列 以及基本的聚合函数count,与group by 以及distinct组合使用
在统计查询中,经常会用到count函数,这里是基础的 MYSQL 行转列 以及基本的聚合函数count,与group by 以及distinct组合使用 -- 创建表 CREATE TABLE `tb ...
- Java -- 浅入Java反射机制
1,Java 反射是Java语言的一个很重要的特征,它使得Java具体了"动态性". Java 反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类. 在运行时构造任意一 ...
- setTimeout 和 setInteval 的区别。
学习前端的可能都知道js有2个定时器setTimeOut和setinteval.用的时候可能不是很在意,但是2者还是有区别的 setTimeout方法是定时程序,也就是在什么时间以后干什么.干完就完了 ...
- ios sqlite3的简单使用
第一:创建表格 //创建表格 -(void)creatTab{ NSString*creatSQL=@"CREATE TABLE IF NOT EXISTS PERSIONFO(ID INT ...
- 非负矩阵分解(4):NMF算法和聚类算法的联系与区别
作者:桂. 时间:2017-04-14 06:22:26 链接:http://www.cnblogs.com/xingshansi/p/6685811.html 声明:欢迎被转载,不过记得注明出处 ...
- for xml path 如何将字段转换为xml的属性
for xml path 如何将字段作为xml的属性: 可在查询时 别名用 as '@..' 如'@value' 如下实例: SELECT A.GiftSetGUID AS '@value',A.Gi ...
- java多线程基本概述(一)——线程的基本认知
1.1.概念: 进程:进程是操作系统结构的基础,是一次程序的执行:是一个程序及其数据再处理器上顺序执行时所发生的活动:是程序再一个数据集合上运行的过程,它是系统进行系统资源分配和调度的最小单元. 线程 ...
- finally块执行时间
finally块在代码中什么时候被执行? 在Java语言的异常处理中,finally块的作用十九为了保证无论出现什么情况,finally块里面的代码一定会被执行.由于程序执行return就以为这结束对 ...