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

  • 优点:1.使用分片减少了每个分片需要处理的请求数。2.使用分片减少了每个分片存储的数据。

  • mongodb分片群集的组成:shard(分片服务器),config server(配置服务器),route(路由服务器)

  • 分片服务器:存储数据

  • 配置服务器:管理分片服务器

  • 路由服务器:作为前端路由


安装mongodb3.2:

安装openssl-devel并解压到/opt下

便于管理mongo和mongod,做个链接

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

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

创建四个实例的数据文件和日志文件

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

nlimit -u和ulimit -n的值大于20000

ulimit -n 25000

ulimit -u 25000

配置服务器

cd /usr/local/mongodb/bin/ //在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

mongod -f /usr/local/mongodb/bin/mongodb1.conf  //启动服务

sysctl -w vm.zone_reclaim_mode=0
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
//某节点内存不足时,从其他节点分配内存

分片服务器

#mongodb2.conf
cp -p mongodb1.conf mongodb2.conf
vim mongodb2.conf    //对mongodb2.conf进行配置

port=47017    //端口号为47017
dbpath=/data/mongodb/mongodb2  //数据文件
logpath=/data/mongodb/logs/mongodb2.log  //日志文件
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
shardsvr=true

#mongodb3.conf
cp -p mongodb1.conf mongodb3.conf
vim mongodb3.conf

port=47018   //端口为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

启动路由服务器

./mongos --port 27017 --fork --logpath=/usr/local/mongodb/bin/route.log --configdb 192.168.235.204:37017 --chunkSize 1   //必须在/usr/local/mongodb/bin下

启用分片服务器

mongo

mongos> show dbs

mongos> sh.status()  //shards下为空,没有分片服务器

mongos> sh.addShard("192.168.177.133:47017") //添加47017端口的分片服务器
mongos> sh.addShard("192.168.177.133:47018")  //添加47018端口的分片服务器

mongos> sh.status()

分片功能

先添加一个数据库,在集合里创建数据

mongos> sh.enableSharding("school")   #启用数据库分片

mongos> db.info.createIndex({"id":1})   #对info表创建索引

mongos> sh.shardCollection("school.info",{"id":1})  #表分片

mongos> sh.status()