MongoDB分片群集搭建入门详解

栏目: 数据库 · 发布时间: 7年前

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

简介

高数据量和吞吐量的数据库应用会对单机的性能造成较大压力,大的查询量会将单机的CPU耗尽,大的数据量对单机的存储压力较大,最终会耗尽系统的内存而将压力转移到磁盘IO上

MongoDB分片是使用多个服务器存储数据的方法,以支持巨大的数据存储和对数据进行操作。分片技术可以满足 MongoDB 数据量大量增长的需求,当一台MongoDB服务器不足以存储海量数据或不足以提供可接受的读写吞吐量时,可以通过在多台服务器上分割数据,使得数据库系统能存储和处理更多的数据

分片优势

分片为应对高吞吐量与大数据量提供了方法

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

MongoDB分片群集主要三个组件

Shard:分片服务器,用于存储实际的数据块,实际生产环境中一个shard server 角色可以由几台服务器组成一个Peplica Set 承担,防止主机单点故障。

Config Server:配置服务器,存储了整个分片群集的配置信息,其中包括chunk信息。

Routers:前端路由,客户端由此接入,且让整个群集看上去像单一数据库,前端应用可以透明使用。

MongoDB分片群集搭建入门详解

一、源码安装MongoDB

1、安装相关依赖包

[root@localhost ~]# yum -y install gcc gcc-c++ openssl-devel

2、解压MongoDB

[root@localhost ~]# tar xvfz mongodb-linux-x86_64-3.2.1.tgz #免配置,免编译

[root@localhost ~]# mv mongodb-linux-x86_64-3.2.1 /usr/local/mongodb

3、创建相关实例目录及其文件

[root@localhost ~]# cd /usr/local/mongodb/

[root@localhost mongodb]# mkdir etc #创建配置文件目录

[root@localhost mongodb]# mkdir log #创建日志文件目录

[root@localhost ~]# mkdir -p /usr/local/mongodb/data/mongodb1 #创建相关数据目录

[root@localhost ~]# mkdir -p /usr/local/mongodb/data/mongodb2

[root@localhost ~]# mkdir -p /usr/local/mongodb/data/mongodb3

[root@localhost ~]# mkdir -p /usr/local/mongodb/data/mongodb4

[root@localhost ~]# touch /usr/local/mongodb/etc/mongodb{1,2,3,4}.conf #创建配置文件

[root@localhost ~]# touch /usr/local/mongodb/log/mongodb{1,2,3,4}.log #创建日志文件

[root@localhost ~]# chmod 777 /usr/local/mongodb/log/*.log #修改日志权限

4、修改内核资源限制

ulimit -n 25000 #指定同一时间最多可开启的文件数

ulimit -u 25000 #用户最多可开启的程序数目

5、优化路径

[root@localhost ~]# ln -s /usr/local/mongodb/etc/

/etc/

[root@localhost ~]# ln -s /usr/local/mongodb/bin/

/usr/bin/

6、修改主配置文件

[root@localhost ~]# vim /etc/mongodb1.conf

port=37017

dbpath=/usr/local/mongodb/data/mongodb1

logpath=/usr/local/mongodb/log/mongodb1.log

logappend=true      #日志追加

fork=true            #工作模式

maxConns=5000        #最大连接数

storageEngine=mmapv1 #存储引擎

configsvr=true      #指定配置服务器角色

7、启动服务

[root@localhost ~]# mongod -f /etc/mongodb1.conf

[root@localhost ~]# netstat -anpt | grep '37017'

MongoDB分片群集搭建入门详解

8、编辑启动脚本

[root@localhost ~]# vim /etc/init.d/mongodb

#!/bin/bash

# descript:Mongodb Server Control Script

# Author: GuiHaiYiDao TEL:139741741741

# date:long long ago

instance=$1

action=$2

case "$action" in

'start')

mongod -f /etc/"$instance".conf

;;

'stop')

mongod -f /etc/"$instance".conf --shutdown

;;

'restart')

mongod -f /etc/"$instance".conf --shutdown

mongod -f /etc/"$instance".conf

;;

esac

[root@localhost ~]# chmod +x /etc/init.d/mongodb

[root@localhost ~]# /etc/init.d/mongodb mongodb1 start #启动

二、部署分片群集

1、部署配置服务器

源码包安装已经配置过了,端口号37017,略……

2、部署分片服务器

[root@localhost ~]# vim /etc/mongodb2.conf #部署第1个分片服务器

port=47017

dbpath=/usr/local/mongodb/data/mongodb2

logpath=/usr/local/mongodb/log/mongodb2.log

logappend=true

fork=true

maxConns=5000

storageEngine=mmapv1

shardsvr=true  #指定分片服务器角色

[root@localhost ~]# vim /etc/mongodb3.conf #部署第2个分片服务器

port=47018

dbpath=/usr/local/mongodb/data/mongodb3

logpath=/usr/local/mongodb/log/mongodb3.log

logappend=true

fork=true

maxConns=5000

storageEngine=mmapv1

shardsvr=true

[root@localhost ~]# /etc/init.d/mongodb mongodb2 start

[root@localhost ~]# /etc/init.d/mongodb mongodb3 start

3、优化内存(其中一个节点内存不足,可以从其他节点获得)

[root@localhost ~]# sysctl -w vm.zone_reclaim_mode=0

[root@localhost ~]# echo never > /sys/kernel/mm/transparent_hugepage/enabled #开启大页面存储

[root@localhost ~]# echo never > /sys/kernel/mm/transparent_hugepage/defrag

4、启动路由服务器

[root@localhost ~]# mongos --port 27017 --fork --logpath=/usr/local/mongodb/bin/route.log --configdb 192.168.100.77:37017 --chunkSize 1

#解析

--port:      #指定端口号,MongoDB默认端口为27017

--fork:      #指定工作模式

--logpath:  #日志路径

--configdb:  #指定配置服务器

--chunkSize: #指定数据块大小

5、启动分片服务器

1).查看分片状态信息

[root@localhost ~]# mongo --port 27017 #!!!!注意是27017

mongos> show dbs

config  0.031GB

local  0.031GBmongos> sh.status()  #查看分片状态信息

--- Sharding Status ---

sharding version: {

"_id" : 1,

"minCompatibleVersion" : 5,

"currentVersion" : 6,

"clusterId" : ObjectId("5b964a6d17b453754b82ab72")

}

shards:  #此时查看并没有分片服务器状态

active mongoses:

"3.2.1" : 1

balancer:

Currently enabled:  yes

Currently running:  no

Failed balancer rounds in last 5 attempts:  0

Migration Results for the last 24 hours:

No recent migrations

databases:

2).添加分片服务器

mongos> sh.addShard("192.168.100.77:47017")

mongos> sh.addShard("192.168.100.77:47018")

3).再次查看分片状态

mongos> sh.status()

--- Sharding Status ---

……

shards: #查看分片服务器已经添加成功

{  "_id" : "shard0000",  "host" : "192.168.100.77:47017" }

{  "_id" : "shard0001",  "host" : "192.168.100.77:47018" }6、实现分片功能

1).添加数据

mongos> use school

mongos> for(var i=1; i<=10000; i++) db.student.insert({"id":i,"name":"Jack"+i})

mongos> db.student.find().limit(5)

mongos> db.student.count() #查看总共10个条目

MongoDB分片群集搭建入门详解

2).查看分片状态信息

mongos> sh.status()

--- Sharding Status ---

……

databases:

{  "_id" : "school",  "primary" : "shard0000",  "partitioned" : false } #partitioned为"false"代表"school"数据库尚未分片

3).启用数据库分片

mongos> sh.enableSharding("school")

mongos> sh.status()

MongoDB分片群集搭建入门详解

4).创建索引对集合进行分片

mongos> use school

mongos> db.student.createIndex({"id":1}) #创建索引,"1"代表升序;"-1"代表降序

mongos> sh.shardCollection("school.student",{"id":1}) #使用创建的索引对集合进行分片

mongos> sh.status()

MongoDB分片群集搭建入门详解

三、分片管理

1、创建相应的测试数据

mongos> use school

mongos> for(var i=1; i<=50000; i++) db.student2.insert({"id":i,"name":"Tom"+i})

mongos> db.student2.createIndex({"id":1})

mongos> sh.shardCollection("school.student2",{"id":1})

mongos> sh.status() #对应条目数范围指向相应的分片

MongoDB分片群集搭建入门详解

2、添加标签(方便识别)

mongos> db.student2.stats()

MongoDB分片群集搭建入门详解

mongos> sh.addShardTag("shard0000","stu00")

mongos> sh.addShardTag("shard0001","stu01")mongos> sh.status()

MongoDB分片群集搭建入门详解

3、连接配置服务器

[root@localhost mongodb]# mongo --port 37017

configsvr> use config

configsvr> db.databases.find()    #查看数据库信息

configsvr> db.collections.find()  #查看集合信息

configsvr> db.chunks.find()      #查看数据块信息

4、添加分片

[root@localhost ~]# vim /etc/mongodb4.conf

port=47019

dbpath=/usr/local/mongodb/data/mongodb4

logpath=/usr/local/mongodb/log/mongodb4.log

logappend=true

fork=true

maxConns=5000

storageEngine=mmapv1

shardsvr=true

[root@localhost ~]# /etc/init.d/mongodb mongodb4 start #启动第4个实例

[root@localhost ~]# mongo --port 27017

mongos> sh.addShard("192.168.100.77:47019") #添加分片

mongos> sh.status()

MongoDB分片群集搭建入门详解

5、删除分片

[root@localhost ~]# mongo --port 27017

mongos> use admin

mongos> db.runCommand({"removeshard":"192.168.100.77:47019"})

mongos> sh.status()

MongoDB分片群集搭建入门详解

Linux公社的RSS地址: https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址: https://www.linuxidc.com/Linux/2018-09/154124.htm


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Practical Vim, Second Edition

Practical Vim, Second Edition

Drew Neil / The Pragmatic Bookshelf / 2015-10-31 / USD 29.00

Vim is a fast and efficient text editor that will make you a faster and more efficient developer. It’s available on almost every OS, and if you master the techniques in this book, you’ll never need an......一起来看看 《Practical Vim, Second Edition》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具