[关闭]
@KingMe 2016-01-25T20:40:48.000000Z 字数 2303 阅读 1920

搭建基于MongoDB的文件管理系统(二)

MongoDB 文件管理 .NET


1.MongoDB 集群搭建脚本

windwos X64环境下搭建集群

1.1 安装环境

1.官网下载64位安装包

https://www.mongodb.org/downloads#production

2.建立文件夹。mongodb运行时,需要先创建好存放数据的目录

mkdir data\rs-1
mkdir data\rs-2
mkdir data\rs-3
mkdir data\configSrv
mkdir data\configSrv2
mkdir data\configSrv3
mkdir log

3.运行一个mongod实例和一个配置服务实例,并且从配置文件读取配置

start mongod -f mongod_rs1.config
start mongod -f mongod_configSrv.config

mongod_rs1.config

port=30000
dbpath=.\data\rs-1
logpath=.\log\rs-1.log 
logappend=true
smallfiles=false
shardsvr=true
replSet=rs1
oplogSize=200

mongod_configSrv.config

port=27019
dbpath=.\data\configSrv
logpath=.\log\configSrv.log 
logappend=true
configsvr=true
smallfiles=false
replSet=config

4.初始化复制集

mongo.exe -nodb configure.js

configure.js

//用于保存数据的所有mongodb复制集,应该每个复制集的其中一个初始化即可
var hostnames = [
    hostname() + ":30000/admin"
];

var configServers = [
    hostname() + ":27019"
];

try {
    hostnames.forEach(function (hostname) {
        var rsDb = connect(hostname);
        rsDb.runCommand({ replSetInitiate: null });
    });
} catch (ex) { }

//配置服务复制集,初始化一个即可,默认配置服务复制集名称为config,可以随便定义
var config = new Object();
config._id = "config";
config.members = [];

for (var i = 0; i < configServers.length; i++) {
    var temp = new Object();
    temp._id = i;
    temp.host = configServers[i];
    config.members.push(temp);
}
var rsDb = connect(configServers[0] + "/admin");
rsDb.runCommand({ replSetInitiate: config });

5.运行一个mongos实例,mongos不需要配置文件,只需要设置存放日志的文件夹即可和打开的端口号即可。

start mongos --configdb config/%computername%:27019 --port 27017 --logpath .\log\mongos.log --logappend

6.连接到mongos服务,将初始化的分片添加到服务中

mongo.exe -nodb configure2.js

configure2.js

var mongosDb = connect(hostname() + ":27017/admin");

mongosDb.runCommand({addShard: "rs1/" + hostname() + ":30000"});

到此为止,我们生成了一个复制集,它包含一个mongod实例,并且添加到了rs1分片,生成了一个config复制集,包含一个config mongod实例,用来保存集群的配置信息。还有一个mongos进程,他读取配置服务器的信息,并且暴露给外部的程序链接,这样外部的程序不需要知道集群的其他信息,所有操作和操作单个mongod服务是一样的。

由于需要使用GridFs,所以需要设置一下GridFs的片键,我这里用的是_id的哈希,会比较平均的分配到两个分片中

7.设置片键

mongo.exe -nodb pj.js

pj.js 这里用sleep来延迟执行命令,实际最好手动检查一下状态再执行下一步的命令

var db = connect(hostname() + ":27017/admin");
db.runCommand({ enablesharding:"testDB" }) 
    sleep(3000)
var db2 = connect(hostname() + ":27017/testDB");
db2.fs.chunks.ensureIndex({files_id: 1});
    sleep(3000)
db.runCommand({ shardcollection : "testDB.fs.chunks", key : { files_id : 'hashed' }})

注意点

  1. config服务必须在所有mongos进程之前启动
  2. config服务在3.2版本有很大的变化,现在支持一个复制集了。所以在启动的时候需要指定replSet
  3. 可以启动多个mongos进程,但是每个mongos进程的配置服务器列表顺序必须完全相同。常规做法是每个应用服务器配置一个mongos进程
  4. mongos启动时指定配置服务器,最新版本可以只指定复制集中的一个
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注