MongoDB ------ 部署分片群集、分片管理

本文深入探讨MongoDB分片技术,介绍其如何通过水平扩展解决大数据量和高吞吐量需求,涵盖分片服务器、配置服务器及路由服务器的设置与管理。详细步骤包括部署分片集群、选择片键、添加标签及分片集合等关键操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、MongoDB 分片:

(1)在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求。

(2)当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量。这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据。

分片的优势:

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

(1)使用分片减少了每个分片需要处理的请求数,因此,通过水平扩展,集群可以提高自己的存储容量和吞吐量。举例来说:当插入一条数据时,应用只需要访问存储这条数据的分片.使用分片减少了每个分片存储的数据。

(2)分片的优势在于提供类似线性增长的架构,提高数据可用性,提高大型数据库查询服务器的性能,当MongoDB的单点数据库服务器存储成为瓶颈,单点数据库服务器的性能成为瓶颈或者需要部署大型应用以充分利用内存时,可以使用分片技术。

MongoDB分片群集的组成:

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

(2)Config Server:配置服务器,mongod实例,存储了整个 ClusterMetadata,其中包括 chunk信息。

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

二、部署 MongoDB 分片群集:

  • 安装mongodb3.2;
  • 创建多实例的数据目录和日志文件;
  • 修改ulimit -n 和ulimit -u 的值为25000;
yum install openssl-devel -y
tar zxvf mongodb-linux-x86_64-3.2.1.tgz -C /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        //临时修改 重启后失效

(1)配置服务器:

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

1、当某节点内存不足时,从其他节点分配内存:

sysctl -w vm.zone_reclaim_mode=0
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

创建软连接:
ln -s /usr/local/mongodb/bin/mongo /usr/bin/mongo
ln -s /usr/local/mongodb/bin/mongod /usr/bin/mongod

2、启动:

mongod -f /usr/local/mongodb/bin/mongodb1.conf 
mongo --port 37017   //查看端口是否正常开放

(2)分片服务器:

1、
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

2、
cp -p mongodb1.conf mongodb3.conf
vim mongodb3.conf
    port=47018
    dbpath=/data/mongodb/mongodb3
    logpath=/data/mongodb/logs/mongodb3.log
    logappend=true
    fork=true
    maxConns=5000
    storageEngine=mmapv1
    shardsvr=true

mongod -f mongodb2.conf
mongod -f mongodb3.conf
mongo --port 47017
mongo --port 47018
./mongos --help   //查看参数选项

(3)启动路由服务器:

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

解释:
--port指定对方连接入口27017
--fork后台运行
--logpath指定日志文件存储路径
--configdb指定给谁处理

(4)启动分片服务器:

> mongo
> mongos> show dbs
> mongos> sh.status()    #shards下为空,没有分片服务器
> mongos> sh.addShard("192.168.86.129 :47017")    //添加分片服务器
> mongos> sh.addShard("192.168.86.129 :47018")
> mongos> sh.status()       // 查看数据库分片信息

1、分片功能管理:

> use kgc
> for(var i=1;i<=10000;i++) db.users.insert({"id":i,"name":"tom"+i})
mongos> show dbs
mongos> use kgc
mongos> show collections      //查看集合
mongos> db.users.find().limit(5)
mongos> sh.status()          //查看数据库分片信息

2、启动数据库分片:

mongos> sh.enableSharding("kgc")   //启用数据库分片
mongos> sh.status()                //再查看数据库分片信息

在这里插入图片描述
可见:此时数据库分片开启了,但是你的集合没有开发分片;
接下来:
下面要开启集合的分片;
先对users集合创建索引;
然后对集合的索引进行分片。

mongos> use kgc  
mongos> db.users.createIndex({"id":1})       //对users表创建索引
mongos> sh.shardCollection("kgc.users",{"id":1})    //表分片
mongos> sh.status()

三、MongoDB 分片管理:

(1)片键的选择、查看片键的状态信息、添加多个分片、查看配置服务器信息以及添加删除分片服务器:

mongos> mongo
mongos> use kgc
mongos> for(var i=1;i<=50000;i++)db.users2.insert({"id":i,"name":"jerry"+i})
mongos> db.users2.createIndex({"id":1})
mongos> sh.shardCollection("kgc.users2",{"id":1})
mongos> db.users2.stats()

(2)添加标签:

mongos> sh.addShardTag("shard0000","sales00")
mongos> sh.addShardTag("shard0001","sales01")

(3)连接配置服务器:

mongo --port 37017

configsvr> use config              //打开配置数据库
configsvr> show collections        //查看集合
configsvr> db.chunks.findOne()      //记录所有块的信息
configsvr> db.collections.find()    //分片集合信息
configsvr> db.databases.find()      //分片中所有数据库信息

(4)添加分片服务器:

cd /usr/local/mongodb/bin/
cp -p mongodb2.conf mongodb4.conf
vim mongodb4.conf
        port=47019
        dbpath=/data/mongodb/mongodb4
        logpath=/data/mongodb/logs/mongodb4.log
        logappend=true
        fork=true
        maxConns=5000
        storageEngine=mmapv1
        shardsvr=true

mongod -f mongodb4.conf
mongo

1、添加分片节点:

mongos> sh.addShard("192.168.86.129:47019") //添加分片服务器
mongos> sh.status()

2、删除分片节点:

mongos> use admin
mongos> db.runCommand({"removeshard":"192.168.86.129:47019"})    //删除节点
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值