最近抽了点时间整理一年前做过的MongoDB分片集群部署,具体如有图并结合下述案例分析:
分片集群配置
Shard Server: mongod实例,用于存储实际的数据块,实际生产环境中一个Shard Server角色可由几台机器组和一个Replica Set承担,防止主机单点故障。
Config Server: mongod实例,存储了整个Cluster Metadata,其中包括Chunk信息。
Route Server: mongos实例,前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。
主要思路如下:
分片
3个分片Sharding,每一个分片由3个节点构成1主2备的Replica Set
分片复本集shard1(三个分片节点构成一个复本集):127.0.0.1:10001、127.0.0.1:10002、127.0.0.1:10003
分片复本集shard2(三个分片节点构成一个复本集):127.0.0.1:20001、127.0.0.1:20002、127.0.0.1:20003
分片复本集shard3(三个分片节点构成一个复本集):127.0.0.1:30001、 127.0.0.1:30002、 127.0.0.1:30003
配置节点
Configsvr(三个配置服务器节点):127.0.0.1:10004、127.0.0.1:20004、127.0.0.1:30004
路由节点
1个路由节点Mongos
Mongos(一个路由节点):127.0.0.1:27017
搭建集群
创建Sharding和Replica Set
创建并配置第一组
|
|
启动并配置shard1
创建并配置第二组
|
|
启动并配置shard2
创建并配置第三组
|
|
启动并配置shard3
启动三个配置服务节点Configsvr
|
|
启动一个路由点Mongos
|
|
配置分片
|
|
查看配置结果
|
|
如果不激活数据库分片,数据库只会存在一个Shard中,一旦激活数据库分片,数据库中不同的Collection将被存放在不同的Shard上,但一个Collection仍旧存放在同一个Shard上,要使单个Collection也分片,还需单独对Collection作些操作
要使单个Collection也分片存储,需要给Collection指定一个分片key,通过以下命令操作:
查看Collection分片信息
集群中出现问题处理:
Mongos节点宕机
一个Mongos进程应该运行在每一个应用程序服务器上,这个服务器应该独占这个Mongos进程,并且通过它与分片集群来通讯。
Mongos进程不是持久化的,相反,它们在启动的时候从Config Server上收集所有必须的配置信息。这表明,任何一个应用程序服务器节点故障,对作为一个整体的分片集群来讲并没有什么影响,所有别的应用程序服务器将依然是继续正常工作。在这种情况下,恢复是一个相当简单的事情,我们只需要去启动一个新的应用程序服务器和一个新的Mongos进程即可。
分片中的某一个Mongod节点宕机
每一个分片由n个服务器构成,这n个服务器被配置为一个复制集(replica set)。如果在复制集中的任何一个节点宕机,在这个分片上读与写操作任然是允许的。更加重要的是,宕机服务器上的数据都不会丢失,因为复制机制存在一个选项,那就是强制复制写操作到分片的其它节点上再返回,这与在Dynamo上设置write=2类似。在MongoDB v1.6以后版本中Replica sets才是可用的。
分片中的所有Mongod节点宕机
如果一个分片中的全部节点(replicas)都宕机了,在该分片内的数据将不能被访问。然而,操作任然是继续进行,只不过是由别的分片分担。看文档就可以弄清楚为什么这样。如果分片被配置为一个复制集(Replicas set),至少一个成员应该在另外一个数据中心,那样的话,整个分片都宕机几乎是不可能的。为了有更大的冗余度,推荐这样进行配置。
一个Config Server宕机
一个产品级的分片集群需要有3个Config Server进程,每一个进程都在一台独立的机器上运行。对于Config server中的集群元数据的写操作使用一个两阶段提交,去确保是一个原子的并且是被复制的事务操作。
在任何一个配置服务器失效的时候,Mongodb集群的元数据都会变成为只读了。集群系统继续运行,但是chunks在一个分片中将会成为不可以被拆分或者是不可以跨分片进行迁移。对于大多数使用场景,这个不会导致问题,应为改变Chunk元数据进行的并不频繁。
另外,使宕机的Config Server在一个合理的时间周期(一天)内恢复是相当重要的,这样可以避免分片由于缺乏迁移而变得负载不均衡(相对而言,对于大多数产品场景,这种现象也不是很严重的事情)。
如需MongoDB客户端工具,强烈推荐MongoVUE,但由于高版本并不支持长期免费试用,因此只能破解原生版本,如有需要,可以移步mongoVUE1.5完全破解版赠送 获取。
(The End)