热门标签 | 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()
```

推荐阅读
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 作为一名新手,您可能会在初次尝试使用Eclipse进行Struts开发时遇到一些挑战。本文将为您提供详细的指导和解决方案,帮助您克服常见的配置和操作难题。 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文详细介绍了 GWT 中 PopupPanel 类的 onKeyDownPreview 方法,提供了多个代码示例及应用场景,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • ImmutableX Poised to Pioneer Web3 Gaming Revolution
    ImmutableX is set to spearhead the evolution of Web3 gaming, with its innovative technologies and strategic partnerships driving significant advancements in the industry. ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
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社区 版权所有