MongoDB分片
MongoDB 集群部署形态。mongos起到路由功能,功能供程序连接。在启动时从配置服务器加载集群信息,开启mongos进程需要知道配置服务器的地址,指定configdb选项。cs保存集群和分片的元数据。即各分片(shard)包含哪些数据信息等。Shard是存储了集合部分数据的MongoDB实例。其工作模式大致是应用程序通过mongos路由到cs中取元数据,然后通过元数据到shard中取数据并返回。如下图:
若此过程中cs节点发生变化,如某节点宕机,添加节点或发生迁移时等情况下,理想情况下应该修改mongos的sharding.configdb参数,因为极端状态下,如cs节点完全迁移,则会导致mongos连接不上cs节点。所以在cs节点发生迁移的情况下,需要修改mongos的configdb选项。
三个组件:
- mongos:
前端路由,客户端由此接入,且让整个集群看上去像单个数据库。
- CS(Config Server):
mongod实例,存储了整个ClusterMetadata,其中包括chunk信息。
- Shard:
用于存储实际的数据。它由几台机器组成的replica set(副本集)承担。
设置分片
> use admin
> db.runCommand({ addshard: 'rs0/localhost:27020,localhost:27021'})
> db.runCommand({ addshard: 'rs1/localhost:27030,localhost:27031'})
> db.runCommand({ enablesharding: 'test'})
> db.runCommand({ shardcollection: 'test.user', key: {name: 1}})
项目中在执行shardcollection时报了”casesharding already enabled for collection testdb.table2”,原因是该步骤没有实现幂等,cs库中已经存在该表的信息。
具体解决方法可参考我的博文: MongoDB报"sharding already enabled for collection xxx"的错误。