MongoDB数据集群验证.docx
《MongoDB数据集群验证.docx》由会员分享,可在线阅读,更多相关《MongoDB数据集群验证.docx(10页珍藏版)》请在冰豆网上搜索。
MongoDB数据集群验证
MongoDB数据集群验证
1.验证目的
mongodb是一个文件分布式数据库,需要验证一下在不同数量的机器上配置安装等工作,来验证集群的可靠性;
2.验证场景
集群环境搭建、数据库的CRUD操作;添加新节点操作;删除节点;数据分片操作;
3.验证流程
Mongodb的分布式存储、计算都是基于集群架构上通过业务表分片存储来实现的,下文将基于两台Radhat5.4的机器环境详细验证集群搭建、维护方法。
3.1.集群配置
3.1.1.集群架构
数据库集群是基于多台物理机器并通过Shard服务器、配置服务器、路由进程三个服务来实现的。
详细如下:
ØShard服务器(ShardServer)
Shard服务器即存储实际数据的分片,每个Shard可以是一个Mongodb实例,也可以是一组Mongodb实例构成的Replicasets。
本次验证都是基于单个Mongodb实例。
Ø配置服务器(ConfigServer)
配置服务器主要记录集群环境的配置信息,以及每个集合的分片规则信息。
Ø路由进程(RouteServer)
路由进程是客户端连接集群数据库的入口。
用于接收、分发、反馈客户端的查询、更新等数据操作。
验证集群是基于120、248两台redhat5.4的机器,架构图如下:
Sharing服务器、配置服务器、路由进程的配置方法如下:
3.1.2.启动Shard服务
验证环境中的ShardServer分别为248机器上的Mongodb实例和120机器上的Mongodb实例。
启动代码如下:
启动120机器MongoDB服务:
./mongod..--dbpath=/home/user/mongodb/db..--logpath=/home/user/mongodb/db/mongdb.log..--port20000--shardsvr–fork
启动248机器MongoDB服务:
./mongod..--dbpath=/home/user/mongodb/db..--logpath=/home/user/mongodb/db/mongdb.log..--port20000--shardsvr–fork
启动成功后如下截图:
启动参数说明:
--dbpath:
指定数据文件路径、--logpath:
指定日志文件路径、--port:
执行端口、--shardsvr:
指定为集群方式、--fork:
后台运行。
3.1.3.启动配置服务
ConfigServer需在集群中指定的某台机器上启动,验证环境中都基于248机器上。
启动命令如下:
./mongod..—configsvr..—port..30000..--dbpath=/home/user/mongob/config..--logpath=/home/user/mongodb/db/config.log–fork
启动成功后如下截图:
启动参数说明:
--dbpath:
指定集群配置文件存放路径、--logpath:
指定日志文件路径、--port:
执行端口、--fork:
后台运行。
3.1.4.启动路由进程
RouteProcess需在集群中指定的某台机器上启动,验证环境中都基于248机器上。
启动命令如下:
./mongos--port40000--configdb192.168.84.248:
30000--chunkSize20--logpath=/home/user/mongodb/db/mongos.log–fork
启动成功后如下截图:
启动参数说明:
--port:
路由进程端口、--configdb:
指定配置服务器的访问方式、--chunkSize:
集合分片的大小(单位:
M),--logpath:
日志文件路径、--fork:
后台运行。
3.1.5.配置集群
通过配置上述的三个服务,集群环境已经搭建好,下一步将需要登陆到路由进程,并配置集群环境。
主要有以下三步:
◆登陆路由
连接Route服务的命令为:
./mongoadmin--port40000,进去后截图如下:
◆添加节点
登陆到路由进程后,需要配置集群环境中的Sharding服务。
配置命令如下:
添加248Mongodb实例到集群中
db.runCommand({addshard:
"192.168.84.248:
20000"})
添加120Mongodb实例到集群中
db.runCommand({addshard:
"192.168.84.120:
20000"})
如上图所示,执行命名后返回Ok,即增加成功。
验证集群
查看当前验证环境中集群所包含的Sharding服务详细列表的命名为:
db.runCommand({listshards:
1}):
如上图所示,当前集群环境包含120,248两个Sharding服务。
至此Mongodb的集群环境成功搭建完毕。
3.2.GRUD操作
集群环境下的GRUD操作和单节点实例是没有区别的。
需要注意的是在登陆路由进程后,首先要设置数据库的属性是否是分片存储再基于数据库基础上设置业务表是否分片存储。
3.2.1.设置数据库分片存储
基于上述配置好的集群环境可通过printShardingStatus()命令查看当前有哪些数据库以及这些数据库是否设置分片存储。
如上图所示test数据库后面的状态是true,代表是分片存储。
Jlqb_db数据库的状态是flase,代表没有设置为分片存储,并且后期该数据库下的业务表都存放在shard002即248机器上。
通过db.runCommand({enablesharding:
"jlqb_db"})更改设置jlqb_db数据库的分片存储属性,如下图:
如上图所示jlqb_db数据库后面的分片存储属性由原来的false改变为true。
分片存储设置成功。
需注意的是以上操作必须切换到admin超级用户下才有可以设置分片属性。
3.2.2.设置业务表分片存储
基于分片存储数据库的业务表默认都是非分片存储的。
通过命令db.tablename.stats可查看当前表状态,如下图:
Jlqb_db数据库下的user_2业务表的sharded属性为false,即不是分片存储的并且存放在shard002及248机器上。
通过执行db.runCommand({shardcollection:
"jlqb_db.user_2",key:
{_id:
1}})可修改分片存储属性。
如下图:
分片存储属性修改后,查看业务表状态中的是否分片状态已由false改为true,如下:
3.2.3.数据操作
设置好数据库以及业务表的分片集群属性后,所有的GRUD操作同单实例下的操作语法完全一致,区别的是集群环境下是分布式存储和计算的。
常见的操作截图如下:
3.3.删除节点
模拟删除当前集群环境中的120节点,删除的命令为:
db.runCommand({removeshard:
"192.168.84.120:
20000"}),数据库会在节点删除前把该节点的分片数据平均迁移至剩余节点中。
当前集群环境中有张GNLK业务表,分别存储在120、248两台机器上。
Db.gnlk.stats()查看结果如下:
可以看出在节点1、节点2上的记录数分别为269999、230000条。
现在执行删除120节点命令。
如上图所示,返回Ok:
1则表示删除命令成功,但由于存在数据转存,节点的删除需要一定的时间。
删除命令返回的结果集中的State可以获取当前的进度,如上图的started代表开始删除、ongoing代表正在迁移数据,等迁移结束,再次执行删除命令就会提示失败并说明该节点已经不存在当前集群中。
删除节点成功通过命令printShardingStatus():
查看单签集群节点表如下:
通过命令db.gnlk.stats查看业务表存储状态如下:
可以看到该表所有的数据现在都存储在shard0002即248机器上。
3.4.新增节点
将上例Mongodb集群中删除的120节点再增加到当前集群中,命令为:
db.runCommand({addshard:
"192.168.84.120:
20000"}),数据库会把分片集合数据平均迁移至该节点中。
执行增加命令成功截图如下:
成功后通过命令:
printShardingStatus()查看集群的状态如下:
如上图所示,节点成功增加。
在新增和删除节点的时候需要注意一下两点:
1、新增节点的时候要确保新增节点实例中的数据库名和当前集群环境中已有的数据库名不冲突。
2、删除节点的时候要确保该节点上的没有primary数据库,否则的话需先删除primary数据库才可以删除节点。
3、新增、删除节点都是基于超级用户admin去操作的。
3.5.数据分片
当前环境下存在记录数为10w的GNLK集合未分片存储。
查看属性如下图所示:
现在通过在线定义分片存储属性实现分布式存储。
命令如下:
返回ok成功后,查看gnlk属性:
如上图所示10W条记录已经分布存放在两个节点。
另外对于预先定义好分片的集合,数据库将会自动分布式存放。
命令为:
db.runCommand({shardcollection:
"tabblename",key:
{_id:
1}}),详细参见3.2.2段落。
3.6.故障操作
Mongodb的集群只是实现了数据的分布式存储及计算,对于高可用性的HA,则是通过Replicasets去实现的。
在集群环境下。
如果其中某一个或者多个节点出现故障的话,则会导致故障节点上的数据无法被访问到。
4.验证结论
Mongodb支持在Linux操作系统下的集群环境搭建、CRUD操作;添加及删除节点;数据分片操作;