MONGODB Sharding 安装 与网上我没有找到的 Answer

MONGODB Sharding 安装 与网上我没有找到的 Answer

本来今天应该是MYSQL的文字,不过最近搞的MONGO比较多,测试MGR 的集群出了问题正在解决,所以今天和明天都是MONGODB 的文字

正文:

早上正在忙昨天MYSQL 的事情时,开发和数据分析的女神姐姐找过来,神秘的微笑,一般女神姐姐是不过来找我的,然后就给我送了一个大礼。

我被告知要上一个用户行为分析的项目,而这个项目需要很快出一个Demo,这个大礼的重点就是数据量,数据量,数据量,多少数据量呢,也不多,一个小时3000万条。数据均是从用户手机端过来的,每个用户几分钟就有几百条数据,用户端有多少,这个就不变透露了。然后一句话问我,咋办。

其实这时候我脑子里面已经蹦出几个方案了, TIDB ,是不错的方案,以前没有只是没有应用的场景,但本次因输入的数据是JSON 格式,所以只好作罢,并且公司已经有几个MONGODB 的项目,且有关键项目,已经和业务强关联了,当然MongoDB是我来到这个公司引入的,所以就有了下面的文字

MONGODB 分片是不错的一种横向扩展的方式,PG 有分片技术,MYSQL 有分库技术,此次选择MONGODB 分片的主要原因有2

1  MONGODB 的分片技术成熟,新的技术也是想用,不过最近的活是在是比较多,实在是没有精力去踩新坑,Postgresql 替换ORACLE 的财务项目我还没完全投入。

2  使用的人员已经熟悉了有MONGODB 的生活,从用过MONGODB 后一直都是稳定的,大家认同感很强

其实MONGODB 的分片组成是通过 路由,分片的集群,和config server 来组成的

从图上看

MONGODB Sharding 安装 与网上我没有找到的 Answer

其中 SHARDING 就是存储数据的地方,每个SHARDING 仅仅存放属于自己的那份数据,所有的SHRDING 在一起,则是一个完整的数据集。 

Mongos 则是路由,是将客户端索取数据与 sharding 之间进行连接,使得他们能获得自己要的数据。官方推荐的的MONGOS 的配置方法 ,可以将MONGOS 放置在应用服务器中,缩短应用和路由之间的访问的时间消耗

,还有一种是将Mongos 放置到专用的机器中,这比较适合大型应用的部署,避免某些因为资源征用等等造成的问题。

Config server 则是存储Sharding的cluster 的metadata 信息,如果这个节点坏掉了,那你就不能从集群中获取到数据了。

安装单机和复制集的MONGO 这里就不啰嗦了那是很简单的事情,分片的安装以下几点需要知道

1 存储引擎必须是wiredtiger

2 为了自己的名声和MONGO的名声,安装MONGO 分片你可千万要做认证,不过好玩的是,网上大部分搭建mongo分片的文字,大多是在裸奔,没有权限认证,这可不大好。所有的集群和分片中的机器需要有统一的keyfile

3  网上的文章大部分是mongo 3.2 之前的,分片搭建,本次使用的是mogno4.0 来搭建的分片,由于mongo 发展较快,mongo3.4  以上的版本和以下的版本,很多地方都不一样了,所以如果你在使用mongo 还是建议 mongo 3.6 及以上的版本。

4  任何对分片数据的访问,都需要通过MONGOS 来进行,不应该通过单独访问数据分片的复制集来进行处理。

5  如果上新的表没有进行分片键的选择,则数据会直接进入到主分片

网上的安装过程很多,下面就捡一些安装中遇到的坑和或许 G 一下可能就找到了的answer,没有找到的answer 可能和用的国内的 搜索平台有关,但的确是没找到.

安装config server 没有配置权限的问题,网上的安装文档,在安装config server 时大部分都是没有配置权限的,而即使配置了权限,也没有提到一个关键的问题,到底mongos 的认证, 下图的就是标记mongos 的配置文件中,如果你要进行权限的认证,就需要设置 clusterAuthMode:"keyFile",其实这个选择项如果你不输入,其实默认也是开启的当然如果你是在是暂时无法解决权限,认证的问题,你也可以设置 transitionToAuth: true 来暂时让无认证的节点暂时能进行工作,但最好还是进行认证,并通过认证的方式来进行访问。

MONGODB Sharding 安装 与网上我没有找到的 Answer

问题2

keyFile 到底是否需要一样,当然上到MONGOS 下到 Sharding  config server 需要的  keyfile 必须都是一样的,否则怎么进行登录和验证。

问题3

是否可以使用单机作为分片集的节点,当然是可以,但在生产强烈不建议这样做,如果是不重要的数据或者测试,节省相关的资源是可以的。

MONGODB Sharding 安装 与网上我没有找到的 Answer

另外一个问题是mongodb sharding 重要的一个地方是需要有分片键,一个分片键的好坏直接会导致你的这个分片collection的成功与否。 

其实分片键这个问题,放到别的数据库也是一样,分片键支持 散列和范围两种,散列的方式可以将数据打的更散,并且数据的分布会更均匀,但不好的地方也是显而易见的,就是查询要耗费的costing 高.

使用范围查询会对针对某一块的固定值的查询或一个指定范围的查询落在一个分片键的位置上这样的对查询有利,数据会很快的被提取,但毛病是分片键可能很难做到数据分布更均匀,对数据的均匀分布在每个分片键上其实是一个可能会遇到的问题。

最后将mongos  config server  sharding  的配置文件的不同点说一下。

1  Mongos 的配置文件中不需要标注 storage:

    需要注明:config server 的具体地址和端口

    并且要标注集群访问的方式

MONGODB Sharding 安装 与网上我没有找到的 Answer

mongo config server   需要在每个config server 集群中标注 

cluserRole

MONGODB Sharding 安装 与网上我没有找到的 Answer

mongo 的sharding 集群的每台机器则也需要添加 cluserRole 标识机器。

MONGODB Sharding 安装 与网上我没有找到的 Answer

一般来说如果数据量不大的情况下,其实没有必要使用MONGODB 的分片技术,而如果数据量较大,并且有一些数据的分析需求,则MONGODB 的分片技术,是不会让你失望的,这也是一般传统数据库所不能呢。

当然这事不算晚,重要的是如何选择分片,以及在什么情形下怎么分片,这的还的找一期来 论论。

MONGODB Sharding 安装 与网上我没有找到的 Answer