热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MongoDB集群配置学习

1.mongodb的主从复制:主服务器:mongod--dbpathF:\mongodb\data--port27017从服务器:mongod--slave--dbpathF:\mongodb-slave\data--port10001--sourcelocalhost:27017--onlytest选项说明:--on

1. mongodb的主从复制:

主服务器:

mongod --dbpath "F:\mongodb\data" --port 27017

从服务器:

mongod --slave --dbpath "F:\mongodb-slave\data" --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-node1\data" --port 10001 --replSet blort/fornane-PC:10002

第二个节点启动命令:

mongod --dbpath "F:\mongodb-node2\data" --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-node3\data" --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


推荐阅读
  • 本文介绍了如何使用Node.js通过两种不同的方法连接MongoDB数据库,包括使用MongoClient对象和连接字符串的方法。每种方法都有其特点和适用场景,适合不同需求的开发者。 ... [详细]
  • MongoDB核心概念详解
    本文介绍了NoSQL数据库的概念及其应用场景,重点解析了MongoDB的基本特性、数据结构以及常用操作。MongoDB是一个高性能、高可用且易于扩展的文档数据库系统。 ... [详细]
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • Asynchronous JavaScript and XML (AJAX) 的流行很大程度上得益于 Google 在其产品如 Google Suggest 和 Google Maps 中的应用。本文将深入探讨 AJAX 在 .NET 环境下的工作原理及其实现方法。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 华为与红帽联手,加速开源电信软件革新
    华为与红帽携手合作,旨在加速开源电信软件的发展,以满足大型电信运营商对灵活网络解决方案的需求。 ... [详细]
  • 从CodeIgniter中提取图像处理组件
    本指南旨在帮助开发者在未使用CodeIgniter框架的情况下,如何独立使用其强大的图像处理功能,包括图像尺寸调整、创建缩略图、裁剪、旋转及添加水印等。 ... [详细]
  • 如何在U8系统中连接服务器并获取数据
    本文介绍了如何在U8系统中通过不同的方法连接服务器并获取数据,包括使用MySQL客户端连接实例的方法,如非SSL连接和SSL连接,并提供了详细的步骤和注意事项。 ... [详细]
  • Redis:缓存与内存数据库详解
    本文介绍了数据库的基本分类,重点探讨了关系型与非关系型数据库的区别,并详细解析了Redis作为非关系型数据库的特点、工作模式、优点及持久化机制。 ... [详细]
  • 第一步java代码条件匹配与之对应的mongo数据查询第二步:java代码分组查询与之所对应的mongodb中sheel与所得出的表点击某个_id字段进入,所得出的图表为第三步:在 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • Oracle字符集详解:图表解析与中文乱码解决方案
    本文详细解析了 Oracle 数据库中的字符集机制,通过图表展示了不同字符集之间的转换过程,并针对中文乱码问题提供了有效的解决方案。文章深入探讨了字符集配置、数据迁移和兼容性问题,为数据库管理员和开发人员提供了实用的参考和指导。 ... [详细]
  • 调试利器SSH隧道
    在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需要通过线上域名才能正常访问。但我们一般都会在本地开发,因为这能快速的看到 ... [详细]
  • 解决PHP项目在服务器无法抓取远程网页内容的问题
    本文探讨了在使用PHP进行后端开发时,遇到的一个常见问题:即在本地环境中能够正常通过CURL获取远程网页内容,但在服务器上却无法实现。我们将分析可能的原因并提供解决方案。 ... [详细]
author-avatar
又未命名
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有