六台主机
hostname分别为wens012~017
IP:10.50.9.12~10.50.9.17
下面为部署方案
六个server,每个server上跑四个进程。
进程一共分三类:
shard server:启动守护进程mongod加上参数shardsvr即可。当然还有一些其他的配置。
config server:启动守护进程mongod加上参数configsvr即可。
route server:启动路由进程mongos。
部署方案中shard与rep都是shard server进程,每3个组成一个复制集,复制集中如果某个进程down掉了,会有另外一个进程成为主节点。
例如:shard11,rep12,rep13为一个复制集。
进程端口分配:
主机
ip
进程端口
Server1
10.50.9.12
Mongod shard11 : 27017
Mongod rep32 : 27018
Mongod rep33 : 27019
Mongod conf1 : 20000
Server2
10.50.9.13
Mongod shard21 : 27017
Mongod rep12 : 27018
Mongod rep13 : 27019
Mongos : 30000
Server3
10.50.9.14
Mongod shard31 : 27017
Mongod rep22 : 27018
Mongod rep23 : 27019
Mongod conf2 : 20000
Server4
10.50.9.15
Mongod shard41 : 27017
Mongod rep62 : 27018
Mongod rep63 : 27019
Mongos : 30000
Server5
10.50.9.16
Mongod shard51 : 27017
Mongod rep42 : 27018
Mongod rep43 : 27019
Mongod conf3 : 20000
Server6
10.50.9.17
Mongod shard61 : 27017
Mongod rep52 : 27018
Mongod rep53 : 27019
Mongds : 30000
文件目录:
我的是下载压缩文件解压出来的mongodb,放在/erpfs/mongoDB/ 中。
加压出来后mongodb的所有执行文件都放在/erpfs/mongoDB/bin/ 中。
创建文件夹/erpfs/mongoDB/data/ 用于存放数据文件
每个server按照所需运行的mongod进程建数据目录。
例如:
server1:
mkdir -p /erpfs/mongoDB/data/shard11
mkdir -p /erpfs/mongoDB/data/rep32
mkdir -p /erpfs/mongoDB/data/rep33
mkdir -p /erpfs/mongoDB/data/config1
server2:
mkdir -p /erpfs/mongoDB/data/shard21
mkdir -p /erpfs/mongoDB/data/rep12
mkdir -p /erpfs/mongoDB/data/rep13
route server不需要数据目录
该项目还有一个需求,在server1只需执行一个启动脚本则整个集群都启动完毕,并且所有分片都加到集群中。
为了达到目的,我使用ssh。但是这样执行启动脚本之后,每当连接到另外一台server的时候都需要输入root密码,非常繁琐,需要有自动完成登录的功能。我们可以利用公钥和私钥来完成。
在server1中执行:ssh-keygen -t rsa
按回车,提示输入文件名,我用id_rsa_wens012命名
随后提示使用的加密方式,直接按回车两次,使用默认的即可。
这样会生成私钥和公钥文件id_rsa_wens12和id_rsa_wens12.pub
将私钥和公钥文件都放到/root/.ssh/中
将id_rsa_wens12.pub放到server2~6的/root/.ssh/中,并且重命名为authorized_keys(如果这个文件已存在,则id_rsa_wens12.pub的内容加到文件末尾)
这部分可以在写完所有脚本之后再补上,不过能在一开始就完成也很好。
然后开始写配置文件
还是以sever1为例:
conf文件有四个,每个进程一个。
#shard11.conf
shardsvr = true
replSet = shard1
dbpath = /erpfs/mongoDB/data/shard11
logpath = /erpfs/mongoDB/data/shard11.log
logappend = true
fork = true
port = 27017
journal = true
smallfiles = true
#rep32.conf
shardsvr = true
replSet = shard3
dbpath = /erpfs/mongoDB/data/rep32
logpath = /erpfs/mongoDB/data/rep32.log
logappend = true
fork = true
port = 27018
journal = true
smallfiles = true
#rep33.conf
shardsvr = true
replSet = shard3
dbpath = /erpfs/mongoDB/data/rep33
logpath = /erpfs/mongoDB/data/rep33.log
logappend = true
fork = true
port = 27019
journal = true
smallfiles = true
#config1.conf
configsvr = true
dbpath = /erpfs/mongoDB/data/config1
logpath = /erpfs/mongoDB/data/config1.log
logappend = true
fork = true
port = 20000
journal = true
smallfiles = true
其他server类似配置,改改名字就差不多。
server2中的mongos配置文件
#mongos
configdb = 10.50.9.12:20000,10.50.9.14:20000,10.50.9.16:20000
logpath = /erpfs/mongoDB/data/mongos.log
logappend = true
fork = true
port = 30000
chunkSize = 100
然后是启动脚本文件
先写好每个server的启动脚本
在每个server中都有一个serverX_start.sh(X表示1~6),用来启动该机器上的进程。
server2、4、6还有一个serverX_start_mongos.sh脚本,因为route server需要等到所有config server启动了之后才能启动。因为找不到config server 的话route server就不知道从哪里读取集群配置了。
以server1为例:
#server1_start.sh
#!/bin/bash
/erpfs/mongoDB/bin/mongod -f /erpfs/mongoDB/config1.conf
/erpfs/mongoDB/bin/mongod -f /erpfs/mongoDB/shard11.conf
/erpfs/mongoDB/bin/mongod -f /erpfs/mongoDB/rep32.conf
/erpfs/mongoDB/bin/mongod -f /erpfs/mongoDB/rep33.conf
选项-f(或--config)代表执行配置文件内容。
server2中用mongos的启动脚本,其实就是一句。
#server2_start_mongos.sh
#!/bin/bash
/erpfs/mongoDB/bin/mongos -f /erpfs/mongoDB/mongos.conf
进程都启动之后,route server已经跟config server连接上,但是所有的shard server都还是处于游离状态。我们要将他们加入到集群中,在加入集群之前还有一件事情,就是初始化复制集。
任意一台server上使用bin目录下的mongo连接到某一复制集的其中一个shard server上。
例如:/erpfs/mongoDB/bin/mongo 10.50.9.12:27017
就连接上了shard11了
执行初始化复制集代码
cfg={_id:'shard1',members:[{_id:1,host:'10.50.9.12:27017'},{_id:2,host:'10.50.9.13:27018'},{_id:3,host:'10.50.9.13:27019'}]};
rs.initiate(cfg);
看到 'OK':1字样则初始化成功。
然后exit退出。
接着重复上述步骤初始化复制集shard2~6
初始化复制集完成之后就是将每个复制集加入到集群当中。
使用bin目录下的mongo连接到任意一个route server,进入admin数据库(命令:use admin)
然后执行下列代码增加分片的复制集
db.runCommand({addshard:'shard1/10.50.9.12:27017,10.50.9.13:27018,10.50.9.13:27019'});
db.runCommand({addshard:'shard2/10.50.9.13:27017,10.50.9.14:27018,10.50.9.14:27019'});
db.runCommand({addshard:'shard3/10.50.9.14:27017,10.50.9.12:27018,10.50.9.12:27019'});
db.runCommand({addshard:'shard4/10.50.9.15:27017,10.50.9.16:27018,10.50.9.16:27019'});
db.runCommand({addshard:'shard5/10.50.9.16:27017,10.50.9.17:27018,10.50.9.17:27019'});
db.runCommand({addshard:'shard6/10.50.9.17:27017,10.50.9.15:27018,10.50.9.15:27019'});
执行命令db.runCommand({enablesharding:'test'})
这样test数据库就可以分片了,MongodDB默认连接上的是test数据库。
如果想要使数据库中的某个集合可以分片存储,例如test集合,可以使用db.runCommand({shardcollection:'test.test',key:{_id:1}})
key是片键,是分片的依据,这里使用_id字段作为片键。
所谓片键,例如某个片键的值的范围是a~z,则可能某一分片存储a~h,某一分片存储i~n,某一分片存储o~z。
为了不用每次启动MongoDB的时候都人为执行上述初始化复制集和加入分片的操作,可以将上述命令写成js脚本,MongoDB可以执行js脚本。
只要启动bin目录下的mongo时加入参数
mongo [ip][:port] [*.js]
然后将所有执行js脚本的命令写入shell脚本
#!/bin/bash
/erpfs/mongoDB/bin/mongo 10.50.9.12:27017 /erpfs/mongoDB/shard1Initiate.js
/erpfs/mongoDB/bin/mongo 10.50.9.13:27017 /erpfs/mongoDB/shard1Initiate.js
/erpfs/mongoDB/bin/mongo 10.50.9.14:27017 /erpfs/mongoDB/shard1Initiate.js
/erpfs/mongoDB/bin/mongo 10.50.9.15:27017 /erpfs/mongoDB/shard1Initiate.js
/erpfs/mongoDB/bin/mongo 10.50.9.16:27017 /erpfs/mongoDB/shard1Initiate.js
/erpfs/mongoDB/bin/mongo 10.50.9.17:27017 /erpfs/mongoDB/shard1Initiate.js
/erpfs/mongoDB/bin/mongo 10.50.9.13:30000/admin /erpfs/mongoDB/addshards.js
这样只要一执行启动脚本,就自动完成启动server进程,初始化复制集,加入分片的操作。
停止MongoDB
要停止MongoDB的方法有几种,只要MongoDB接受到结束信号就会迅速停止。
可以使用 kill -2来停止MongoDB
记住,如果使用kill -9的话MongoDB会马上停止,一些停止前的操作尚未执行就停止了,这样下次启动的时候MongDB就会查询日志,进行修复,启动时间就会变得很慢。
当然,这是在使用了journal参数设为true的情况下,才会有恢复操作,如果没有将journal设置为true,就麻烦了。
还有一点,journal在64位的机器上是默认为true的,在32位的机器上默认为false的。
言归正传,要停止MongoDB可以就是将正在运行的mongo进程号找出来然后kill -2掉。
#!/bin/bash
pid=`ps -o pid,command ax | grep mongo | awk '!/grep/ && !/awk/ {print $1}'`;
if [ "${pid}" != "" ]; then
kill -2 ${pid};
fi
以上作为serverX_stop.sh脚本放在每个server上,写一个stop.sh脚本,通过ssh执行每个server上的serverX_stop.sh脚本即可。
转自 http://www.2cto.com/database/201302/187377.html
相关推荐
为了构建一个高可用的MongoDB集群,我们需要确定每个组件的数量,例如:三个mongos实例、三个config server实例和三个shard server实例(每个shard有一个副本集和一个仲裁者)。这样的配置确保了即使某些节点出现...
MongoDB 是一种流行的开源文档型数据库,支持多种集群搭建方式,包括主从模式、副本集(Replica Set)和分片(Sharding)。...通过理解副本集的工作机制和配置方法,您可以为MongoDB数据库构建一个可靠的高可用集群。
3. **分片集群**:MongoDB支持水平扩展,通过分片技术可以轻松地将数据分散到多个节点上,以处理更大的数据量和更高的并发请求。 4. **安全增强**:此版本包含了更多的安全特性,如支持SCRAM-SHA-1认证协议,增强了...
10. **性能优化**:MongoDB团队持续对查询执行、索引构建和内存管理等核心功能进行优化,确保4.4.1在各种工作负载下都能表现出色。 为了在Linux环境中使用这个压缩包,你需要首先解压,然后按照MongoDB的官方指南...
### Linux安装ElasticSearch与MongoDB分布式集群环境下数据同步 #### 概述 在现代的大数据处理场景下,为了提高数据处理效率以及更好地利用资源,通常会采用多种数据库技术组合的方式来构建系统架构。Elastic...
8. **性能优化**:MongoDB 4.4包含了许多性能优化,如更快的索引构建、更好的查询计划选择和内存管理改进,这将提高读写操作的速度。 9. **新的数据类型**:4.4版本增加了新的数据类型,如二进制大对象(BSON)的...
在Linux环境下安装MongoDB 4.4,首先你需要下载的压缩包就是"mongodb-linux-x86_64-rhel70-4.4.0.tgz"。这个文件是为Red Hat Enterprise Linux 7.0(RHEL70)平台设计的64位版本。确保你的系统是64位且兼容RHEL7,...
MongoDB是一种分布式文档数据库,以其灵活性、高性能和可扩展性而闻名。在本文中,我们将深入探讨MongoDB 4.0.6版本在...通过深入了解其特性和最佳实践,你可以充分发挥MongoDB的优势,构建高性能、可扩展的现代应用。
MongoDB 是一个高性能的分布式文档型数据库,常用于构建大规模的数据应用。在 CentOS 7 系统下,从单节点升级到分片集群是企业级应用扩展性需求的重要步骤。这个过程中,我们需要确保数据的高可用性和可扩展性,同时...
MongoDB是一款开源、高性能、无模式的分布式文档型数据库,被广泛应用于Web应用程序、大数据分析、内容管理系统等领域。...掌握这些知识点,能够帮助你有效地利用MongoDB构建和维护高效、可靠的数据库系统。
1. **bin**:这个目录包含MongoDB的主要可执行文件,如`mongod`(数据库服务器)、`mongo`(交互式Shell)和`mongos`(用于分片集群的路由进程)。 2. **doc**:MongoDB的文档,包括用户手册和API参考,对于初学者...
**创建分布式MongoDB集群** 1. **副本集配置**:MongoDB的高可用性通常通过副本集实现,至少需要三个节点。每个节点需启动并配置为副本集成员。 2. **初始化副本集**:在一个节点上创建副本集,添加其他节点作为...
"rehat mongodb-linux-x86_64-rhel70-3.4.7"这个标题表明我们正在讨论的是针对Red Hat Enterprise Linux 7.0(RHEL70)的MongoDB 3.4.7版本的64位Linux二进制安装包。MongoDB 3.4是该数据库系统的一个重要版本,引入...
mongos 是MongoDB集群的入口点,它负责数据的分发和路由。在生产环境中,mongos通常部署在应用服务器上,以提供数据服务。每个mongos实例都需要连接到Config Server,获取和更新集群状态信息。多个mongos实例可以...
在Linux环境下搭建MongoDB集群,需要进行一系列的准备工作,包括设置静态IP地址、创建用户组和用户、开放端口、重启服务器以及创建必要的目录结构。例如,创建名为'mongo'的用户并将其加入'minstall'和'dba'用户组,...
3. **自动分片(Sharding)**:在3.0.4版本中,MongoDB支持自动分片,允许数据在集群中的多个分片上自动分布,以适应大数据量的需求。 4. **副本集(Replication)**:MongoDB 提供了副本集功能,确保数据冗余和高...
此“mongodb-linux-x86_64-amazon-3.0.15.tgz”文件是专为Linux 64位操作系统设计的MongoDB 3.0.15版本安装包,特别适配于Amazon EC2环境。 首先,让我们详细了解一下MongoDB 3.0.15版本。这个版本包含了MongoDB在...