MongoDB集群配置:副本集与分片详解
作者:手机用户2502857113 | 来源:互联网 | 2024-12-27 08:02
本文详细介绍了如何在MongoDB中配置副本集(ReplicaSets)和分片(Sharding),并提供了具体的步骤和命令,帮助读者理解并实现高可用性和水平扩展的MongoDB集群。
### 环境准备 为了搭建一个完整的MongoDB集群,首先需要准备三台服务器,并确保它们之间可以相互通信。 #### 配置副本集1 (shard1) 我们将为第一个分片配置一个包含三个节点的副本集。每个节点将运行在不同的服务器上,并使用相同的端口27017。 - **Server A**: ```bash /app/mongo/mongodb/bin/mongod --shardsvr --replSet shard1 --port 27017 --dbpath /app/mongo/data/shard1_1 --logpath /app/mongo/data/shard1_1/shard1_1.log --logappend --fork ``` - **Server B**: ```bash /app/mongo/mongodb/bin/mongod --shardsvr --replSet shard1 --port 27017 --dbpath /app/mongo/data/shard1_2 --logpath /app/mongo/data/shard1_2/shard1_2.log --logappend --fork ``` - **Server C**: ```bash /app/mongo/mongodb/bin/mongod --shardsvr --replSet shard1 --port 27017 --dbpath /app/mongo/data/shard1_3 --logpath /app/mongo/data/shard1_3/shard1_3.log --logappend --fork ``` 接下来,连接到任意一台机器的27017端口,初始化副本集shard1。 ```bash /app/mongo/mongodb/bin/mongo --port 27017 ``` 在Mongo shell中执行以下命令来初始化副本集配置: ```Javascript cOnfig= {_id: 'shard1', members: [{_id: 0, host: '132.42.33.212:27017'}, {_id: 1, host: '132.42.33.213:27017'}, {_id: 2, host: '132.42.33.214:27017'}]} rs.initiate(config) ``` #### 配置副本集2 (shard2) 同样的方法,为第二个分片配置另一个包含三个节点的副本集,但这次使用端口27018。 - **Server A**: ```bash /app/mongo/mongodb/bin/mongod --shardsvr --replSet shard2 --port 27018 --dbpath /app/mongo/data/shard2_1 --logpath /app/mongo/data/shard2_1/shard2_1.log --logappend --fork ``` - **Server B**: ```bash /app/mongo/mongodb/bin/mongod --shardsvr --replSet shard2 --port 27018 --dbpath /app/mongo/data/shard2_2 --logpath /app/mongo/data/shard2_2/shard2_2.log --logappend --fork ``` - **Server C**: ```bash /app/mongo/mongodb/bin/mongod --shardsvr --replSet shard2 --port 27018 --dbpath /app/mongo/data/shard2_3 --logpath /app/mongo/data/shard2_3/shard2_3.log --logappend --fork ``` 同样地,连接到任意一台机器的27018端口,初始化副本集shard2。 ```bash /app/mongo/mongodb/bin/mongo --port 27018 ``` 在Mongo shell中执行以下命令来初始化副本集配置: ```Javascript cOnfig= {_id: 'shard2', members: [{_id: 0, host: '132.42.33.212:27018'}, {_id: 1, host: '132.42.33.213:27018'}, {_id: 2, host: '132.42.33.214:27018'}]} rs.initiate(config) ``` #### 配置配置服务器 (Config Servers) 配置服务器用于存储集群的元数据信息。 ```bash /app/mongo/mongodb/bin/mongod --configsvr --dbpath /app/mongo/data/config --port 20000 --logpath /app/mongo/data/config/config.log --logappend --fork ``` #### 配置路由进程 (Route Processes) 路由进程负责将客户端请求分发到适当的分片。 ```bash /app/mongo/mongodb/bin/mongos --configdb 132.42.33.212:20000,132.42.33.213:20000,132.42.33.214:20000 --port 30000 --chunkSize 1 --logpath /app/mongo/data/mongos.log --logappend --fork ``` #### 配置分片集群 通过连接到任意一台机器的30000端口,进入Mongo shell并切换到admin数据库,开始配置分片环境。 ```bash /app/mongo/mongodb/bin/mongo --port 30000 use admin ``` 添加分片: ```Javascript db.runCommand({addShard: 'shard1/132.42.33.212:27017,132.42.33.213:27017,132.42.33.214:27017'}) db.runCommand({addShard: 'shard2/132.42.33.212:27018,132.42.33.213:27018,132.42.33.214:27018'}) ``` 启用分片功能: ```Javascript db.runCommand({enableSharding: 'test'}) db.runCommand({shardCollection: 'test.users', key: {_id: 1}}) ``` #### 验证分片 最后,验证分片是否正常工作。连接到任意一台机器的30000端口,进入Mongo shell并切换到test数据库。 ```bash use test ``` 插入一些测试数据: ```Javascript for(var i = 1; i <= 200000; i++) { db.users.insert({id: i, addr_1: 'beijing', addr_2: 'shanghai'}) } ``` 检查集合的状态: ```Javascript db.users.stats() ```
推荐阅读
本文介绍了如何利用MongoDB的$exists操作符在Java应用程序中检查特定字段是否存在于文档中,包括示例代码和解释。 ...
[详细]
蜡笔小新 2024-12-18 18:41:13
本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ...
[详细]
蜡笔小新 2024-12-26 19:47:05
根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ...
[详细]
蜡笔小新 2024-12-26 10:42:40
本文探讨了在通过 API 端点调用时,使用猫鼬(Mongoose)的 findOne 方法总是返回 null 的问题,并提供了详细的解决方案和建议。 ...
[详细]
蜡笔小新 2024-12-25 17:40:33
本文详细介绍了 Linux 系统中用户、组和文件权限的设置方法,包括基本权限(读、写、执行)、特殊权限(SUID、SGID、Sticky Bit)以及相关配置文件的使用。 ...
[详细]
蜡笔小新 2024-12-20 09:27:23
本文深入探讨了如何使用 Jest 和 Supertest 进行接口测试,通过实际案例详细解析了测试环境的搭建、测试用例的编写以及异步测试的处理方法。 ...
[详细]
蜡笔小新 2024-12-14 19:04:38
本文探讨了使用Apache、Memcached-Session-Manager和Tomcat集群构建高性能Web应用过程中遇到的问题及解决方案。通过重新设计物理架构,解决了单虚拟机环境无法真实模拟分布式环境的问题,并详细记录了性能测试结果。 ...
[详细]
蜡笔小新 2024-12-14 10:07:53
This guide provides a comprehensive step-by-step approach to successfully installing the MongoDB PHP driver on XAMPP for macOS, ensuring a smooth and efficient setup process. ...
[详细]
蜡笔小新 2024-12-27 19:58:25
本文探讨了2012年4月期间,淘宝在技术架构上的关键数据和发展历程。涵盖了从早期PHP到Java的转型,以及在分布式计算、存储和网络流量管理方面的创新。 ...
[详细]
蜡笔小新 2024-12-24 12:12:13
本文详细介绍了 Java 中的 org.apache.hadoop.registry.client.impl.zk.ZKPathDumper 类,提供了丰富的代码示例和使用指南。通过这些示例,读者可以更好地理解如何在实际项目中利用 ZKPathDumper 类进行注册表树的转储操作。 ...
[详细]
蜡笔小新 2024-12-23 14:15:06
本文详细介绍了Hadoop的不同发行版本及其特点,帮助读者根据实际需求选择最合适的Hadoop版本。内容涵盖Apache Hadoop、Cloudera CDH等主流版本的特性及应用场景。 ...
[详细]
蜡笔小新 2024-12-22 20:38:12
本文详细探讨了 org.apache.hadoop.ha.HAServiceTarget 类中的 checkFencingConfigured 方法,包括其功能、应用场景及代码示例。通过实际代码片段,帮助开发者更好地理解和使用该方法。 ...
[详细]
蜡笔小新 2024-12-22 18:28:35
本文深入探讨了白盒和黑盒监控的概念,以及它们在系统监控中的应用。通过详细分析基础监控和业务监控的不同采集方法,结合四个黄金指标的解读,帮助读者更好地理解和实施有效的监控策略。 ...
[详细]
蜡笔小新 2024-12-22 14:02:29
本文详细介绍了EasyReport,一个易于使用的开源Web报表工具。该工具支持Hadoop、HBase及多种关系型数据库,能够将SQL查询结果转换为HTML表格,并提供Excel导出、图表显示和表头冻结等功能。 ...
[详细]
蜡笔小新 2024-12-22 11:11:28
本文探讨了如何在Hive(基于Hadoop)环境中编写类似SQL的语句,以去除字段中的空格。特别是在处理邮政编码等数据时,去除特定位置的空格是常见的需求。 ...
[详细]
蜡笔小新 2024-12-20 19:08:43
手机用户2502857113
这个家伙很懒,什么也没留下!