内容简介:高数据量和吞吐量的数据库应用会对单机的性能造成较大压力,大的查询量会将单机的CPU耗尽,大的数据量对单机的存储压力较大,最终会耗尽系统的内存而将压力转移到磁盘IO上MongoDB分片是使用多个服务器存储数据的方法,以支持巨大的数据存储和对数据进行操作。分片技术可以满足MongoDB数据量大量增长的需求,当一台MongoDB服务器不足以存储海量数据或不足以提供可接受的读写吞吐量时,可以通过在多台服务器上分割数据,使得数据库系统能存储和处理更多的数据分片为应对高吞吐量与大数据量提供了方法
简介
高数据量和吞吐量的数据库应用会对单机的性能造成较大压力,大的查询量会将单机的CPU耗尽,大的数据量对单机的存储压力较大,最终会耗尽系统的内存而将压力转移到磁盘IO上
MongoDB分片是使用多个服务器存储数据的方法,以支持巨大的数据存储和对数据进行操作。分片技术可以满足 MongoDB 数据量大量增长的需求,当一台MongoDB服务器不足以存储海量数据或不足以提供可接受的读写吞吐量时,可以通过在多台服务器上分割数据,使得数据库系统能存储和处理更多的数据
分片优势
分片为应对高吞吐量与大数据量提供了方法
- 使用分片减少了每个分片需要处理的请求数,因此,通过水平扩展,群集可以提高自己的存储容量和吞吐量。比如,当插入一条数据时,应用只需要访问存储这条数据的分片
- 使用分片减少每个分片存储的数据
分片的优势在于提供类似线性增长的架构,提高数据可用性,提高大型数据库查询服务器的性能。当MongoDB单点数据库服务器存储成为瓶颈、单点数据库服务器的性能成为瓶颈或者需要部署大型应用以充分利用内存时,可以使用分片技术
MongoDB分片群集主要三个组件
Shard:分片服务器,用于存储实际的数据块,实际生产环境中一个shard server 角色可以由几台服务器组成一个Peplica Set 承担,防止主机单点故障。
Config Server:配置服务器,存储了整个分片群集的配置信息,其中包括chunk信息。
Routers:前端路由,客户端由此接入,且让整个群集看上去像单一数据库,前端应用可以透明使用。
一、源码安装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、优化路径
/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'
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个条目
2).查看分片状态信息
mongos> sh.status()
--- Sharding Status ---
……
databases:
{ "_id" : "school", "primary" : "shard0000", "partitioned" : false } #partitioned为"false"代表"school"数据库尚未分片
3).启用数据库分片
mongos> sh.enableSharding("school")
mongos> sh.status()
4).创建索引对集合进行分片
mongos> use school
mongos> db.student.createIndex({"id":1}) #创建索引,"1"代表升序;"-1"代表降序
mongos> sh.shardCollection("school.student",{"id":1}) #使用创建的索引对集合进行分片
mongos> sh.status()
三、分片管理
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() #对应条目数范围指向相应的分片
2、添加标签(方便识别)
mongos> db.student2.stats()
mongos> sh.addShardTag("shard0000","stu00")
mongos> sh.addShardTag("shard0001","stu01")mongos> sh.status()
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()
5、删除分片
[root@localhost ~]# mongo --port 27017
mongos> use admin
mongos> db.runCommand({"removeshard":"192.168.100.77:47019"})
mongos> sh.status()
Linux公社的RSS地址: https://www.linuxidc.com/rssFeed.aspx
本文永久更新链接地址: https://www.linuxidc.com/Linux/2018-09/154124.htm
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Magent搭建Memcached高可用群集
- LVS负载均衡之LVS-DR搭建Web群集与LVS结合Keepalived搭建高可用Web群集
- CentOS7 上部署Haproxy及Nginx 搭建Web群集
- LVS负载均衡之LVS-NAT搭建Web群集
- RabbitMQ 群集安装
- WSFC 来宾群集架构
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
C++程序设计原理与实践
(美)Bjarne Stroustrup / 王刚 等 / 机械工业出版社 / 2010.7 / 108.00元
本书是经典程序设计思想与C++开发实践的完美结合,是C++之父回归校园后对C++编程原理和技巧的全新阐述。书中全面地介绍了程序设计基本原理,包括基本概念、设计和编程技术、语言特性以及标准库等,教你学会如何编写具有输入、输出、计算以及简单图形显示等功能的程序。此外,本书通过对C++思想和历史的讨论、对经典实例(如矩阵运算、文本处理、测试以及嵌入式系统程序设计)的展示,以及对C语言的简单描述,为你呈现......一起来看看 《C++程序设计原理与实践》 这本书的介绍吧!