ip地址配置 mongodb_mongoDB集群(分片)搭建与配置

本文详细介绍了如何搭建MongoDB的分片集群,包括软件准备、数据存储配置、Sharding集群的架构介绍、各组件(Shard Server、Config Server、Route Server)的角色和配置,以及具体的分片配置步骤,涉及多个服务器的IP设置和端口分配。
摘要由CSDN通过智能技术生成

mongoDB集群(分片)搭建与配置

软件准备

下载mongoDB(mongoDB下载地址),笔者使用的是mongoDB 2.0.4的Linux 64-bit版本。

解压:tar xzf mongo.tgz

默认情况下,mongoDB将数据存储在/data/db目录下,但它不会自动创建该目录,所以我们需要手动创建它:

$ sudo mkdir -p /data/db/

$ sudo chown `id -u`

/data/db

也可以使用--dbpath参数来指定别的数据库目录。

如果只是想在单机上测试一下mongoDB的话,非常简单,首先启动MongoDB server,

$

./mongodb-xxxxxxx/bin/mongod

在另外一个终端,连接到我们启动的server:

$

./mongodb-xxxxxxx/bin/mongo

>

db.foo.save( { a : 1 } )

>

db.foo.find()

Sharding

Cluster介绍

这是一种可以水平扩展的模式,在数据量很大时特给力,实际大规模应用一般会采用这种架构去构建monodb系统,其构架图如下:

要构建一个

MongoDB Sharding Cluster,需要三种角色:

Shard Server:每个Shard可以是一个mongod 实例,也可以是一组mongod实例,用于存储实际的数据分片,实际生产环境中一个shard

server角色可由几台机器组个一个relica

set承担,防止主机单点故障。

Config Server:为了将一个特定的collection存储在多个Shard中,需要为该collection指定一个Shard key,决定该记录属于哪个chunk。mongod 实例,存储了整个 Cluster Metadata,其中包括 chunk 信息。具体来说,配置服务器可以存储以下信息:

所有Shard节点的配置信息

每个chunk的Shard

key范围

chunk在各Shard的分布情况

集群中所有DB和collection的Sharding配置信息

Route Server:mongos 实例,前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。路由首先询问配置服务器需要到哪个Shard上查询或保存记录,然后连接相应的Shard执行操作,最后将结果返回给客户端。

整体配置概览

首先说一下笔者的分片搭建环境,三台服务器,操作系统都是Ubuntu 11.04 Server

版,64位。IP分别为192.168.56.191、192.168.56.168、192.168.56.169,具体如下表所示:

主机

IP

服务及端口

server1

192.168.56.191

mongod shard11:27017

mongod shard12:27018

mongod config1:20000

mongs1:30000

server2

192.168.56.168

mongod shard12:27017

mongod shard22:27018

mongod config2:20000

mongs2:30000

server3

192.168.56.169

mongod shard13:27017

mongod shard23:27018

mongod config3:20000

mongs3:30000

这样我们集群包含了:

2个shard(mongod)、3个replica

shard1:192.168.56.191:27017、192.168.56.168:27017、192.168.56.169:27017

shard2:192.168.56.191:27018、192.168.56.168:27018、192.168.56.169:27018

3个config server:192.168.56.191:20000、192.168.56.168:20000、192.168.56.169: 20000

3个mongos:192.168.56.191:30000、192.168.56.168:30000、192.168.56.169: 30000

步骤

1)创建文件夹

在各台server上创建shard文件目录

Server1:

mkdir -p data/db/shard11

mkdir -p data/db/shard21

Server2:

mkdir -p data/db/shard12

mkdir -p data/db/shard22

Server3:

mkdir -p data/db/shard13

mkdir -p data/db/shard23

创建完毕后,请确保当前用户对该文件夹拥有读写权限(使用chown命令),否则之后会报错。

2)

在三台机器上分别启动mongod进程

Server1:

./bin/mongod --shardsvr --replSet

shard1 --port 27017 --dbpath /data/db/shard11/ --oplogSize 100

--logpath /data/db/shard12.log --logappend --fork --rest

./bin/mongod -shardsvr -replSet

shard2 -port 27018 -dbpath /data/db/shard21/ -oplogSize 100

-logpath /data/db/shard22.log -logappend -fork

Server2:

./bin/mongod --shardsvr --replSet shard1 --port 27017 --dbpath

/data/db/shard11/ --oplogSize 100 --logpath /data/db/shard12.log

--logappend --fork --rest

./bin/mongod -shardsvr -replSet

shard2 -port 27018 -dbpath /data/db/shard21/ -oplogSize 100

-logpath /data/db/shard22.log -logappend -fork

Server3:

./bin/mongod --shardsvr --replSet shard1 --port 27017 --dbpath

/data/db/shard13/ --oplogSize 100 --logpath /data/db/shard12.log

--logappend --fork --rest

./bin/mongod -shardsvr -replSet

shard2 -port 27018 -dbpath /data/db/shard23/ -oplogSize 100

-logpath /data/db/shard22.log -logappend -fork

3)

初始化两组Replica Set

确认第2步没有报错之后,我们开始配置Replica Set。 通过mongo连接到shard1的一个mongod:

./bin/mongo

192.168.56.191:27017

执行如下命令:

config = {_id: 'shard1', members:

[{_id: 0, host: '192.168.56.191:27017'}, {_id: 1, host:

'192.168.56.168:27017'}, {_id: 2, host:

'192.168.56.169:27017'}]};

rs.initiate(config);

同样方法,配置shard2用到的replica set:

./bin/mongo

192.168.56.191:27018

config = {_id: 'shard2', members:

[{_id: 0, host: '192.168.56.191:27018'}, {_id: 1, host:

'192.168.56.168:27018'}, {_id: 2, host:

'192.168.56.169:27018'}]};

rs.initiate(config);

4)

启动Config Server

在三台机器上分别启动并配置一台Config Server。命令如下:

./bin/mongod --configsvr --dbpath

/data/db/config/ --port 20000 --logpath /data/db/config.log

--logappend --fork

5)启动Routing Server

部署并配置三台Routing Server

./bin/mongos --configdb

192.168.56.191:20000,192.168.56.168:20000,192.168.56.169:20000

--port 30000 --chunkSize 100 --logpath /data/db/mongos.log

--logappend --fork

6)添加分片

连接到mongs服务器,并切换到admin

./bin/mongo

192.168.56.191:30000/admin

db.runCommand({addshard:"shard1/192.168.56.191:27017,192.168.56.168:27017,192.168.56.169:27017",name:"shard1",maxsize:2048,

allowLocal:true });

注意:

如果在上述操作中抛出类似如下的错误信息:

in seed list

shard1/192.168.56.191:27017,192.168.56.168:27017,192.168.56.169:27017,

host 192.168.56.191:27017 does not belong to replica set

shard1

那么将“192.168.56.191:27017”去掉再试试,笔者试过,可以成功,但原因目前还不太清楚。

db.runCommand({addshard:"shard2/192.168.56.191:27018,192.168.56.168:27018,192.168.56.169:27018",

name:"shard2",maxsize:2048, allowLocal:true });

db.runCommand( { listshards : 1 }

);

如果列出(sharding)了以上二个你加的shards,表示shards已经配置成功。笔者测试的输出如下:

mongos> db.runCommand(

{ listshards : 1 } );

{

"shards" : [

{

"_id" : "shard1",

"host" :

"shard1/192.168.56.168:27017,192.168.56.169:27017,192.168.56.155:27017"

},

{

"_id" : "shard2",

"host" :

"shard2/192.168.56.168:27018,192.168.56.169:27018,192.168.56.191:27018"

}

],

"ok" : 1

}

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值