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()
```
推荐阅读
-
本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ...
[详细]
蜡笔小新 2024-12-26 08:25:19
-
本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ...
[详细]
蜡笔小新 2024-12-26 13:21:38
-
-
在macOS环境下使用Electron Builder进行应用打包时遇到签名验证失败的问题,具体表现为签名后spctl命令检测到应用程序未通过公证(Notarization)。本文将详细探讨该问题的原因及解决方案。 ...
[详细]
蜡笔小新 2024-12-28 13:08:30
-
本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ...
[详细]
蜡笔小新 2024-12-28 09:46:23
-
本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ...
[详细]
蜡笔小新 2024-12-28 08:39:55
-
本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ...
[详细]
蜡笔小新 2024-12-27 15:06:12
-
本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ...
[详细]
蜡笔小新 2024-12-27 10:18:13
-
本文详细探讨了在Android 8.0设备上使用ChinaCock的TCCBarcodeScanner进行扫码时出现的应用闪退问题,并提供了解决方案。通过调整配置文件,可以有效避免这一问题。 ...
[详细]
蜡笔小新 2024-12-27 10:10:31
-
本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ...
[详细]
蜡笔小新 2024-12-26 22:04:19
-
本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ...
[详细]
蜡笔小新 2024-12-26 19:47:05
-
本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ...
[详细]
蜡笔小新 2024-12-26 17:34:42
-
蜡笔小新 2024-12-26 13:29:32
-
实体映射最强工具类:MapStruct真香 ...
[详细]
蜡笔小新 2024-12-25 16:22:17
-
本周开发笔记重点介绍了在新项目中使用MQTT协议进行硬件连接的技术细节,涵盖其特性、原理及实现步骤。 ...
[详细]
蜡笔小新 2024-12-27 11:30:44
-
微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ...
[详细]
蜡笔小新 2024-12-25 14:08:03
-
手机用户2502857113
这个家伙很懒,什么也没留下!