MongoDB分片管理-创新互联

目录

  1. 概念
  2. 基本思想
  3. 适用场景
  4. 角色介绍
  5. 实验环境
  6. 实验过程
    一、概念
    分片(sharding)是指将数据库拆分,将其分散在不同的机器上的过程。将数据分散到不同的机器上,不需要功能强大的服务器就可以存储更多的数据和处理更大的负载。
    二、基本思想
    将集合切成小块,这些块分散到若干片里,每个片只负责总数据的一部分,最后通过一个均衡器来对各个分片进行均衡(数据迁移)。通过一个名为mongos的路由进程进行操作,mongos知道数据和片的对应关系(通过配置服务器)。大部分使用场景都是解决磁盘空间的问题,对于写入有可能会变差,查询则尽量避免跨分片查询。
    三、适用场景

    ① 使用分片解决磁盘空间的问题。
    ②通过分片让写压力分散到各个分片上面,使用分片服务器自身的资源。
    ③想把大量数据放到内存里提高性能。和上面一样,通过分片使用分片服务器自身的资源。

    十年建站经验, 网站设计制作、成都做网站客户的见证与正确选择。创新互联建站提供完善的营销型网页建站明细报价表。后期开发更加便捷高效,我们致力于追求更美、更快、更规范。

四、角色介绍
① 配置服务器。是一个独立的mongod进程,保存集群和分片的元数据,即各分片包含了哪些数据的信息。最先开始建立,启用日志功能。像启动普通的mongod一样启动配置服务器,指定configsvr选项。当服务不可用,则变成只读,无法分块、迁移数据。
② 路由服务器。即mongos,起到一个路由的功能,供程序连接。本身不保存数据,在启动时从配置服务器加载集群信息,开启mongos进程需要知道配置服务器的地址,指定configdb选项。
③ 分片服务器。是一个独立普通的mongod进程,保存数据信息。可以是一个副本集也可以是单独的一台服务器。
原理拓扑图
MongoDB分片管理
实验环境:
版本:MongoDB 3.2.1
安装包:链接:https://pan.baidu.com/s/1Dfy6Ria49Dc_oMKOBUNY1g 密码:fnwv

主机 虚拟机 IP地址 端口
配置服务器CentOS-7-x86_64192.168.37.128 实例137017
路由服务器CentOS-7-x86_64192.168.37.128 实例137017
分片服务器1CentOS-7-x86_64192.168.37.128 实例247017
分片服务器2CentOS-7-x86_64192.168.37.128 实例347018

实验过程:
1、解压mongodb安装包

mkdir /opt/abc
mount.cifs //192.168.37.1/SHARE /opt/abc
cd /opt/abc
tar zxvf mongodb-linux-x86_64-3.2.1.tgz -C /opt

2、将mongodb文件移动到/usr/local目录下

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

MongoDB分片管理
3、将mongo、mongod做快捷引用

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

4、创建实例(4个实例:验3个,1个备用)的数据存放目录及日志存放目录

mkdir -p /data/mongodb/mongodb{1,2,3,4} #数据存放目录
cd /data/mongodb/
mkdir logs
touch logs/mongodb{1,2,3,4}.log #日志存放文件
chmod 777 logs/*.log

MongoDB分片管理
5、优化

ulimit -u 25000 #放大进程数
ulimit -n 25000 #放大打开文件数

配置服务器
6、编辑配置服务器文件

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            ** #配置服务器模式**

7、节点内存不足时,从其他节点分配内存

sysctl -w vm.zone_reclaim_mode=0
echo never > /sys/kernel/mm/transparent_hugepage/enabled #禁止大页面内存出现
echo never > /sys/kernel/mm/transparent_hugepage/defrag

8、开启配置服务器

mongod -f mongodb.conf
mongo --port 37017

MongoDB分片管理
片服务器
9、复制实例1配置文件(实例2)

cp -p mongodb.conf mongodb2.conf

10、修改配置文件(实例2)

vim mongodb2.conf

port=47017
dbpath=/data/mongodb/mongodb2
logpath=/data/mongodb/logs/mongodb2.log
shardsvr=true             #分片服务器模式

11、复制实例2配置文件(实例3)
cp -p mongodb2.conf mongodb3.conf

10、修改配置文件(实例3)

vim mongodb3.conf

port=47018
dbpath=/data/mongodb/mongodb3
logpath=/data/mongodb/logs/mongodb3.log

11、开启分片服务器

mongod -f mongodb2.conf
mongo --port 47017
mongod -f mongodb3.conf
mongo --port 47018

MongoDB分片管理
路由服务器
12、开启路由服务

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

--port 27017:路由配置服务器入口
--fork:后台运行
logpath:日志文件存储路径
--configdb:指定真正处理请求的服务器(配置服务器)
--chunkSize 1 :不加也可,默认200MB

MongoDB分片管理
启用分片服务
13、登录数据库

mongo

MongoDB分片管理
14、查看分片服务器是否存在

sh.status() #shards下为空,无分片服务器

MongoDB分片管理
15、添加分片服务器

sh.addShard("192.168.37.128:47017")
sh.addShard("192.168.37.128:47018")

MongoDB分片管理
验证分片服务功能
16、创建数据库kgc---集合users---添加数据

use kgc
for(var i=1;i<=10000;i++)db.users.insert({"id":1,"name":"tom"+i}) #写入数据
mongos> show dbs

config  0.031GB
kgc     0.078GB

MongoDB分片管理
17、查看是否进行分片处理

sh.status()

MongoDB分片管理
18、启用数据库分片

sh.enableSharding("kgc")
sh.status()

MongoDB分片管理

19、创建索引,根据索引进行分片

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

MongoDB分片管理

20、到此,实验已完成。另外,可依照上述步骤添加实例4,又会重新进行分片处理。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章标题:MongoDB分片管理-创新互联
文章网址:http://csdahua.cn/article/iches.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流