目标
使用三台物理机做数据库集群 任意一台宕机之后不会影响线上的业务运转 不会有任何的数据丢失
方案
采用的是Replica Sets+Sharded Cluster的集群 具有高可用,故障转移,分布式存储等特性
依上图所示我们此次集群配置如下: 三台物理机,每台物理机拥有完整的分片集群配置,都可独立运行 配置服务器:使用使用3个配置服务器确保元数据完整性。 路由(mongos)进程:使用3个路由进程实现平衡,提高客户端接入性能 3 个分片进程:Shard11,Shard12,Shard13 组成一个副本集,提供Sharding 中 Shard1 的功能。 3 个分片进程:Shard21,Shard22,Shard23 组成一个副本集,提供Sharding 中 Shard2 的功能。
构建一个 mongoDB Sharding Cluster 需要三种角色:shard 服务器(ShardServer)、配置服务器(config Server)、路由进程(Route Process)
- Shard 服务器
shard 服务器即存储实际数据的分片, 每个 shard 可以是一个 mongod 实例, 也可以是一组 mongod 实例构成的 Replica Sets. 为了实现每个 Shard 内部的故障 自动转换, MongoDB 官方建议每个 shard 为一组 Replica Sets.
- 配置服务器
为了将一个特定的 collection 存储在多个 shard 中, 需要为该 collection 指定 一个 shard key, 决定该条记录属于哪个 chunk, 配置服务器可以存储以下信息, 每个shard节点的配置信息, 每个chunk的shard key范围, chunk在各shard 的分布情况, 集群中所有 DB 和 collection 的 sharding 配置信息。
- 路由(mongos)进程
它是一个前端路由,客户端由此接入, 首先询问配置服务器需要到哪个 shard 上查询或保存记录, 然后连接相应的 shard 执行操作,最后将结果返回给客户端, 客户端只需要将原本发给 mongod 的查询或更新请求原封不动地发给路由进程, 而不必关心所操作的记录存储在哪个shard 上。
实施
目前我在自己电脑上搭建该环境即就一台物理机
先规划下端口分配
mongos1 | mongos2 | mongos3 |
10011 | 10012 | 10013 |
config1 | config2 | config3 |
10021 | 10022 | 10023 |
share11 | share12 | share13 |
10031 | 10032 | 10033 |
share21 | share22 | share23 |
10041 | 10042 | 10043 |
文件目录
先创建一个如下的目录结果 mengfaniaodeMBP:third_software mengfanxiao$ tree mongodb/ mongodb/ ├── node1 │ ├── config-server1 │ │ ├── backup │ │ ├── config │ │ │ └── config.conf │ │ └── db │ ├── mongos1 │ │ ├── backup │ │ ├── config │ │ │ └── config.conf │ │ └── db │ ├── shard11 │ │ ├── backup │ │ ├── config │ │ │ └── config.conf │ │ └── db │ └── shard21 │ ├── backup │ ├── config │ │ └── config.conf │ └── db ├── node2 │ ├── config-server2 │ │ ├── backup │ │ ├── config │ │ │ └── config.conf │ │ └── db │ ├── mongos2 │ │ ├── backup │ │ ├── config │ │ │ └── config.conf │ │ └── db │ ├── shard12 │ │ ├── backup │ │ ├── config │ │ │ └── config.conf │ │ └── db │ └── shard22 │ ├── backup │ ├── config │ │ └── config.conf │ └── db └── node3 ├── config ├── config-server3 │ ├── backup │ ├── config │ │ └── config.conf │ └── db ├── db ├── mongos3 │ ├── backup │ ├── config │ │ └── config.conf │ └── db ├── shard13 │ ├── backup │ ├── config │ │ └── config.conf │ └── db └── shard23 ├── backup ├── config │ └── config.conf └── db 如果3台物理机的话 把对应的node1 node2 node3复制过去即可