阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MongoDB分片群集搭建入门详解

449次阅读
没有评论

共计 5911 个字符,预计需要花费 15 分钟才能阅读完成。

简介

高数据量和吞吐量的数据库应用会对单机的性能造成较大压力,大的查询量会将单机的 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 分片群集搭建入门详解

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计5911字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
8000235
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛 NAS-5:飞牛 NAS 中的 Docker 功能介绍 大家好,我是星哥,今天给大家带来如何在...
还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手! 前言 对于个人开发者、建站新手或是想搭建测试站点的从业者...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统

从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统

从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统 大家好,我是星哥。公司的项目文档存了一堆 ...
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
如何安装2026年最强个人助理ClawdBot、完整安装教程

如何安装2026年最强个人助理ClawdBot、完整安装教程

如何安装 2026 年最强个人助理 ClawdBot、完整安装教程 一、前言 学不完,根本学不完!近期,一款名...
星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛 NAS 硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话? 前言 在选择 NAS 用预...
安装并使用谷歌AI编程工具Antigravity(亲测有效)

安装并使用谷歌AI编程工具Antigravity(亲测有效)

  安装并使用谷歌 AI 编程工具 Antigravity(亲测有效) 引言 Antigravity...
恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...
240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

  240 元左右!五盘位 NAS 主机,7 代 U 硬解 4K 稳如狗,拓展性碾压同价位 在 NA...