MongoDB分片

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB分片相关的知识,希望对你有一定的参考价值。

MongoDB分片概述

什么是分片

  • 高数据量和吞吐量的数据库对单机的性能造成较大的压力,大的查询 量会将单机的CPU耗尽,大的数据对单机的储存压力较大,最终会耗尽系统的内存而将压力转移到磁盘IO上。
  • MongoDB分片是使用多个服务器存储数据的方法,以支持巨大的数据库存储和对数据进行操作。分片技术可以满足MongoDB数据大量增长的需求,当一MongoDB服务器不足以存储海量数据或不足以提供可接受的读写吞吐量时,我们就可以通过在多台服务器上分割数据,使得数据库系统能存储和处理更多的数据。

MongoDB分片优势

  • 分片为应对高吞吐量与大数据量提供了方法。
  • 1)、使分片减少了每个分片需要处理的请求数,因此,通过水平扩展,群集可以提高自己的存储容量和吞吐量。比如,当插入一条数据时,应用只需要访问存储这条数据的分片。
  • 2)、使用分片减少每一个分片存储的数据。
  • 分片的优势在于提供类似线性的架构,提高数据可用性,提高大型数据库查询服务器的性能。当MongoDB单点数据库服务器存储成为瓶颈、单点数据库服务器的性能成为瓶颈或者需要部署大型应用以充分利用内存时,可以使用分片技术。

MongoDB分片群集组成

  • MongoDB分片群集主要有如下三个主要组件:
  • 1)、Shard:分片服务器,用于存储实际的数据块,实际生产环境中一个shard server角色可由几台服务器组成一个Replica Set 承担,防止主机节点故障。
  • 2)、Config Server:配置服务器,存储了整个分片群集的配置信息,其中包括chunk信息。
  • 3)、Routers:前端路由,客户端由此接入,且让整个群集看上去像单一数据库,前端应用可以透明使用。

分片群集的简单部署

  • 在一台物理服务器上部署一个简单结构的MongoDB分片群集:

    1台路由实例(端口27017)。
    1台配置实例(端口37017)。
    3台Shard实例(端口47017、47018、47019)。

1、安装MongoDB 3.2

yum install openssl-devel -y

tar zxvf /opt/abc/mongodb-linux-x86_64-3.2.1.tgz -C /opt/ #将挂载的压缩包解压缩

cd /opt

mv mongodb-linux-x86_64-3.2.1/ /usr/local/mongodb

mkdir -p /data/mongodb/mongodb{1,2,3,4} #数据存储目录

mkdir /data/mongodb/logs #日志文件存储目录

touch /data/mongodb/logs/mongodb{1,2,3,4}.log #日志文件

chmod -R 777 /data/mongodb/logs/*.log

ulimit -n 25000 #最多打开文件个数,重启后失效

ulimit -u 25000 #最多打开进程数,重启后失效

2、配置服务器

cd /usr/local/mongodb/bin/

vim mongodb1.conf

port=37017                                  #端口号
dbpath=/data/mongodb/mongodb1               #数据存储目录
logpath=/data/mongodb/logs/mongodb1.log     #日志文件存储目录
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
configsvr=true                              #配置成配置服务器

3、分片服务器

  • 三台分片服务器配置相同,只需更改端口号、数据存储目录和日志存储目录即可;

cp -p mongodb1.conf mongodb2.conf

vim mongodb2.conf

port=47017                                  #端口号
dbpath=/data/mongodb/mongodb2               #数据存储目录
logpath=/data/mongodb/logs/mongodb2.log     #日志文件存储目录
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
shardsvr=true                               #配置成分片服务器
  • 启动服务器

ln -s /usr/local/mongodb/bin/mongo /usr/bin/mongo

ln -s /usr/local/mongodb/bin/mongod /usr/bin/mongod

mongod -f /etc/mongod1.conf

mongod -f /etc/mongod2.conf

mongod -f /etc/mongod3.conf

mongod -f /etc/mongod4.conf

4、启动路由服务器

./mongos --port 27017 --fork --logpath=/usr/local/mongodb/bin/route.log --configdb 192.168.27.153:37017 --chunkSize 1

#--port指定对方连接入口

#--fork后台运行

#--logpath指定日志文件存储路径

#--configdb指定给谁处理

技术分享图片

5、启用分片服务器

mongo

sh.addShard("192.168.27.153:47017")

sh.addShard("192.168.27.153:47018")

sh.status()

技术分享图片

6、启用分片存储功能

use kgc

for (var i=1;i<=50000;i++)db.users.insert({"id":i,"name":"zhangsan"+i})

db.users.createIndex({"id":1}) #对users表创建索引

sh.enableSharding("kgc") #启用kgc数据库分片

sh.shardCollection("kgc.users",{"id":1}) #表分片

sh.status()
技术分享图片

7、给分片添加标签

sh.addShardTag("shard0000","test01")

sh.addShardTag("shard0001","test02")

sh.status()

技术分享图片

8、添加或删除分片服务器

  • 1)、添加分片服务器

mongo #进入路由服务器

sh.addShard("192.168.27.153:47019")

sh.status()

技术分享图片

  • 2)、删除分片服务器

use admin

db.runCommand({"removeshard":"192.168.27.153:47019"})

sh.status()

技术分享图片

以上是关于MongoDB分片的主要内容,如果未能解决你的问题,请参考以下文章

『MongoDB』MongoDB高可用部署架构——分片集群篇(Sharding)

mongoDB分片集群

MongoDB——MongoDB分片集群(Sharded Cluster)两种搭建方式

Docker——基于Docker搭建MongoDB分片集群

Mongodb集群架构之分片架构

MongoDB分片搭建