数据库

 首页 > 数据库 > MongoDB > MongoDB集群配置学习

MongoDB集群配置学习

分享到:
【字体:
导读:
         摘要:1.mongodb的主从复制:主服务器:mongod--dbpathF:\mongodb\data--port27017从服务器:mongod--slave--dbpathF:\mongodb-slave\data--port10001--sourcelocalhost:27017--onlytest选项说明:--on...

MongoDB集群配置学习

1. mongodb的主从复制:

主服务器:

mongod --dbpath "F:mongodbdata" --port 27017

从服务器:

mongod --slave --dbpath "F:mongodb-slavedata" --port 10001 --source localhost:27017 --only test

选项说明:

--only

在从节点上指定复制某个数据库(默认复制所有数据库)

--slavedelay

用在从节点上,当应用主节点的操作时增加延时(秒)

--fastsync

以主节点的数据快照为基础启动从节点,如果数据目录一开始是主节点的数据快照,从节点用这个选项启动要比完整同步快多了

--autoresync

如果从节点与主节点不同步,则自动重新同步

--oplogSize

主节点oplog的大小(MB)

一般一个主从服务群点不超过12个从节点,避免成千上万的从节点对单个主节点发起查询会拖垮主节点

2. mongodb的副本集:

副本集就是有自动故障恢复功能的主从集群

主从集群和副本集最为明显的区别就是副本集没有固定的主节点,可以把副本集当做一个集群,整个集群会选出一个主节点,当其不能正常工作时则会激活其他节点。

注意:不能用localhost作为mongodb地址成员,我们需要找到主机名(fornane-PC)

另外,给该mongodb集群一个名称,如:blort

配置mongodb副本集群的主要步骤分为两大部分:

第一部分:启动节点服务

第一个节点启动命令:

mongod --dbpath "F:mongodb-node1data" --port 10001 --replSet blort/fornane-PC:10002

第二个节点启动命令:

mongod --dbpath "F:mongodb-node2data" --port 10002 --replSet blort/fornane-PC:10001

第二部分:初始化配置信息

该部分其实是往mongodb的主节点中初始化整个集群的配置信息,该信息记录在primary节点(活跃节点)的local库的system.replset集合中,可以通过以下命令查看:

use local;
db.system.replset.find();

或者

rs.conf();

以下内容是用于初始化集群信息的命令(在shell中执行):

db.runCommand({
    "replSetInitiate": {
        "_id": "blort",
        "members": [{
            "_id": 1,
            "host": "fornane-PC:10001"
        },
        {
            "_id": 2,
            "host": "fornane-PC:10002"
        }]
    }
})

当然也可以使用

rs.initiate({
     _id : "blort",
     members : [
        {"_id" : 1,"host" : "PC-201007141658:10001"},
        {"_id" : 2,"host" : "PC-201007141658:10002"}
     ]
})

ok,到此包含两个节点的mongodb集群配置完成,可以通过shell分别连接两个服务器查看状态,注意只能在primary的节点中进行数据的读写。

测试是否成功,只需在primary节点中新建一个db,然后再写入数据后在secondary节点查看该db是否同步成功即可!

若要在secondary节点中查询数据需要执行以下命令(读扩展):

db.getMongo().setSlaveOk();

或者:

rs.slaveOk();

在以上两个节点的基础上增加第三个节点的方法:

第一步:启动节点服务,并想其他已有节点中的任意一台进行广播:

mongod --dbpath "F:mongodb-node3data" --port 10003 --replSet blort/fornane-PC:10002

第二步:修改当前primary节点中的 system.replset 信息,增加新加入的节点的信息:

rs.add("fornane-PC:10003")

到此,第三个节点加入完成,增加后续的更多的节点方式与此一致。

测试方式同上文所述。

以下分别是各节点的数据同步结果:

node 1:

node 2:

node 3:

集群信息如下:

注:1. 主机名为PC-201007141658

      2. 初始的primary节点(10001)关闭后,原secondary节点(10003)被选举为primary节点

附常用查看集群信息的命令:

rs.status();  当前状态

rs.conf();      当前配置信息

rs.slaveOk();  读扩展

rs.remove("fornane-PC:10003");   删除节点

参考:

http://cn.docs.mongodb.org/manual/reference/method/js-replication/

3. mongodb的自动分片

结构如下图:

如此,仅仅需要暴露 Mongos ,具体的查询、插入等全部由 mongodb 自动进行分片

部署步骤:

1. 启动 Config Server

mongod --dbpath "F:/mongodb-shard/config-server/data" --port 20000

2. 启动 Mongos Server

mongod --port 30000 --configdb localhost:20000

3. 启动 Mongod Server

mongod --dbpath "F:/mongodb-shard/mongod-server/data" --port 10000

4. 通过 shell 连接Mongos Server

mongo --port localhost:30000/admin

注意:使用admin登录,否则后面会没权限

检查是否连接在 Mongos Server

sh._checkMongos()

若报错,先执行

use admin

参考:http://docs.mongodb.org/manual/reference/method/js-sharding/

5. 添加分片

sh.addShard("localhost:10000")

或者

db.runCommand({addShard : "localhost:10000" , allowLocal : true})

6. 切分数据

sh.shardCollection("foo");
sh.shardCollection("foo.users", { _id:1} , unique : true )

或者

db.runCommand({"enablesharding":foo})
db.runCommand({"shardcollection":"foo.users", "key":{"_id":1}, "unique" : true})

ok,到这里分片配置完成。

当然为了看到具体的分片想过我们继续添加一个 Mongod Server ,启动后执行

sh.addShard("localhost:10001")

最后通过java连接mongodb,并写入1030002条记录,即可看到效果,java

Mongo mongo = new Mongo("localhost" , 30000);
DB db = mongo.getDB("foo");
DBCollection users = db.getCollection("users");
for(int i =0 ; i<1000000 ; i++) {
    DBObject user = new BasicDBObject();
    user.put("username", "cbpan" + Math.random());
    users.save(user);
}
DBCursor cur = users.find();
System.out.println(cur.count());

最终测试结果:

by fornane

MongoDB集群配置学习
分享到:
使用spring管理MongoDB数据库
使用spring管理MongoDB数据库安装Spring for Mongodb Spring项目为方便对Mongodb的操作,建立了spring-data的子项目,地址在: http://www.springsource.org/spring-data/mongodb,目前版本是1.0.0M2阶段,已支持对Mongodb的一系列基本操作。我们先从http://www.springsource.org/spring-data/mongodb中下载相关的包...
如何部署高可用MongoDB集群
如何部署高可用MongoDB集群 在大数据的时代,传统的关系型数据库要能更高的服务必须要解决高并发读写、海量数据高效存储、高可扩展性和高可用性这些难题。不过就是因为这些问题Nosql诞生了。 NOSQL有这些优势: 大数据量,可以通过廉价服务器存储大量的数据,轻松摆脱传统mysql单表存储量级限制。 高扩展性,Nosq...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……