分片集群规划
服务器准备
部署MongoDB 3.4.7
下载地址: MongoDB Download Center
目录准备
mongos不会存数据, 它只依赖配置数据,在初始化时从config server中获取配置数据到内存中。
/etc/hosts配置
启动config server和shard
登录任意一台配置服务器,初始化配置副本集
还可以这样初始化, 看起来更直观一些
config副本集的名字是config, 必须和配置文件config/mongos.conf保持一致
在三台服务器上的config server, shard启动后,再依次启动mongos
创建三个shard的副本集shard1,shard2,shard3
其中lovefly-pms01是分片副本集的名字,在三个副本集上必须一致; 后面两个是副本集。
shard的配置文件
配置mongos
在任意一台服务器上登录mongos配置shard
这样就把三台mongodb分片添加到config server中了。注意:这里的shard没有副本集,在生产环境强烈建议需要创建副本集。这样添加副本集分片:
让指定的数据库、指定的集合分片生效
我们设置testdb的 table1 表需要分片,根据 id 自动分片到 shard1 ,shard2,shard3 上面去。要这样设置是因为不是所有mongodb 的数据库和表 都需要分片!
关闭mongod和mongos进程
如果进程启动不了,去查看日志文件
从日志中可以看到进程启动不了是因为“addr already in use”, 原来是端口23000已被占用了。从这个问题也反应出我们平台在部署时要规划好各服务器,各端口的分配,力争保持统一,这样便于管理。同时,也应做好文档记录。
在遇到端口占用问题是,可以通过下面两个命令查找相关进程信息:
摘录
分片操作
删除分片
均衡器
均衡器负责数据迁移,周期性的检查分片是否存在不均衡,如果不存在则会开始块的迁移,config.locks集合里的state表示均衡器是否正在运行,0表示非活动状态,2表示正在均衡。均衡迁移数据的过程会增加系统的负载:目标分片必须查询源分片的所有文档,将文档插入目标分片中,再清除源分片的数据。可以关闭均衡器(不建议):关闭会导致各分片数据分布不均衡,磁盘空间得不到有效的利用。
均衡器是以块的数量作为迁移指标,而非数据大小,块的大小默认是64M, 如果数据量较大,可以考虑调整为200M.因为块过多会增加管理和维护成本,但是如果块太大,又会导致数据迁移成本过高。
设置均衡器的时间窗口。导致分片写入比单点写入慢就是因为分片路由服务(mongos)需要维护元数据、数据迁移、路由开销等。
领取专属 10元无门槛券
私享最新 技术干货