分片 (sharding)是指将数据库拆分,将其分散在不同的机器上的过程。将数据分散到不同的机器上,不需要功能强大的服务器就可以存储更多的数据和处理更大的负载。
基本思想就是将集合切成小块,这些块分散到若干片里,每个片只负责总数据的一部分。通过一个名为mongos的路由进程进行操作,mongos知道数据和片的对应关系(通过配置服务器)。大部分使用场景都是解决磁盘空间的问题,对于写入有可能会变差(+++里面的说明+++),查询则尽量避免跨分片查询。使用分片的时机:
1,机器的磁盘不够用了。使用分片解决磁盘空间的问题。2,单个mongod已经不能满足写数据的性能要求。通过分片让写压力分散到各个分片上面,使用分片服务器自身的资源。
3,想把大量数据放到内存里提高性能。和上面一样,通过分片使用分片服务器自身的资源。
二、部署安装:前提是 安装 了mongodb(本文用3.0测试)
在搭建分片之前,先了解下分片中各个角色的作用。
① 配置服务器。是一个独立的mongod进程,保存集群和分片的元数据,即各分片包含了哪些数据的信息。最先开始建立,启用日志功能。像启动普通的mongod一样启动配置服务器,指定configsvr选项。不需要太多的空间和资源,配置服务器的1KB空间相当于真是数据的200MB。保存的只是数据的分布表。 ② 路由服务器。即mongos,起到一个路由的功能,供程序连接。本身不保存数据,在启动时从配置服务器加载集群信息,开启mongos进程需要知道配置服务器的地址,指定configdb选项。 ③ 分片服务器。是一个独立普通的mongod进程,保存数据信息。可以是一个副本集也可以是单独的一台服务器。部署环境:3台机子
A:配置(3)、路由1、分片1;
B:分片2,路由2;
C:分片3
在部署之前先明白 片键 的意义,一个好的片键对分片至关重要。 片键必须是一个索引 ,通过sh.shardCollection加会自动创建索引。一个自增的片键对写入和数据均匀分布就不是很好,因为自增的片键总会在一个分片上写入,后续达到某个阀值可能会写到别的分片。但是按照片键查询会非常高效。随机片键对数据的均匀分布效果很好。注意尽量避免在多个分片上进行查询。在所有分片上查询,mongos会对结果进行归并排序。
启动上面这些服务,因为在后台运行,所以用配置文件启动,配置文件说明。
1)配置服务器的启动。(A上开启3个,Port:20000、21000、22000)
配置服务器是一个普通的mongod进程,所以只需要新开一个实例即可。配置服务器必须开启1个或则3个,开启2个则会报错:
BadValue need either 1 or 3 configdbs因为要放到后台用用配置文件启动,需要修改配置文件:
/etc/mongod_20000.conf
点击( 此处 )折叠或打开
#数据目录 dbpath = / usr/ local / config/ #日志文件 logpath = / var/log/mongodb/mongodb_config . log #日志追加 logappend = true #端口 port = 20000 #最大连接数 maxConns = 50 pidfilepath = /var/run/mongo_20000 . pid #日志 , redo log journal = true #刷写提交机制 journalCommitInterval = 200 #守护进程模式 fork = true #刷写数据到日志的频率 syncdelay = 60 #storageEngine = wiredTiger #操作日志 , 单位M oplogSize = 1000 #命名空间的文件大小 , 默认16M,最大2G。 nssize = 16 noauth = true unixSocketPrefix = /tmp configsvr = true/etc/mongod_21000.conf
点击( 此处 )折叠或打开
数据目录 dbpath = / usr/ local / config1/ #日志文件 logpath = / var/log/mongodb/mongodb_config1 . log #日志追加 logappend = true #端口 port = 21000 #最大连接数 maxConns = 50 pidfilepath = /var/run/mongo_21000 . pid #日志 , redo log journal = true #刷写提交机制 journalCommitInterval = 200 #守护进程模式 fork = true #刷写数据到日志的频率 syncdelay = 60 #storageEngine = wiredTiger #操作日志 , 单位M oplogSize = 1000 #命名空间的文件大小 , 默认16M,最大2G。 nssize = 16 noauth = true unixSocketPrefix = /tmp configsvr = true开启配置服务器:
点击( 此处 )折叠或打开
root@mongo1 : ~ # mongod - f /etc/mongod_20000 . conf about to fork child process , waiting until server is ready for connections . forked process : 8