CentOS 7上部署MongoDB分片群集(MongoDB 3.2.1版本)
2018-07-17 22:03
603 查看
什么是分片?
高数据量和吞吐量的数据库应用会对单机的性能造成较大压力,大的查询量会将单机的CPU耗尽,大的数据量对单机的存储压力较大,最终会耗尽系统的内存而将压力转移到磁盘IO上。MongoDB分片是使用多个服务器存储数据的方法,以支持巨大的数据存储和对数据进行操作。分片技术可以满足MongoDB数据量大量增长的需求,当一台MongoDB服务器不足以存储海量数据或不足以提供可接受的读写吞吐量时,我们就可以通过在多台服务器上分割数据,使得数据库系统能存储和处理更多的数据。
MongoDB分片优势
分片为应对高吞吐量与大数据量提供了方法。使用分片减少了每个分片需要处理的请求数,因此,通过水平扩展,群集可以提高自己的存储容量和吞吐量。比如,当插入一条数据时,应用只需要访问存储这条数据的分片。
使用分片减少了每个分片存储的数据。
分片的优势在于提供类似线性增长的架构,提高数据可用性,提高大型数据库查询服务器的性能。当MongoDB单点数据库服务器存储成为瓶颈、单点数据库服务器的性能成为瓶颈或者需要部署大型应用以充分利用内存时,可以使用分片技术。
MongoDB分片结构如下图所示:
MongoDB分片群集组成
MongoDB分片群集主要有如下三个主要组件:Shard:分片服务器,用于存储实际的数据块,实际生产环境中一个shard server角色可由几台服务器组成一个Replica Set承担,防止主机单点故障。
Config Server:配置服务器,存储了整个分片群集的配置信息,其中包括chunk信息。
Routers:前端路由,客户端由此接入,且让整个群集看上去像单一数据库,
前端应用可以透明使用。
MongoDB分片群集的组成如下图所示:
部署MongoDB分片群集
下面介绍如何在一台物理服务器上部署一个简单结构的MongoDB分片群集。物理服务器IP地址:192.168.10.154/24 MongoDB软件包:mongodb-linux-x86_64-3.2.1.tgz 具体配置如下: - 1台路由实例(端口27017) - 1台配置实例(端口37017) - 2台Shard实例(端口47017,47018)
部署简单结构的MongoDB分片群集如下图所示:
一、安装MongoDB 3.2
1、安装支持软件包yum install openssl-devel -y
2、解压MongoDB软件包
tar zxvf mongodb-linux-x86_64-3.2.1.tgz -C /opt/
3、移动MongoDB解压后的文件夹到/usr/local/目录下并重命名为mongodb
cd /opt/ mv mongodb-linux-x86_64-3.2.1/ /usr/local/mongodb
4、创建数据存储目录及日志存放位置
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 //给日志文件加权限才可往里面写入
5、调整shell资源的设置,防止过多访问MongoDB出现错误而无法连接MongoDB实例
ulimit -n 25000 //同一时刻最多开启文件数 ulimit -u 25000 //同一时刻最多开启程序数
二、部署配置服务器
1、创建mongodb1.conf配置文件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 //最大同时连接数,默认2000 storageEngine=mmapv1 //指定存储引擎为内存映射文件 configsvr=true //指定为配置服务器
2、启动配置服务器
mongod -f /usr/local/mongodb/bin/mongodb1.conf
三、部署分片服务器
1、复制配置服务器的配置文件并编辑修改cd /usr/local/mongodb/bin/ cp -p mongodb1.conf mongodb2.conf cp -p mongodb1.conf mongodb3.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 //指定为分片服务器
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 //指定为分片服务器
2、启动两个分片服务器
mongod -f mongodb2.conf mongod -f mongodb3.conf
四、启动路由服务器
通过./mongos --help命令可以查看启动路由相关参数信息。chunkSize为数据块大小,默认为200MB,为了便于测试这里将值设置为1。./mongos --port 27017 --fork --logpath=/usr/local/mongodb/bin/route.log --configdb 192.168.10.154:37017 --chunkSize 1
五、启用分片服务器
连接到路由实例后,可以通过sh.status()命令查看分片状态信息mongo //进入路由实例
mongos> sh.status() //shards下为空,没有分片服务器
mongos> sh.addShard("192.168.10.154:47017") //添加分片服务器 mongos> sh.addShard("192.168.10.154:47018") //添加分片服务器 mongos> sh.status() //再次查看便有分片服务器
六、实现分片功能
添加了两个分片服务器后,数据库和集合还未启用分片,这里我先创建一个xxy数据库,并创建集合mongos> use xxy mongos> db.users.insert({"id":1,"name":"zhangsan"}) mongos> show dbs
可利用循环语句写入多条信息
mongos> for(var i=2;i<=10000;i++)db.users.insert({"id":2,"name":"zhangsan"+i}) mongos> show collections mongos> db.users.find().limit(5) //查看users集合里的前五条数据
使用sh.status()命令查看分片状态信息。"partitioned"值为false表示数据库尚未分片。
mongos> sh.status() //查看数据库分片信息
使用sh.enableSharding("xxy")命令启用xxy数据库分片。再次查看发现"partitioned"值为true
mongos> sh.enableSharding("xxy") //启用数据库分片
针对users表创建索引,然后使用sh.shardCollection("xxy.users",{"id":1})命令对users集合进行分片
mongos> db.users.createIndex({"id":1}) //对users表创建索引 mongos> sh.shardCollection("kgc.users",{"id":1}) //表分片 mongos> sh.status()
此时可以看到chunks均匀分布到两个分片上
相关文章推荐
- Centos 7中安装MongoDB 4.0 【附3.2.1版本和4.0版本的源码包】
- mongodb 最新版本高可用解决方案-replica sets副本集部署详细过程
- Centos 7 (linux)部署MongoDB
- centos7 + php7 lamp全套最新版本配置及mongodb和redis教程详解
- CentOS 7上部署Amoeba实现MySQL主从同步,读写分离,负载均衡高可用群集
- centos6.5 部署Python3.5.2版本 配置ipython环境
- [NodeJS] 腾讯云 CentOS7.2 部署 Express+MongoDB 项目
- Centos 7.X 部署基于Git&Gitolite的分布式版本控制系统
- CentOS6.5上源码安装MongoDB3.2.1
- CentOS 7部署Node.js+MongoDB:在VPS上从安装到Hello world
- 分布式版本控制系统Git在CentOS7.4部署方法
- centos 6.8 部署mongodb3.6.2主从
- centos 6.9部署svn服务器和客户端(客户端含windows、linux版本)
- Tokumx 代替 Mongodb 群集部署
- CentOS7部署Hadoop2.7.5全分布式群集
- CentOS6.5上源码安装MongoDB3.2.1
- 在CentOS6.6上以replSet方式部署MongoDB集群
- Centos 7下 mongodb 3.2.1 安装及权限配置
- CentOS7.3部署OpenStack-Ocata版本手记(控制节点) - 未完待续
- Centos 6.5安装mongodb3.2.1