Daily Archives: August 29th, 2011

MongoDB-分片

关于MongoDB的分片,网上有许多资料。象Sharding IntroductionSimple Initial Sharding ArchitectureSharding Administration配置mongodb分片群集(sharding cluster)。但是这些文档对分片数据服务器mongod、配置服务器(config server)和路由服务器mongos的关系,都是一带而过。让我搜了半天才明白。现把我的理解记下来,要不然过几天我又忘了。 配置服务器实际上保持的是一个路由表。而路由服务器自己没有保存任何配置数据。路由服务器将什么数据在哪个分片(数据服务器)的信息保存到配置服务器中。配置服务器和分片数据服务器之间没有任何的物理连接关系。他们之间的逻辑关系也完全通过路由服务器来建立。不需要手工往配置服务器中添加有哪些分片数据服务器。而是再启动路由服务器时指定配置服务器,再往路由服务器服务器添加分片数据服务器。 试着用mongo连接到数据服务器,往里面插几条记录。那么基本上会发现,这些记录会保持到其中一个分片中。那是因为MongoDB会写完一个数据块才会分区。数据块的默认大小为64M,具体在config.settings中保存,可以直接修改这个值来修改数据块大小。所以平常要测试分区效果还是需要比较多的数据的。也不要试着用mongo连接到其中一个分片上,然后插入数据,试图从路由服务器上能够取到。因为在配置服务器里根本就没有这些数据保持在哪个分片的信息。只有通过路由服务器才会将这些信息保持到配置服务器中。 配置服务器只能是奇数个。可以是一个,也可以3个。我的理解就是一个复制集(replicate set)。 下面是用来建立测试环境的系统配置。有三个分片,每个分片两个数据服务器,一个仲裁服务器。3个配置服务器。一个路由服务器。按照时间情况可以将这些服务器配置到几个物理机器上,不需要美个服务器对应一个物理服务器。在脚本中有一个sleep语句。这个sleep配置在我的2010年的MBA上可以成功,如果机器不一样可以使用不一样的sleep值。