【Mongodb】Sharding 集群配置

mongodb的sharding集群由以下3个服务组成:

Shards  Server: 每个shard由一个或多个mongod进程组成,用于存储数据

Config  Server: 用于存储集群的Metadata信息,包括每个Shard的信息和chunks信息

Route   Server: 用于提供路由服务,由Client连接,使整个Cluster看起来像单个DB服务器

另外,Chunks是指MongoDB中一段连续的数据块,默认大小是200M,一个Chunk位于其中一台Shard服务器上

下面,搭建一个Cluster,它由4台服务器组成,包括3个Shard,3个Config,1个Route

搭建mongodb sharding 配置过程

1 创建数据存放目录

/opt/mongodata/r1

/opt/mongodata/r2

/opt/mongodata/r3

--注意配置顺序

rac1

mkdir  -p /opt/mongodata/config1

rac2

mkdir  -p /opt/mongodata/config2

rac3

mkdir  -p /opt/mongodata/config3

rac4

mkdir  -p /opt/mongodata/mongos

2 配置config

rac1

[mongodb@rac1 bin]$ ./mongod --configsvr --dbpath=/opt/mongodata/config1 --port 28001 --logpath=/opt/mongodata/config1/config.log &

[1] 19996

[mongodb@rac1 bin]$ all output going to: /opt/mongodata/config1/config.log

rac2

[mongodb@rac2 bin]$ ./mongod --configsvr --dbpath=/opt/mongodata/config2 --port 28002 --logpath=/opt/mongodata/config2/config.log &

[1] 27223

[mongodb@rac2 bin]$ all output going to: /opt/mongodata/config2/config.log

rac3

[mongodb@rac3 bin]$ ./mongod --configsvr --dbpath=/opt/mongodata/config3 --port 28003 --logpath=/opt/mongodata/config3/config.log &   

[1] 31020

[mongodb@rac3 bin]$ all output going to: /opt/mongodata/config3/config.log

3 配置路由设置

rac4

[mongodb@rac4 bin]$ ./mongos --chunkSize 1 --configdb "rac1:28001,rac2:28002,rac3:28003" --logpath /opt/mongodata/mongos/mongos.log &

NOTE:mongos 不需要-dbpath

4 配置sharding 节点

rac1

[mongodb@rac1 bin]$ ./mongod -shardsvr -dbpath=/opt/mongodata/r1 -port 27018 -logpath=/opt/mongodata/r1/27018.log &

rac2

[mongodb@rac2 bin]$ ./mongod -shardsvr -dbpath=/opt/mongodata/r2 -port 27019 -logpath=/opt/mongodata/r2/27019.log &

rac3

[mongodb@rac3 bin]$ ./mongod -shardsvr -dbpath=/opt/mongodata/r3 -port 27020 -logpath=/opt/mongodata/r3/27020.log &

5 在路由服务器上进行添加shard配置:

addshard : 添加 Shard Server,相关的命令还有 listshards 和 removeshard。如果是要添加replica set 的shard 其语法是:db.runCommand({addshard:'replica set 的名字/IP:PORT,[IP:PORT,...]'});

enablesharding : 用于设置可以被分布存储的数据库。

激活指定数据库的分片功能,这样数据库中的不同的collections会被分配到不同的shard上面,然而同一个collection会在同一个shard上面。

shardcollection : 用于设置具体被切块的集合名称,且必须指定 Shard Key,系统会自动创建索引。要进行collection级别的shard,必须执行

db.runCommand( { shardcollection : “”,key : });

namespace : 是collection的名字

shardkeypatternobject:片健,对一个集合进行分片时要设置一个字段或者说键作为拆分的依据。

Note:

1 要进行collection级别的shard 必须先激活数据库级别的shard。

2 Sharded Collection 只能有一个 unique index,且必须是 shard key。

官方文档:a sharded collection can have only one unique index, which must exist on the shard key.NO other unique indexes can exist on the collection. 

mongos> db.runCommand({addshard:'10.250.7.225:27018'});

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

mongos> db.runCommand({addshard:'10.250.7.249:27019'});

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

mongos> db.runCommand({addshard:'10.250.7.241:27020'});

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

当然如果是replica set + sharding 架构也可以使用db.runCommand({addshard:'replica set 的名字/IP:PORT,[IP:PORT,...]',name:"shard的名字",maxSize;N});

Name:用于指定每个shard的名字,不指定的话系统将自动分配
maxSize:指定各个shard可使用的最大磁盘空间,单位megabytes

mongos> 

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

{ "ok" : 1 }

mongos> db.runCommand({listshards:1});

{

        "shards" : [

                {

                        "_id" : "shard0000",

                        "host" : "10.250.7.225:27018"

                },

                {

                        "_id" : "shard0001",

                        "host" : "10.250.7.249:27019"

                },

                {

                        "_id" : "shard0002",

                        "host" : "10.250.7.241:27020"

                }

        ],

        "ok" : 1

}

mongos> printShardingStatus();

--- Sharding Status --- 

  sharding version: { "_id" : 1, "version" : 3 }

  shards:

        {  "_id" : "shard0000",  "host" : "10.250.7.225:27018" }

        {  "_id" : "shard0001",  "host" : "10.250.7.249:27019" }

        {  "_id" : "shard0002",  "host" : "10.250.7.241:27020" }

  databases:

        {  "_id" : "admin",  "partitioned" : false,  "primary" : "config" }

        {  "_id" : "test",  "partitioned" : true,  "primary" : "shard0000" }

mongos> db.runCommand({shardcollection:'test.yql',key:{_id:1}, unique : true});

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

mongos> use test

switched to db test

mongos> 

mongos> db.yql.insert({id:1,val:"this is a message on rac4 mongos !"});

mongos> db.yql.insert({id:2,val:"this is a message on rac4:27020 --2011-11-02 9:47!"});

mongos> db.yql.insert({id:2,val:"this is a message on rac4:27020 --2011-11-02 9:49!"});

mongos> db.yql.insert({id:3,val:"this is a message on rac4:27020 --2011-11-02 9:50!"});

mongos> db.yql.insert({id:4,val:"this is a message on rac4:27020 --2011-11-02 9:52!"});

mongos> db.yql.insert({id:5,val:"this is a message on rac4:27020 --2011-11-02 9:53!"});

mongos> db.yql.insert({id:6,val:"this is a message on rac4:27020 --2011-11-02 9:55!"});

mongos> db.yql.insert({id:7,val:"this is a message on rac4:27020 --2011-11-02 9:56!"});

mongos> db.yql.insert({id:8,val:"this is a message on rac4:27020 --2011-11-02 9:56!"});

mongos> db.yql.insert({id:9,val:"this is a message on rac4:27020 --2011-11-02 9:57!"});

mongos> db.yql.insert({id:10,val:"this is a message on rac4:27020 --2011-11-02 9:58!"});

mongos> db.yql.insert({id:11,val:"this is a message on rac4:27020 --2011-11-02 9:59!"});

mongos> db.yql.insert({id:12,val:"this is a message on rac4:27020 --2011-11-02 10:00!"});

mongos> db.yql.insert({id:13,val:"this is a message on rac4:27020 --2011-11-02 10:01!"});

mongos> db.yql.insert({id:14,val:"this is a message on rac4:27020 --2011-11-02 10:02!"});

mongos> db.yql.insert({id:15,val:"this is a message on rac4:27020 --2011-11-02 10:03!"});

mongos> db.yql.insert({id:16,val:"this is a message on rac4:27020 --2011-11-02 10:04!"});

mongos> db.yql.find();

{ "_id" : ObjectId("4eb298b3adbd9673afee95e3"), "id" : 1, "val" : "this is a message on rac4 mongos !" }

{ "_id" : ObjectId("4eb2995badbd9673afee95e4"), "id" : 2, "val" : "this is a message on rac4:27020 --2011-11-02 9:47!" }

{ "_id" : ObjectId("4eb29962adbd9673afee95e5"), "id" : 2, "val" : "this is a message on rac4:27020 --2011-11-02 9:49!" }

{ "_id" : ObjectId("4eb29970adbd9673afee95e6"), "id" : 3, "val" : "this is a message on rac4:27020 --2011-11-02 9:50!" }

{ "_id" : ObjectId("4eb2997badbd9673afee95e7"), "id" : 4, "val" : "this is a message on rac4:27020 --2011-11-02 9:52!" }

{ "_id" : ObjectId("4eb29985adbd9673afee95e8"), "id" : 5, "val" : "this is a message on rac4:27020 --2011-11-02 9:53!" }

{ "_id" : ObjectId("4eb299eaadbd9673afee95e9"), "id" : 6, "val" : "this is a message on rac4:27020 --2011-11-02 9:55!" }

{ "_id" : ObjectId("4eb299f3adbd9673afee95ea"), "id" : 7, "val" : "this is a message on rac4:27020 --2011-11-02 9:56!" }

{ "_id" : ObjectId("4eb29a59adbd9673afee95eb"), "id" : 8, "val" : "this is a message on rac4:27020 --2011-11-02 9:56!" }

{ "_id" : ObjectId("4eb29a59adbd9673afee95ec"), "id" : 9, "val" : "this is a message on rac4:27020 --2011-11-02 9:57!" }

{ "_id" : ObjectId("4eb29a59adbd9673afee95ed"), "id" : 10, "val" : "this is a message on rac4:27020 --2011-11-02 9:58!" }

{ "_id" : ObjectId("4eb29a59adbd9673afee95ee"), "id" : 11, "val" : "this is a message on rac4:27020 --2011-11-02 9:59!" }

{ "_id" : ObjectId("4eb29a59adbd9673afee95ef"), "id" : 12, "val" : "this is a message on rac4:27020 --2011-11-02 10:00!" }

{ "_id" : ObjectId("4eb29a59adbd9673afee95f0"), "id" : 13, "val" : "this is a message on rac4:27020 --2011-11-02 10:01!" }

{ "_id" : ObjectId("4eb29a59adbd9673afee95f1"), "id" : 14, "val" : "this is a message on rac4:27020 --2011-11-02 10:02!" }

{ "_id" : ObjectId("4eb29a59adbd9673afee95f2"), "id" : 15, "val" : "this is a message on rac4:27020 --2011-11-02 10:03!" }

{ "_id" : ObjectId("4eb29a59adbd9673afee95f3"), "id" : 16, "val" : "this is a message on rac4:27020 --2011-11-02 10:04!" }

db..stats() 可以查看具体的 Shard 存储信息 

mongos> db.yql.stats();

{

        "sharded" : true,

        "flags" : 1,

        "ns" : "test.yql",

        "count" : 17,

        "numExtents" : 1,

        "size" : 1616,

        "storageSize" : 8192,

        "totalIndexSize" : 8176,

        "indexSizes" : {

                "_id_" : 8176

        },

        "avgObjSize" : 95.05882352941177,

        "nindexes" : 1,

        "nchunks" : 1,

        "shards" : {

           "shard0000" : { --表示yql被拆分到了10.250.7.225这台机器上了

                        "ns" : "test.yql",

                        "count" : 17,

                        "size" : 1616,

                        "avgObjSize" : 95.05882352941177,

                        "storageSize" : 8192,

                        "numExtents" : 1,

                        "nindexes" : 1,

                        "lastExtentSize" : 8192,

                        "paddingFactor" : 1,

                        "flags" : 1,

                        "totalIndexSize" : 8176,

                        "indexSizes" : {

                                "_id_" : 8176

                        },

                        "ok" : 1

                }

        },

        "ok" : 1

}

mongos> 

时间: 2024-10-31 19:32:47

【Mongodb】Sharding 集群配置的相关文章

MongoDB主从集群配置详解

创建必要的目录和认证文件: [root@mongo mongo]# mkdir keyfile [root@mongo mongo]# echo "mongo cluster one" > keyfile/m1 [root@mongo mongo]# echo "mongo cluster one" > keyfile/m2 [root@mongo mongo]# echo "mongo cluster one" > keyfi

【Mongodb】sharding 集群Add/Remove 节点

MongoDB的Auto-Sharding能够做到: 1 当各Sharding间负载和数据分布不平衡时,自动rebalancing 2 简单方便的添加和删除节点 3 自动故障转移(auto failover) 4 可扩展至上千台节点  如何增加shard节点,在之前的shard集群配置过程使用过.当向一个sharding集群添加新的节点,mongodb 会将在其他节点的数据chunk迁移到新的节点上面.以便达到均分数据的目的,这也算是负载均衡吧. 添加之前: mongos> db.printSh

MongoDB高可用集群配置的几种方案

一.高可用集群的解决方案 高可用性即HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性. 计算机系统的高可用在不同的层面上有不同的表现: (1)网络高可用 由于网络存储的快速发展,网络冗余技术被不断提升,提高IT系统的高可用性的关键应用就是网络高可用性,网络高可用性与网络高可靠性是有区别的,网络高可用性是通过匹配冗余的网络设备实现网络设备的冗余,达到高可用的目的. 比如冗余的交换机,冗余的路由器等

Apache2+Resin2.x集群配置实战

Apache2+Resin2.x集群配置 测试环境: 所需软件:apache2.x , Resin2.x 所需计算机:2 台 机器 A: IP 192.168.1.119 1. 安装好 Apache2.x 2. 修改 apache httpd.conf 配置文件, Include conf/include/remote-resin.conf 3. 生成 remote-resin.conf 放在 apache 的 conf/include 目录下,没有就创建一个 4. remote-resin.c

RedHat AS4-U2下Mysql 5.0.22集群配置

最近看到过很多关于cluster的资料,一直在研究linux系统级的负载均衡和高可用,但是还没有完全成功,只是实现了一些简单的服务:今天在搜集资料中看到有关mysql的cluster,看上去不是很复杂,就花了一个下午的时间研究研究,参考了Nanu前辈的MySQL集群配置步骤,一个简单的集群算是成功了.但是有一点我没搞懂,是不是mysql集群配置完成后,只能同步数据库中的表,而不能同步整个库?请高手指点一二,谢谢! 一.实验环境 1. Linux操作系统版本. RedHat AS4-U2 2. M

如何在服务器集群配置中相互接管IP地址

客户在二个不同的iSeries之间利用IASP实现相互备份,客户端通过Telnet连接到其中的主生产机或备机,如果一旦被连接的系统失败时,客户能否不需修改客户端会话参数(主机的IP地址),用同一个telnet会话无缝连接到另一系统上? 工作原理: 首先将SYSA 与 SYSB二个系统配置为集群环境,其中IASP1可以在二个系统中切换.虚拟IP为 19.19.19.19,这地址所属的网络地址范围不属于当前网络. 这虚拟IP地址是包含IASP1的集群资源组(cluster resource grou

JBoss集群配置代码实例

如果我们要想使得几台JBoss应用服务器互为备份(仅限于SESSION),在群内一台JBoss服务器down掉的时候,用户不受影响,继续以登陆用户身份进行工作,则我们需要配置Clustering,并启动相关服务,即JBoss集群配置下面将描述相关JBoss配置项: 1).修改应用APP的web.xml: Jboss3.2.6: ../default/deploy/jbossweb-tomcat50.sar/Test.war/WEB-INF/web.xml Jboss3.2.3: ../defau

sparkha集群配置

sparkha集群配置,基于hadoop hdfs的spark集群 hadoop配置. su - rdato cd /u01 tar -zxvf spark-2.1.1-bin-hadoop2.7.tgz mv spark-2.1.1-bin-hadoop2.7 spark #复制模版 cp /u01/spark/conf/spark-env.sh.template /u01/spark/conf/spark-env.sh cp /u01/spark/conf/slaves.template /

应用服务器-关于tomcat集群配置和分布式部署

问题描述 关于tomcat集群配置和分布式部署 如题,我在阿里云上买了一个云服务器 A,8核16G 10M带宽,配置比较高了, 如果需要负载均衡.分布式部署,可不可以不重新买一台 云服务器 B 请问一下,可不可以 直接在这台 A 服务器上 安装 apache 服务器, 然后在A服务器上安装一个tomcat1服务器和一个tomcat1服务器, 修改端口,避免冲突,然后 修改各种配置 直至成功. 请问 能不能达到 集群 和 分布式的效果?简单来说,就是 分布式可不可以同时部署 在同一个机器上的不同端