1. Mongodb副本集示例
1.1 副本集概念
副本集是一组运行在不同服务器上的 MongoDB 实例,这些实例保持相同的数据,提供一种 MongoDB 数据的冗余备份方案和自动故障转移。
1.2 配置副本集
配置副本集需要指定一组 MongoDB 实例和一个可选的配置文件,用于配置副本集。每个实例都是一个节点,其中一个节点为主节点 (primary),其他实例为从节点 (secondary)。
# 创建数据目录
mkdir -p /data/rs1 /data/rs2 /data/rs3
# 启动三个 MongoDB 实例
mongod --replSet rs0 --port 27017 --dbpath /data/rs1
mongod --replSet rs0 --port 27018 --dbpath /data/rs2
mongod --replSet rs0 --port 27019 --dbpath /data/rs3
接下来进入 MongoDB shell,初始化副本集。
# 连接 MongoDB 实例
mongo --port 27017
# 执行命令初始化副本集
rs.initiate()
副本集初始化完成后,可以通过运行以下命令来查看副本集状态。
rs.status()
1.3 副本集故障转移
故障转移是指当主节点 (primary) 发生故障,副本集能够自动将一个从节点 (secondary) 提升为新的主节点,并保证数据的一致性。
在 MongoDB shell 中,可以通过运行以下命令模拟主节点故障。
# 查看当前主节点
rs.isMaster()
# 关闭当前主节点
use admin
db.shutdownServer()
# 查看当前主节点,已经变成从节点
rs.isMaster()
可以看到原先的主节点已经变成了从节点。通过运行以下命令,可以查看新的主节点。
rs.status()
2. Mongodb分片示例
2.1 分片概念
分片是指将 MongoDB 数据库分布在多个服务器上,以提高系统的扩展性和可用性。
MongoDB 使用分片集群来管理分布式数据,其中一个分片集群由多个分片节点组成。
2.2 建立分片
建立一个 MongoDB 分片需要至少三个服务器。
首先启动一个 Mongos 实例,Mongos 是一个 MongoDB 数据路由器,用于将客户端请求路由到相应的分片节点。
# 启动 Mongos 实例
mongos --configdb rs0/localhost:27017,localhost:27018,localhost:27019 --port 27020
接着,在 Mongos 实例中执行以下命令添加一个新的分片。
sh.addShard("rs1/localhost:27017")
为了验证分片是否成功建立,可以在 Mongos 实例中执行以下命令查看分片状态。
sh.status()
2.3 分片策略
MongoDB 提供了两种分片策略:区间分片 (range-based sharding) 和哈希分片 (hash-based sharding)。
区间分片会将数据划分为不同的区间,并将每个区间存储在不同的分片节点上。哈希分片会将数据映射到一个哈希值,并将哈希值相近的数据存储在相邻的分片节点上。
在 MongoDB 中,可以根据集合的大小和读写负载选择适合的分片策略。较小的集合比较适合使用区间分片,较大的集合比较适合使用哈希分片。
2.4 分片集群监控
分片集群监控是指管理 MongoDB 分片集群的关键任务之一,可以通过 MongoDB 提供的工具进行监控,如 mongostat、mongotop 和 mongosniff。
mongostat 用于查看 MongoDB 数据库的状态和性能信息,如连接数、运行时间、I/O 等待情况。
mongostat
mongotop 用于查看每个集合的读写情况。
mongotop
mongosniff 用于捕获 MongoDB 数据流,进行网络分析。
mongosniff
总结
本文介绍了 MongoDB 的两个重要特性:副本集和分片。副本集是一种 MongoDB 数据的冗余备份方案和自动故障转移方案,可以提高系统的可用性和可靠性。分片是 MongoDB 的扩展性和可用性的核心组件,可以将大型数据库分片存储在多个服务器上,以提高数据库查询、写入和分析的性能。