MongoDB集群部署 - 带访问控制的分片副本集

  Ceilometer将meter、event等数据保存在MongoDB中,之前将MongoDB部署在控制节点上,使用三副本模式,时间长了发现meter数据爆炸式增长,区区2T的磁盘捉襟见肘,而想删除旧数据,需要执行db.repairDatabase()命令才能真正回收磁盘空间。

  虽然按官方说法,MongoDB 3.2版本以后默认使用的WiredTiger Storage Engine,在执行db.repairDatabase()时不需要额外空间,可实际操作时发现它会重建索引,保存在storage.dbPath/_tmp目录下,剩余的200GB容量完全不够用来创建1.7TB数据的索引,容量用完,进程就卡住了。本机上又没有空闲的磁盘用来补充容量,这个节点上的MongoDB服务基本算是废了。

  幸好Ceilometer不是核心服务,大不了把数据全删了重来。但是考虑到它的数据量太大,很有可能会影响到控制节点的性能,还是把MongoDB单独拎出来部署更为保险。搜了一圈,发现目前MongoDB集群的部署方案都是分片+副本集,我在这之上补充了权限验证的配置步骤,整理成这篇文档。

 

2. 环境

使用了三台服务器,部署三个分片,每个分片三副本。实际上分片数量可以是任意个,试主机性能而定。各个分片之间是完全相互独立的,一个database的数据只会落在一个分片上。

服务器:10.212.36.38、10.212.36.39、10.212.36.40

系统:CentOS Linux release 7.2.1511 (Core)

MongoDB:v4.0.0

部署结构如下表所示:

10.212.36.38

 

10.212.36.39

 

10.212.36.40

 

mongos: 27017

 

mongos: 27017

 

mongos: 27017

 

config: 27018

 

config: 27018

 

config: 27018

 

shard01: 27101

 

shard01: 27101

 

shard01: 27101

 

shard02: 27102

 

shard02: 27102

 

shard02: 27102

 

shard03: 27103

 

shard03: 27103

 

shard03: 27103

 

mongos是对外提供服务的进程,本身不保存数据,而是将请求转发到分片;config保存集群配置数据;shard是实际存储数据的服务,每个shard相互独立,由mongos调度。

 

3. 安装MongoDB 3.1 添加yum源

cat > /etc/yum.repos.d/mongodb-org-4.0.repo << EOF [mongodb-org-4.0] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/ gpgcheck=1 enabled=1 gpgkey=https:// EOF

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgyywp.html