前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MongoDB分片群集搭建入门详解

MongoDB分片群集搭建入门详解

作者头像
星哥玩云
发布2022-08-17 14:40:59
4540
发布2022-08-17 14:40:59
举报
文章被收录于专栏:开源部署

简介

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

分片优势

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

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

MongoDB分片群集主要三个组件

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

MongoDB分片群集搭建入门详解
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分片群集搭建入门详解
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分片群集搭建入门详解
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分片群集搭建入门详解
MongoDB分片群集搭建入门详解
4).创建索引对集合进行分片

mongos> use school mongos> db.student.createIndex({"id":1}) #创建索引,"1"代表升序;"-1"代表降序 mongos> sh.shardCollection("school.student",{"id":1}) #使用创建的索引对集合进行分片 mongos> sh.status()

MongoDB分片群集搭建入门详解
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分片群集搭建入门详解
MongoDB分片群集搭建入门详解
2、添加标签(方便识别)

mongos> db.student2.stats()

MongoDB分片群集搭建入门详解
MongoDB分片群集搭建入门详解

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

MongoDB分片群集搭建入门详解
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分片群集搭建入门详解
MongoDB分片群集搭建入门详解
5、删除分片

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

mongos> use admin mongos> db.runCommand({"removeshard":"192.168.100.77:47019"}) mongos> sh.status()

MongoDB分片群集搭建入门详解
MongoDB分片群集搭建入门详解
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 分片优势
  • MongoDB分片群集主要三个组件
  • 一、源码安装MongoDB
    • 1、安装相关依赖包
      • 2、解压MongoDB
        • 3、创建相关实例目录及其文件
          • 4、修改内核资源限制
            • 5、优化路径
              • 6、修改主配置文件
                • 7、启动服务
                  • 8、编辑启动脚本
                  • 二、部署分片群集
                    • 1、部署配置服务器
                      • 2、部署分片服务器
                        • 3、优化内存(其中一个节点内存不足,可以从其他节点获得)
                          • 4、启动路由服务器
                            • 5、启动分片服务器
                              • 1).查看分片状态信息
                                • 2).添加分片服务器
                                  • 3).再次查看分片状态
                                    • 1).添加数据
                                      • 2).查看分片状态信息
                                        • 3).启用数据库分片
                                          • 4).创建索引对集合进行分片
                                          • 三、分片管理
                                            • 1、创建相应的测试数据
                                              • 2、添加标签(方便识别)
                                                • 3、连接配置服务器
                                                  • 4、添加分片
                                                    • 5、删除分片
                                                    相关产品与服务
                                                    云数据库 MongoDB
                                                    腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
                                                    领券
                                                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档