热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MongoDB数据库集群分片

Mongodb集群分片一、简介1、MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSQL数据库产品中最热门的一种。它在许多场景下可用于替代传统的关系型数据库或键/值存储方式,MongoDB使用C++开发。2、MongoDB是一个介于关系数据库和非关系数据

Mongodb集群分片

一、简介

1、 MongoDB 是一个高性能,开源,无模式的文档型数据库,是当前NoSQL 数据库产品中最热门的一种。它在许多场景下可用于替代传统的关系型数据库或键/值存储方式,MongoDB使用C++开发。

2、 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json 的bjson 格式,因此可以存储比较复杂的数据类型。MongoDB 最大的特点是他支持的查询语言非    常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查    询的绝大部分功能,而且还支持对数据建立索引。它是一个面向集合的,模式自由的文   档型数据库。

二、部署介绍与部署目的

1、本次部署是在一台服务器上实现,下面用分组来表示,如果在多台上部署只需要修 改ip和端口就可以。

2、部署主要实现的功能是实现分片、复制集,主备可以在宕机之后自动切换,实现高 可用。

分组

服务端口号

第一组

mongod shard1_1:27017

mongod shard1_1:27018

mongod shard1_3:27019

mongod config:20000

mongs:30000

第二组

mongod shard2_1:27020

mongod shard2_2:27021

mongod shard2_3:27022

mongod config:20010

mongs:30010

第三组

mongod shard3_1:27023

mongod shard3_2:27024

mongod shard3_3:27025

mongod config:20020

mongs:30020

三、安装部署

1、创建第一组数据库储存路径

# mkdir -p /data/shard1_1

# mkdir -p /data/shard1_2

# mkdir -p /data/shard1_3

# mkdir -p /data/config

2、开启mongod进程,指定端口、路径、声明这是一个集群的分片、副本集名称;

# ./mongod --shardsvr --replSet shard1 --port 27017 --dbpath /data/shard1_1 --logpath /data/mongodb.log --logappend --fork

# ./mongod --shardsvr --replSet shard1 --port 27018 --dbpath /data/shard1_2 --logpath /data/mongodb.log --logappend --fork

# ./mongod --shardsvr --replSet shard1 --port 27019 --dbpath /data/shard1_3 --logpath /data/mongodb.log --logappend --fork

3、 创建第二组数据储存路径

# mkdir -p /data/shard2_1

# mkdir -p /data/shard2_2

# mkdir -p /data/shard2_3

# mkdir -p /data/config_1

4、开启mongod进程,指定端口、路径、声明这是一个集群的分片、副本集名称;

# ./mongod --shardsvr --replSet shard2 --port 27020 --dbpath /data/shard2_1 --logpath /data/mongodb.log --logappend --fork

# ./mongod --shardsvr --replSet shard2 --port 27021 --dbpath /data/shard2_2 --logpath /data/mongodb.log --logappend --fork

# ./mongod --shardsvr --replSet shard2 --port 27022 --dbpath /data/shard2_3 --logpath /data/mongodb.log --logappend ?fork

5、 创建第二组数据储存路径

# mkdir -p /data/shard3_1

# mkdir -p /data/shard3_2

# mkdir -p /data/shard3_3

# mkdir -p /data/config_2

6、 开启mongod进程,指定端口、路径、声明这是一个集群的分片、副本集名称;

# ./mongod --shardsvr --replSet shard3 --port 27023 --dbpath /data/shard3_1 --logpath /data/mongodb.log --logappend --fork

# ./mongod --shardsvr --replSet shard3 --port 27024 --dbpath /data/shard3_2 --logpath /data/mongodb.log --logappend --fork

# ./mongod --shardsvr --replSet shard3 --port 27025 --dbpath /data/shard3_3 --logpath /data/mongodb.log --logappend --fork

7、第一组;进入数据库定义config server组;

[root@test1 bin]# ./mongo --port 27017 MongoDB shell version: 2.0.0

connecting to: 127.0.0.1:27017/test

> cOnfig= {_id: 'shard1', members: [

... ... {_id: 0, host: '127.0.0.1:27017'},

... ... {_id: 1, host: '127.0.0.1:27018'},

... ... {_id: 2, host: '127.0.0.1:27019'}]

... ... };

{

        "_id" : "shard1",

        "members" : [

{

"_id" : 0,

"host" : "127.0.0.1:27017"

},

{

                        "_id" : 1,

"host" : "127.0.0.1:27018"

},

{

"_id" : 2,

"host" : "127.0.0.1:27019"

}

        ]

}

> rs.initiate(config)

{

        "info" : "Config now saved locally. Should come online in about a minute.",

        "ok" : 1

}

8、第二组;进入数据库定义config server组;

[root@test1 bin]# ./mongo --port 27020

MongoDB shell version: 2.0.0

connecting to: 127.0.0.1:27020/test

> cOnfig= {_id: 'shard2', members: [

... ... ... {_id: 0, host: '127.0.0.1:27020'},

... ... ... {_id: 1, host: '127.0.0.1:27021'},

... ... ... {_id: 2, host: '127.0.0.1:27022'}]

... ... ... };

{

        "_id" : "shard2",

        "members" : [

{

                        "_id" : 0,

"host" : "127.0.0.1:27020"

},

{

"_id" : 1,

"host" : "127.0.0.1:27021"

},

{

       "_id" : 2,

"host" : "127.0.0.1:27022"

}

        ]

}

> rs.initiate(config)

{

        "info" : "Config now saved locally. Should come online in about a minute.",

        "ok" : 1

}

9、第三组;进入数据库定义config server组;

[root@test1 bin]# ./mongo --port 27025

MongoDB shell version: 2.0.0

connecting to: 127.0.0.1:27025/test

> cOnfig= {_id: 'shard3', members: [

... ... ... {_id: 0, host: '127.0.0.1:27023'},

... ... ... {_id: 1, host: '127.0.0.1:27024'},

... ... ... {_id: 2, host: '127.0.0.1:27025'}]

... ... ... };

{

        "_id" : "shard3",

        "members" : [

{

"_id" : 0,

"host" : "127.0.0.1:27023"

},

{

       "_id" : 1,

"host" : "127.0.0.1:27024"

},

{

"_id" : 2,

"host" : "127.0.0.1:27025"

}

        ]

}

> rs.initiate(config)

{

        "info" : "Config now saved locally. Should come online in about a minute.",

        "ok" : 1

}

10、第一组;声明一个集群的config server,指定端口号;开启mongos进程,启动route server,指定数据分块大小;

# ./mongod --configsvr --dbpath /data/config --port 20000 --logpath /data/config.log --logappend --fork

# ./mongos --configdb 127.0.0.1:20000,127.0.0.1:20010,127.0.0.1:20020 --port 30000 --chunkSize 1 --logpath /data/mongos.log --logappend ?fork

11、第二组;声明一个集群的config server,指定端口号;开启mongos进程,启动route server,指定数据分块大小;

# ./mongod --configsvr --dbpath /data/config_1 --port 20010 --logpath /data/config.log --logappend --fork

# ./mongos --configdb 127.0.0.1:20000,127.0.0.1:20010,127.0.0.1:20020 --port 30010 --chunkSize 1 --logpath /data/mongos.log --logappend ?fork

12、第三组;声明一个集群的config server,指定端口号;开启mongos进程,启动route server,指定数据分块大小;

# ./mongod --configsvr --dbpath /data/config_2 --port 20020 --logpath /data/config.log --logappend --fork

# ./mongos --configdb 127.0.0.1:20000,127.0.0.1:20010,127.0.0.1:20020 --port 30020 --chunkSize 1 --logpath /data/mongos.log --logappend ?fork

13、添加shard server;设置分片储存数据库;设置分片的集合名称,且必须指定Shard Key,系统会自动创建索引;

[root@test1 bin]# ./mongo --port 30000

MongoDB shell version: 2.0.0

connecting to: 127.0.0.1:30000/test

mongos> use admin

switched to db admin

mongos> db.runCommand({addshard:"shard1/127.0.0.1:27017,127.0.0.1:27018,127.0.0.1:27019"});

{ "shardAdded" : "shard1", "ok" : 1 }

mongos> db.runCommand({addshard:"shard2/127.0.0.1:27020,127.0.0.1:27021,127.0.0.1:27022"});

{ "shardAdded" : "shard2", "ok" : 1 }

mongos> db.runCommand({addshard:"shard3/127.0.0.1:27023,127.0.0.1:27024,127.0.0.1:27025"});

{ "shardAdded" : "shard3", "ok" : 1 }

mongos> db.runCommand({ enablesharding:"test" })

{ "ok" : 1 }

mongos> db.runCommand({ shardcollection: "test.users", key: { _id:1 }})

{ "collectionsharded" : "test.users", "ok" : 1 }

mongos>

------------------------------测试-----------------------

1、随便连接到其中一台上的 mongos 进程(这里是30000、30010、30020三个端口)#

2、进入test库中

3、添加数据

4、查看数据库状态

5、以下可以看出数据分别放在了不同的3组中

6、查看数据库存放的目录可以看出每个数据库组都有数据

[root@test1 bin]# ./mongo --port 30010

MongoDB shell version: 2.0.0

connecting to: 127.0.0.1:30010/test

mongos> use test

switched to db test

mongos> for (var i = 1; i <= 500000; i++) db.users.insert({age:i,name:"qinshou",addr:"Beijing",country:"China"})

mongos> db.users.stats()

{

        "sharded" : true,

        "flags" : 1,

        "ns" : "test.users",

        "count" : 200000,

        "numExtents" : 17,

        "size" : 15200076,

        "storageSize" : 25157632,

        "totalIndexSize" : 6532624,

        "indexSizes" : {

                "_id_" : 6532624

        },

        "avgObjSize" : 76.00038,

        "nindexes" : 1,

        "nchunks" : 15,

        "shards" : {

"shard1" : {

"ns" : "test.users",

"count" : 82398,

                        "size" : 6262280,

"avgObjSize" : 76.00038835894075,

"storageSize" : 11182080,

"numExtents" : 6,

"nindexes" : 1,

"lastExtentSize" : 8388608,

"paddingFactor" : 1,

"flags" : 1,

"totalIndexSize" : 2689904,

"indexSizes" : {

"_id_" : 2689904

                        },

"ok" : 1

},

"shard2" : {

"ns" : "test.users",

"count" : 15780,

"size" : 1199292,

"avgObjSize" : 76.00076045627377,

"storageSize" : 2793472,

"numExtents" : 5,

"nindexes" : 1,

"lastExtentSize" : 2097152,

"paddingFactor" : 1,

"flags" : 1,

"totalIndexSize" : 523264,

"indexSizes" : {

"_id_" : 523264

},

"ok" : 1

},

"shard3" : {

"ns" : "test.users",

"count" : 101822,

"size" : 7738504,

"avgObjSize" : 76.000314273929,

"storageSize" : 11182080,

"numExtents" : 6,

"nindexes" : 1,

"lastExtentSize" : 8388608,

"paddingFactor" : 1,

"flags" : 1,

"totalIndexSize" : 3319456,

"indexSizes" : {

"_id_" : 3319456

},

"ok" : 1

}

        },

        "ok" : 1

}

mongos>

[root@test1 data]# ll

total 1076

drwxr-xr-x 4 root root   4096 Jul 11 10:31 config

drwxr-xr-x 4 root root   4096 Jul 11 10:31 config_1

drwxr-xr-x 4 root root   4096 Jul 11 10:31 config_2

-rw-r--r-- 1 root root 653298 Jul 11 11:22 config.log

drwxr-xr-x 3 root root   4096 Oct 9 2011 db

-rw-r--r-- 1 root root 154454 Jul 11 11:22 mongodb.log

-rw-r--r-- 1 root root 236269 Jul 11 11:22 mongos.log

drwxr-xr-x 4 root root   4096 Jul 11 10:42 shard1_1

drwxr-xr-x 3 root root   4096 Jul 11 10:40 shard1_2

drwxr-xr-x 4 root root   4096 Jul 11 10:42 shard2_1

drwxr-xr-x 3 root root   4096 Jul 11 10:42 shard2_2

drwxr-xr-x 4 root root   4096 Jul 11 10:42 shard3_1

drwxr-xr-x 3 root root   4096 Jul 11 10:42 shard3_2

到此!搭建完成!!!有疑问请参考《mongodb实践》《mongodb手册》


推荐阅读
  • MongoDB核心概念详解
    本文介绍了NoSQL数据库的概念及其应用场景,重点解析了MongoDB的基本特性、数据结构以及常用操作。MongoDB是一个高性能、高可用且易于扩展的文档数据库系统。 ... [详细]
  • 本文介绍了如何使用Node.js通过两种不同的方法连接MongoDB数据库,包括使用MongoClient对象和连接字符串的方法。每种方法都有其特点和适用场景,适合不同需求的开发者。 ... [详细]
  • 本文详细介绍了如何搭建一个高可用的MongoDB集群,包括环境准备、用户配置、目录创建、MongoDB安装、配置文件设置、集群组件部署等步骤。特别关注分片、读写分离及负载均衡的实现。 ... [详细]
  • 实践指南:使用Express、Create React App与MongoDB搭建React开发环境
    本文详细介绍了如何利用Express、Create React App和MongoDB构建一个高效的React应用开发环境,旨在为开发者提供一套完整的解决方案,包括环境搭建、数据模拟及前后端交互。 ... [详细]
  • Redis:缓存与内存数据库详解
    本文介绍了数据库的基本分类,重点探讨了关系型与非关系型数据库的区别,并详细解析了Redis作为非关系型数据库的特点、工作模式、优点及持久化机制。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • Oracle字符集详解:图表解析与中文乱码解决方案
    本文详细解析了 Oracle 数据库中的字符集机制,通过图表展示了不同字符集之间的转换过程,并针对中文乱码问题提供了有效的解决方案。文章深入探讨了字符集配置、数据迁移和兼容性问题,为数据库管理员和开发人员提供了实用的参考和指导。 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • MongoVUE基础操作指南:轻松上手数据库管理
    本文介绍了MongoVUE的基础操作,旨在帮助用户轻松掌握数据库管理技巧。MongoVUE是一款功能强大的MongoDB客户端工具,虽然需要注册,但其用户友好的界面和丰富的功能使其成为许多开发者的首选。文中详细解释了安装步骤、基本配置以及常见操作方法,并对一些常见的问题进行了修正和补充,确保用户能够快速上手并高效使用MongoVUE进行数据库管理。 ... [详细]
  • MongoDB高可用架构:深入解析Replica Set机制
    MongoDB的高可用架构主要依赖于其Replica Set机制。Replica Set通过多个mongod节点的协同工作,实现了数据的冗余存储和故障自动切换,确保了系统的高可用性和数据的一致性。本文将深入解析Replica Set的工作原理及其在实际应用中的配置和优化方法,帮助读者更好地理解和实施MongoDB的高可用架构。 ... [详细]
  • NoSQL数据库,即非关系型数据库,有时也被称作Not Only SQL,是一种区别于传统关系型数据库的管理系统。这类数据库设计用于处理大规模、高并发的数据存储与查询需求,特别适用于需要快速读写大量非结构化或半结构化数据的应用场景。NoSQL数据库通过牺牲部分一致性来换取更高的可扩展性和性能,支持分布式部署,能够有效应对互联网时代的海量数据挑战。 ... [详细]
  • 为何Serverless将成为未来十年的主导技术领域?
    为何Serverless将成为未来十年的主导技术领域? ... [详细]
  • protobuf 使用心得:解析与编码陷阱
    本文记录了一次在广告系统中使用protobuf进行数据交换时遇到的问题及其解决过程。通过这次经历,我们将探讨protobuf的特性和编码机制,帮助开发者避免类似的陷阱。 ... [详细]
author-avatar
小二上酒
拿起键盘就是撸~~
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有