在CentOS7上部署MongoDB分片群集

概述

MongoDB分片是使用多个服务器存储数据的方法,以支持巨大的数据存储和对数据进行操作。分片技术可以满足MongoDB数据量大量增长的需求,当一台MongoDB服务器不足以存储海量数据或不足以提供可接受的读写吞吐量时,我们就可以在多台服务器上分割数据,使得数据库系统能存储和处理更多的数据。

MongoDB分片群集的组成

  • Shard:分片服务器,用于存储实际的数据块,实际生产环境中一个shard server角色可由几台服务器组成一个Replica Set承担,防止主机单点故障。
  • Config Server:配置服务器,存储了整个分片群集的配置信息,其中包括chunk信息。
  • Routers:路由器,客户端由此接入,且让整个群集看上去像单一数据库,前端应用可以透明使用。

部署MongoDB分片群集

实验环境:

  • 1台路由实例(端口27017)
  • 1台配置实例(端口37017)
  • 2台shard实例(端口47017,47018)

1.安装MongoDB3.2

[[email protected] ~]# yum install openssl-devel -y
[[email protected] tomcat]# tar zxvf mongodb-linux-x86_64-3.2.1.tgz -C /opt/

2.创建4个实例

[[email protected] opt]# mkdir -p /data/mongodb/mongodb{1,2,3,4}
[[email protected] mongodb]# mkdir logs
[[email protected] mongodb]# touch logs/mongodb{1,2,3,4}.log
[[email protected] logs]# chmod -R 777 *.log
[[email protected] logs]# ulimit -n 25000   //最大进程数//
[[email protected] logs]# ulimit -u 25000  //最大文件数//

3.部署配置服务器

[[email protected] 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)某节点内存不足时,从其他节点分配内存

[[email protected] bin]# sysctl -w vm.zone_reclaim_mode=0 //内核参数为0的话,那么系统会倾向于从其他节点分配内存//
[[email protected] bin]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
[[email protected] bin]# echo never > /sys/kernel/mm/transparent_hugepage/defrag

[[email protected] bin]# ln -s /usr/local/mongodb/bin/mongo /usr/bin/mongo
[[email protected] bin]# ln -s /usr/local/mongodb/bin/mongod /usr/bin/mongod

2)启动配置服务器

[[email protected] bin]# mongod -f mongodb1.conf

4.配置分片服务器

[[email protected] bin]# 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

[[email protected] bin]# 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

1)启动mongodb2、mongodb3

[[email protected] bin]#mongod -f mongodb2.conf
[[email protected] bin]#mongod -f mongodb3.conf

5.启动路由服务器

[[email protected] bin]# ./mongos --port 27017 --fork --logpath=/usr/local/mongodb/bin/route.log --configdb 192.168.126.141:37017 --chunkSize 1
************显示*******************************************
2018-07-18T09:21:53.507+0800 W SHARDING [main] Running a sharded cluster with fewer than 3 config servers should only be done for testing purposes and is not recommended for production.
about to fork child process, waiting until server is ready for connections.
forked process: 3580
child process started successfully, parent exiting

6.启用分片服务器

[[email protected] bin]# mongo
mongos> show dbs
config  0.031GB
mongos> sh.status()    //#shards下为空,没有分片服务器//

mongos> sh.addShard("192.168.126.204:47017")
mongos> sh.addShard("192.168.126.204:47018")
mongos> sh.status()
shards:
    {  "_id" : "shard0000",  "host" : "192.168.126.141:47017" }
    {  "_id" : "shard0001",  "host" : "192.168.126.141:47018" }

1)创建Kgc数据库,创建users集合并且插入100000条数据

mongos> use kgc
mongos> db.createCollection(‘users‘)
mongos> for(var i=1;i<=100000;i++)db.users.insert({"id":1,"name":"jack"+i})
mongos> db.users.find()
{ "_id" : ObjectId("5b4e9b580f25d0730817aea1"), "id" : 1, "name" : "jack1" }
{ "_id" : ObjectId("5b4e9b580f25d0730817aea2"), "id" : 2, "name" : "jack1" }
{ "_id" : ObjectId("5b4e9b580f25d0730817aea3"), "id" : 3, "name" : "jack1" }
{ "_id" : ObjectId("5b4e9b580f25d0730817aea4"), "id" : 4, "name" : "jack1" }
{ "_id" : ObjectId("5b4e9b590f25d0730817aea5"), "id" : 5, "name" : "jack1" }
{ "_id" : ObjectId("5b4e9b590f25d0730817aea6"), "id" : 6, "name" : "jack1" }
{ "_id" : ObjectId("5b4e9b590f25d0730817aea7"), "id" : 7, "name" : "jack1" }
{ "_id" : ObjectId("5b4e9b590f25d0730817aea8"), "id" : 8, "name" : "jack1" }
{ "_id" : ObjectId("5b4e9b590f25d0730817aea9"), "id" : 9, "name" : "jack1" }
{ "_id" : ObjectId("5b4e9b590f25d0730817aeaa"), "id" : 10, "name" : "jack1" }
..........//省略//

7.实现分片功能

[[email protected] bin]# ./mongoimport -d kgc -c users --file /opt/testdb.txt
mongos> show dbs
config  0.031GB
kgc     0.078GB
mongos> use kgc
switched to db kgc
mongos> show tables
system.indexes
users
mongos> sh.status()    //查看数据库分片信息//
 databases:
    {  "_id" : "kgc",  "primary" : "shard0000",  "partitioned" : false } //数据库尚未分片//

1)启用数据库分片

mongos> sh.enableSharding("kgc")   //启用数据库分片//
mongos> sh.status()
databases:
    {  "_id" : "kgc",  "primary" : "shard0000",  "partitioned" : true }
mongos> db.users.createIndex({"id":1})   //对users表创建索引//
mongos> sh.shardCollection("kgc.users",{"id":1})  //表分片//
mongos> sh.status()
 shards:
    {  "_id" : "shard0000",  "host" : "192.168.126.141:47017" }
    {  "_id" : "shard0001",  "host" : "192.168.126.141:47018" }

原文地址:http://blog.51cto.com/13642258/2149299

时间: 2024-10-03 06:31:40

在CentOS7上部署MongoDB分片群集的相关文章

部署MongoDB分片群集

MongoDB分片在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求.当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量.这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据. 分片的优势分片为应对高吞吐量与大数据量提供了方法.使用分片减少了每个分片需要处理的请求数,因此,通过水平扩展,集群可以提高自己的存储容量和吞吐量.举例来说,当插入一条数据时,应用只需要访问存储这条数据的分片.

部署MongoDB分片群集及分片管理

MongoDB分片 在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求. 当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量.这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据. 分片的优势 分片为应对高吞吐量与大数据量提供了方法. 使用分片减少了每个分片需要处理的请求数,因此,通过水平扩展,集群可以提高自己的存储容量和吞吐量.举例来说,当插入一条数据时,应用只需要访问存储这条数据

在CentOS7上部署MongoDB复制集和复制集的管理维护

MongoDB复制集的概述 复制集是额外的数据副本,是跨多个服务器同步数据的过程,复制集提供了冗余并增加了数据可用性,通过复制集可以对硬件故障和中断的服务进行恢复. 复制集工作原理 MongoDB的复制集至少需要两个节点.其中一个是主节点(primary),负责处理客户端的请求,其余都是从节点(Secondary),负责复制主节点上的数据. MongoDB各个节点常见的搭配方式为:一主一从或一主多从.主节点记录其上的所有操作到oplog中,从节点定期轮询主节点获取这些操作,然后对自己的数副本执行

[原创]在Docker上部署mongodb分片副本集群。

一.安装docker. 请参考:http://www.cnblogs.com/hehexiaoxia/p/6150584.html 二.编写dockerfile. #在根目录下创建dockerfile. $ vi dockerfile #version 1.0 from ubuntu #maintainer maintainer hdx #install run apt-get clean run apt-get update run apt-get install -y vim run apt

MongoDB分片群集(实现分片服务启用、分片服务管理、单点故障模拟)

MongoDB分片概述 1.什么是分片 高数据量和吞吐量的数据库应用会对单机的性能造成较大压力,大的查询量会将单机的CPU耗尽,大的数据量对单机的存储压力较大,最终会耗尽系统的内存而将压力转移到磁盘IO上. MongoDB分片是使用多个服务器存储数据的方法,以支持巨大的数据存储和对数据进行操作.分片技术可以满足MongoDB数据量大量增长的需求,当一台服务器存储量不够时,可以通过再外接一台分片服务器,使得数据库系统能够存储更多的数据 2.MongoDB分片优势 使用分片减少了每个分片需要处理的请

MongoDB分片群集

一.关于分片 1.什么是分片 高数据量和吞吐量的数据库应用会对单机的性能造成较大压力,大的查询会将单机的CPU耗尽,大的数据量对单机的存储压力比较大,最终会耗尽系统的内存而将压力转移到磁盘IO上.MongoDB分片是使用多个服务器存储数据的方法,以支持巨大的数据存储和对数据进行操作.分片技术可以满足MongoDB数据量大量增长的需求,当一台MongoDB服务器不足以存储海量数据或不足以提供可接受的读写吞吐量时,我们就可以通过在多台服务器上分割数据,使得数据库系统能存储和处理更多的数据. 2.Mo

【MangoDB分片】配置mongodb分片群集(sharding cluster)

配置mongodb分片群集(sharding cluster) Sharding cluster介绍 这是一种可以水平扩展的模式,在数据量很大时特给力,实际大规模应用一般会采用这种架构去构建monodb系统. 要构建一个 MongoDB Sharding Cluster,需要三种角色: Shard Server: mongod 实例,用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个relica set承担,防止主机单点故障 Config Server: m

在 CentOS7 上部署 MySQL 主从

在 CentOS7 上部署 MySQL 主从 1 通过 SecureCRT 连接至 MySQL 主服务器: 2 找到 my.cnf 文件所在的目录: mysql --help | grep my.cnf 一般情况 my.cnf 都会位于 /etc/ 目录下: 3 用 vim 打开 MySQL 的配置文件 my.cnf: vim /etc/my.cnf 4 找到 [mysqld] 并在其后添加如下配置: # 唯一标识此 MySQL 服务器,默认值为 1,一般采用所属 IP 的末端值 server-

(转)在 CentOS7 上安装 MongoDB

在 CentOS7 上安装 MongoDB 1 通过 SecureCRT 连接至 CentOS7 服务器: 2 进入到 /usr/local/ 目录: cd /usr/local 3 在当前目录下创建 tools 目录: mkdir -p tools 4 进入到 tools 目录中: cd tools 5 下载与 CentOS 系统匹配的 mongodb-linux-x86_64-rhel70-3.2.4.tgz 文件: wget https://fastdl.mongodb.org/linux