注册

Mongodb副本集和分片示例详解

下面我来为您详细讲解“Mongodb副本集和分片示例详解”的完整攻略。

一、Mongodb副本集

1. 什么是Mongodb副本集

Mongodb副本集是Mongodb数据库提供的一种高可用性解决方案。通过Mongodb副本集的架构,可以保证在某个节点出现故障的情况下,数据库仍然可以在其他节点正常运行。

2. Mongodb副本集架构

Mongodb副本集由三个或以上的Mongodb节点组成。其中一个节点被称为主节点。其它节点被称为从节点。主节点处理客户端的写操作,并将这些操作同步到所有从节点。从节点只能处理客户端的读操作,不能进行写操作。如果主节点不可用,则从节点中的一个节点会被选举为新的主节点。

3. Mongodb副本集示例说明

下面是一个Mongodb副本集示例:

# 开启三个Mongodb节点
mongod --port 27017 --dbpath /data/db1 --replSet rs1
mongod --port 27018 --dbpath /data/db2 --replSet rs1
mongod --port 27019 --dbpath /data/db3 --replSet rs1

# 连接其中一个节点,并进行初始化
mongo --host 127.0.0.1:27017
rs.initiate({_id:"rs1",members:[
  {_id:0,host:"127.0.0.1:27017"},
  {_id:1,host:"127.0.0.1:27018"},
  {_id:2,host:"127.0.0.1:27019"}
]})

说明:

  • 第一行开启了三个Mongodb节点,并指定了端口号、数据存储路径和副本集名称。
  • 第二行连接节点1,并进行初始化。在初始化过程中,Mongodb会将节点1选举为主节点,其他节点即为从节点。

二、Mongodb分片

1. 什么是Mongodb分片

Mongodb分片是将一个大型的Mongodb数据库分成多个较小的部分,存储在多个物理节点上,从而提高数据库的文档处理能力。

2. Mongodb分片架构

Mongodb分片由三个或以上的Mongodb节点组成。其中一个节点被称为分片路由器(mongos),其它节点被称为分片集群(shard cluster)。分片路由器负责将客户端的读写请求路由到正确的分片集群上。分片集群处理客户端的读写请求,将数据存储在独立的物理节点上。

3. Mongodb分片示例说明

下面是一个Mongodb分片示例:

# 开启三个Mongodb节点作为分片集群
mongod --port 27017 --dbpath /data/db1 --shardsvr
mongod --port 27018 --dbpath /data/db2 --shardsvr
mongod --port 27019 --dbpath /data/db3 --shardsvr

# 开启一个Mongodb节点作为分片路由器
mongos --configdb 127.0.0.1:27017,127.0.0.1:27018,127.0.0.1:27019

# 连接分片路由器
mongo --host 127.0.0.1 --port 27017

# 添加分片
sh.addShard("127.0.0.1:27017")
sh.addShard("127.0.0.1:27018")
sh.addShard("127.0.0.1:27019")

# 创建集合,并启用分片
use mydb
db.createCollection("mycollection")
sh.enableSharding("mydb")
sh.shardCollection("mydb.mycollection", {name:1})

说明:

  • 第一行开启三个Mongodb节点作为分片集群,并指定了端口号、数据存储路径和--shardsvr参数。
  • 第二行开启一个Mongodb节点作为分片路由器。--configdb参数指定了分片路由器要连接的配置服务器。
  • 第三行连接分片路由器。
  • 第四行添加分片。在分片之前,需要先添加分片集群。
  • 第五行创建集合,并启用分片。sh.enableSharding()方法启用给定数据库的分片功能,sh.shardCollection()方法对指定的集合启用分片,按照{name:1}的方式对mycollection进行分片。