摘要: 1. 当其中的某一个shard不可用时,整个分片集群就都不可用。只有config库能够读写,并且数据迁移与分块都会停止。 如上图,集群中有三个shard.现在我把shard0001这个shard停掉再进行查询操作时发现操作失败 从这里可以看出,如果某一个shard仅仅只有一个mongod进程而不是replSet模式,那么当这个进程宕机后整个集群都不可用。所以每个shard一定要是replSet模式。2. 将已宕掉的configServer重新添加进来。 (一)恢复它的数据。从正在运行的configsServers当中选中一个,拷贝它的数据目录文件。 (二)启动。查看mongos日志。3. .. 阅读全文
posted @ 2012-12-31 17:50 雪刚 阅读(951) 评论(0) 推荐(0) 编辑
摘要: 1. 手动切割chunk主要是两个函数splitAt(fullname,middle)与splitFind(fullname,find). fullname指定哪个库的哪个集合。middle与find都是条件,代表你想手动切割哪个chunk. 需要注意的是条件必须包含片键,不然报错,如下图。 这两个函数不同的是: 1.1 splitAt利用middle这个条件找到对应的chunk,并以这个条件所查询到的第一条结果为分隔点,把原先的chunk分隔成两部分。 (一)在手动切隔之前,sar总共有三个块。如下图 (二)执行切割命令 之后chunks的分布如下图 可以看出,执行之后... 阅读全文
posted @ 2012-12-27 18:49 雪刚 阅读(1811) 评论(0) 推荐(1) 编辑
摘要: 1. 今天上午遇到一个有关host设置一部分是localhost另一部分是hostname,造成向sharding添加shard的时候失败。特纪录下来。 问题:一个已存在的sharding各个shard都是本机的其他的mongod进程,在当初添加shard的时候,db.runCommand({addshard:"localhost:port"})。后来又在本机配置了一个replSet.问题就来了。replSet布署成功后,其中的各个节点的host使用的是hostname.这样一来,当我将replSet添加到sharding的时候报错。因为sharding的各个节点如果都是本 阅读全文
posted @ 2012-12-27 17:05 雪刚 阅读(2103) 评论(2) 推荐(0) 编辑
摘要: 1. config server 配置服务实例只有一个config库,库中存储的都是数据分片信息。并且数据落地。与config server不同的是,mongos缓存config server中config库的数据,但数据并不落地。mongos按照一定条件不定时的从config server同步数据。2. mongos 什么时候 从 config server 拉取数据。 答:(一)新添加的mongos第一次启动时,它必须从config server拉取数据。或者mongos实例重新启动后,之前缓存的数据已经不在了,因此也必须从中拉取数据。 (二)config server中conf... 阅读全文
posted @ 2012-12-25 16:39 雪刚 阅读(1043) 评论(7) 推荐(0) 编辑
摘要: 1. 什么时候启用分片? 答: 虽然分片很强大,但是它也需要更多的硬件以及更加复杂的配置。对于采用分片的思路应该是宁可不用也不乱用。但是也要提前做好准备,不要到了快撑不住的时候才开始考虑,因为那个时候能给你思考的时间并不多。如果应用到最后仍是要采用分片的话,那在最开始就要考虑清楚到底是哪些集合会采用分片。以及设计好片键。 当满足如下三个条件其中一个,也可以考虑采用分片: (一) 数据集大小接近单个节点的存储容量。 (二) 活跃数据量接近节点最大内存容量。 (三) 节点的写请求速度无法满足要求。(读请求速度无法满足要求的时候可以通过读写分离的方式或者replicSet模式) 2. 标... 阅读全文
posted @ 2012-12-24 19:10 雪刚 阅读(548) 评论(0) 推荐(0) 编辑
摘要: 1. 可以为已存在的单个实例存储数据模式更改成分片模式。 1.1 分别新启动配置服务实例 与 路由服务实例。 1.2 再将已存在的单一实例添加到分片模式中。 1.3 最后提定哪个库中的哪个集合采用分片模式,并指定片健。2. 为分片模式添加新的数据存储节点。 use admin;db.runCommand({addshard:"IP.端口"}); 新节点添加成功后,被指定采用分片模式的集合数据会自动分到新节点中。3. 在分片模式中,为已存在且未采用分片模式的集合更改成分片模式。 3.1 如果集合所在的库已经采用分片模式,但自己没有采用分片,则只需要运行命令指定集合的分片模式。 阅读全文
posted @ 2012-12-24 11:47 雪刚 阅读(273) 评论(0) 推荐(0) 编辑
摘要: 知识点:mongoDB Sharding 是数据自动分片。数据自动在不同的数据服务器中迁移。迁移触发条件有数据量大小与访问流量。1. 建立分片集群分为两个部分:一是启动相应的mongoDB服务,二是决定怎么切分数据。2. 一个能够提供服务的分片集群主要由三部分构成: (一)配置服务器:就是一个一般的mongoDB服务进程。它负责存储集群的数据与片的对应关系。配置信息落地。 (二)路由服务器:路由请求与转发结果集。路由服务器知道对应的数据存储在什么位置。它缓存配置服务器的信息但不落地,从配置服务器同步数据。 (三)数据服务器:真正存储数据的服务进程。它是一般的mongoDB服务进程。3. ... 阅读全文
posted @ 2012-12-21 18:14 雪刚 阅读(393) 评论(0) 推荐(0) 编辑
摘要: 今天之前的同事问我一个关于awk的问题。他的意思是通过awk操作获得的几行数据是不定的,需要将获得的几行数据存到一个数组中,又不想使用循环。经过一下午的努力。终于实现了。最终命行eval $(ps -ef | grep tomcat | awk '{print $9}'|sed '/home/!d'|sed 's/^.*home\///g'|sed 's/\/.*$//g' | awk '{printf "line["NR"]=%s\n",$1}').需要注意的地方1. 在a 阅读全文
posted @ 2012-11-27 17:24 雪刚 阅读(452) 评论(0) 推荐(0) 编辑
摘要: 1. 在手动开启start transaction中,第一个SQL是DML,第二条SQL是DDL,手动执行rollback时,发现rollback无效。原因:在执行第二条DDL完成后会隐式执行commit.所以第一条SQL在这个时候就已经commit了的。最后执行rollbakc自然无效。2. 主从数据不同步解决思路:1. 使用sql_slave_skip_counter让SQL线程跑起来,结果是自然有些表数据不同步。2. 运行pt-table-checksum检查哪些表不同步。3. 运行pt-table-sync,指定--replicate,同步数据。3.查看binlog新方法: show 阅读全文
posted @ 2012-10-18 17:59 雪刚 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 版本:pt-table-checksum 2.1.5,pt-table-sync 2.1.5pt-table-checksum与pt-table-sync 这两个工具是双胞胎。pt-table-checksum用来检测主从表数据同步情况。pt-table-sync 就用来对不同步的表数据进行同步。并且,pt-table-sync可以使用到pt-table-checksum执行得到的结果。1 . pt-table-checksum 将检查结果写入一张表checksum中,再比较字段this_crc 与master_cnt的值是否不同。最后输出最终结果如下,DIFFS 显示不为0的就是数据不同步的 阅读全文
posted @ 2012-10-18 17:51 雪刚 阅读(754) 评论(0) 推荐(0) 编辑