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

MongoDB集群配置:副本集与分片详解

本文详细介绍了如何在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()
```

推荐阅读
author-avatar
手机用户2502857113
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有