您的位置:首页 > 数据库 > Mongodb

mongodb分片集群设计方案

2013-07-22 14:35 459 查看
1. 设计思想:分片集群(sharding cluster),每个分片就是一个集群,每个集群就是一个分片。
Shard Server: mongod 实例,用于存储实际的数据块,一个shard server角色可由三台机器组成一个replica set承担,保障数据完整性。
Config Server: mongod 实例,存储了整个 Cluster Metadata,其中包括 chunk 信息。
Route Server: mongos 实例,前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。

2. 分片架构图:



3. 分片集群架构示例图



4. 分片集群扩展示例图



5. 主机配置表



1. 分别在3台机器运行一个mongod实例(称为mongod shard11,mongod shard12,mongod shard13)组织replica set1,作为cluster的shard1;

2. 分别在3台机器运行一个mongod实例(称为mongod shard21,mongod shard22,mongod shard23)组织replica set2,作为cluster的shard2;

3. 分别在3台机器运行一个mongod实例(称为mongod shard31,mongod shard32,mongod shard33)组织replica set3,作为cluster的shard3;

4. 每台机器运行一个mongod实例,作为3个config server;

5. 每台机器运行一个mongs进程,用于客户端连接。

6. 主机操作步骤

6.1 安装软件

6.1.1 分别在三台主机安装mongodb

a. 安装mongodb

cd /usr/local/mongo

tar zxvf mongodb-linux-x86_64-2.0.2.tar

b. 创建数据分片目录

server1:

mkdir -p /data/data/mongodb/shard11

mkdir -p /data/data/mongodb/shard21

mkdir -p /data/data/mongodb/shard31

mkdir -p /data/log

mkdir -p /data/data/mongodb/config

server2:

mkdir -p /data/data/mongodb/shard12

mkdir -p /data/data/mongodb/shard22

mkdir -p /data/data/mongodb/shard32

mkdir -p /data/log

mkdir -p /data/data/mongodb/config

server3:

mkdir -p /data/data/mongodb/shard13

mkdir -p /data/data/mongodb/shard23

mkdir -p /data/data/mongodb/shard33

mkdir -p /data/log

mkdir -p /data/data/mongodb/config

6.2 配置replica set

6.2.1 配置shard1的replica set

server1:

cd /usr/local/mongo/bin

/usr/local/mongo/bin/mongod --shardsvr --replSet shard1 --port 29017 --dbpath=/data/data/mongodb/shard11 --logpath=/data/log/shard11.log --logappend --fork

server2:

cd /usr/local/mongo/bin

/usr/local/mongo/bin/mongod --shardsvr --replSet shard1 --port 29017 --dbpath=/data/data/mongodb/shard12 --logpath=/data/log/shard12.log --logappend --fork

server3:

cd /usr/local/mongo/bin

/usr/local/mongo/bin/mongod --shardsvr --replSet shard1 --port 29017 --dbpath=/data/data/mongodb/shard13 --logpath=/data/log/shard13.log --logappend --fork

6.2.2 初始化shard1的replica set

连接任意一个mongo实例,如server1

cd /usr/local/mongo/bin

./mongo --port 29017

config={_id : 'shard1',members : [{_id : 0, host : '172.16.8.131:29017'},{_id : 1, host : '172.16.8.132:29017'},{_id : 2, host : '172.16.8.133:29017'}]}

rs.initiate(config)

rs.status()

6.2.3 配置shard2的replica set

server1:

cd /usr/local/mongo/bin

/usr/local/mongo/bin/mongod --shardsvr --replSet shard2 --port 29018 --dbpath=/data/data/mongodb/shard21 --logpath=/data/log/shard21.log --logappend --fork

server2:

cd /usr/local/mongo/bin

/usr/local/mongo/bin/mongod --shardsvr --replSet shard2 --port 29018 --dbpath=/data/data/mongodb/shard22 --logpath=/data/log/shard22.log --logappend --fork

server3:

cd /usr/local/mongo/bin

/usr/local/mongo/bin/mongod --shardsvr --replSet shard2 --port 29018 --dbpath=/data/data/mongodb/shard23 --logpath=/data/log/shard23.log --logappend --fork

6.2.4 初始化shard2的replica set

连接任意一个mongo实例,如server1

cd /usr/local/mongo/bin

./mongo --port 29018

config={_id : 'shard2',members : [{_id : 0, host : '172.16.8.131:29018'},{_id : 1, host : '172.16.8.132:29018'},{_id : 2, host : '172.16.8.133:29018'}]}

rs.initiate(config)

rs.status()

6.2.5 配置shard3的replica set

server1:

cd /usr/local/mongo/bin

/usr/local/mongo/bin/mongod --shardsvr --replSet shard3 --port 29019 --dbpath=/data/data/mongodb/shard31 --logpath=/data/log/shard31.log --logappend --fork

server2:

cd /usr/local/mongo/bin

/usr/local/mongo/bin/mongod --shardsvr --replSet shard3 --port 29019 --dbpath=/data/data/mongodb/shard32 --logpath=/data/log/shard32.log --logappend --fork

server3:

cd /usr/local/mongo/bin

/usr/local/mongo/bin/mongod --shardsvr --replSet shard3 --port 29019 --dbpath=/data/data/mongodb/shard33 --logpath=/data/log/shard33.log --logappend --fork

6.2.6 初始化shard3的replica set

连接任意一个mongo实例,如server1

cd /usr/local/mongo/bin

./mongo --port 29019

config={_id : 'shard3',members : [{_id : 0, host : '172.16.8.131:29019'},{_id : 1, host : '172.16.8.132:29019'},{_id : 2, host : '172.16.8.133:29019'}]}

rs.initiate(config)

rs.status()

6.3 配置config server

server1:

/usr/local/mongo/bin/mongod --configsvr --dbpath=/data/data/mongodb/config --port 20000 --logpath=/data/log/config.log --logappend --fork

server2:

/usr/local/mongo/bin/mongod --configsvr --dbpath=/data/data/mongodb/config --port 20000 --logpath=/data/log/config.log --logappend --fork

server3:

/usr/local/mongo/bin/mongod --configsvr --dbpath=/data/data/mongodb/config --port 20000 --logpath=/data/log/config.log --logappend --fork

6.4 配置mongos server

server1:

/usr/local/mongo/bin/mongos --configdb 172.16.8.131:20000,172.16.8.132:20000,172.16.8.133:20000 -port 30000 -chunkSize 5 --logpath=/data/log/mongos.log --logappend --fork

server2:

/usr/local/mongo/bin/mongos --configdb 172.16.8.131:20000,172.16.8.132:20000,172.16.8.133:20000 -port 30000 -chunkSize 5 --logpath=/data/log/mongos.log --logappend --fork

server3:

/usr/local/mongo/bin/mongos --configdb 172.16.8.131:20000,172.16.8.132:20000,172.16.8.133:20000 -port 30000 -chunkSize 5 --logpath=/data/log/mongos.log --logappend --fork

6.5 配置分片集群

6.5.1 连接任意一个mongos实例,如server1,并切换到admin

cd /usr/local/mongo/bin

./mongo 172.16.8.131:30000/admin

db

admin

6.5.2 加入shards

db.runCommand({ addshard : "shard1/172.16.8.131:29017,172.16.8.132:29017,172.16.8.133:29017", name:"shard1", maxsize:20480});

db.runCommand({ addshard : "shard2/172.16.8.131:29018,172.16.8.132:29018,172.16.8.133:29018", name:"shard2", maxsize:20480});

db.runCommand({ addshard : "shard3/172.16.8.131:29019,172.16.8.132:29019,172.16.8.133:29019", name:"shard3", maxsize:20480});

6.5.3 Listing shards

db.runCommand({listshards : 1})

如果列出了以上三个你加的shards,表示shards已经配置成功

6.5.4激活数据库分片

db.runCommand({enablesharding : "201"});

通过执行以上命令,可以让数据库跨shard,如果不执行这步,数据库只会存放在一个shard;

一旦激活数据库分片,数据库中不同的collection将被存放在不同的shard上;

但一个collection仍旧存放在同一个shard上,要使单个collection也分片,还需单独对collection作些操作。

6.5.6 配置collection分片

db.runCommand({"shardcollection":"201.customer_user_mst", key:{"name":1}})

a. 分片的collection系统会自动创建一个索引(也可用户提前创建好)

b. 分片的collection只能有一个在分片key上的唯一索引,其它唯一索引不被允许
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: