作者:只为_sunny | 来源:互联网 | 2017-11-02 10:08
Shardingcluster介绍这是一种可以水平扩展的模式,在数据量很大时特给力,实际大规模应用一般会采用这种架构去构建monodb系统。要构建一个MongoDBShardingCluster,需要三种角色:ShardServer:mongod实例,用于存储实际的数据块,实际生产环境中一
Sharding cluster介绍
这是一种可以水平扩展的模式,在数据量很大时特给力,实际大规模应用一般会采用这种架构去构建monodb系统。
要构建一个 MongoDB Sharding Cluster,需要三种角色:
Shard Server: mongod 实例,用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个relica set承担,防止主机单点故障
Config Server: mongod 实例,存储了整个 Cluster Metadata,其中包括 chunk 信息。
Route Server: mongos 实例,前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。
Sharding架构图:
本例实际环境架构
本例架构示例图:
- 分别在3台机器运行一个mongod实例(称为mongod shard11,mongod shard12,mongod shard13)组织replica set1,作为cluster的shard1
- 分别在3台机器运行一个mongod实例(称为mongod shard21,mongod shard22,mongod shard23)组织replica set2,作为cluster的shard2
- 每台机器运行一个mongod实例,作为3个config server
- 每台机器运行一个mongs进程,用于客户端连接
主机 |
IP |
端口信息 |
Server1 |
10.1.1.1 |
mongod shard11:27017 mongod shard12:27018 mongod config1:20000 mongs1:30000 |
Server2 |
10.1.1.2 |
mongod shard12:27017 mongod shard22:27018 mongod config2:20000 mongs2:30000 |
Server3 |
10.1.1.3 |
mongod shard13:27017 mongod shard23:27018 mongod config3:20000 mongs3:30000 |
软件准备
软件准备
1. 创建用户
groupadd -g 20001 mongodb
useradd -u 20001 -g mongodb mongodb
passwd mongodb
2. 安装monodb软件
su ? mongodb
tar zxvf mongodb-linux-x86_64-1.6.2.tar
安装好后,目录结构如下:
$ tree mongodb-linux-x86_64-1.6.2
mongodb-linux-x86_64-1.6.2
|? GNU-AGPL-3.0
|? README
|? THIRD-PARTY-NOTICES
`? bin
|? bsondump
|? mongo
|? mongod
|? mongodump
|? mongoexport
|? mongofiles
|? mongoimport
|? mongorestore
|? mongos
|? mongosniff
`? mongostat
1 directory, 14 files
3. 创建数据目录
根据本例sharding架构图所示,在各台sever上创建shard数据文件目录
Server1:
su ? monodb
cd /home/monodb
mkdir -p data/shard11
mkdir -p data/shard21
Server2:
su ? monodb
cd /home/monodb
mkdir -p data/shard11
mkdir -p data/shard22
Server3:
su ? monodb
cd /home/monodb
mkdir -p data/shard13
mkdir -p data/shard23
配置relica sets
1. 配置shard1所用到的replica sets:
Server1:
cd /home/mongodb/mongodb-linux-x86_64-1.6.2/bin
./mongod ?shardsvr ?replSet shard1 ?port 27017 ?dbpath /home/mongodb/data/shard11 ?oplogSize 100 ?logpath /home/mongodb/data/shard11.log ?logappend ?fork
Server2:
cd /home/mongodb/mongodb-linux-x86_64-1.6.2/bin
./mongod ?shardsvr ?replSet shard1 ?port 27017 ?dbpath /home/mongodb/data/shard12 ?oplogSize 100 ?logpath /home/mongodb/data/shard12.log ?logappend ?fork
Server3:
cd /home/mongodb/mongodb-linux-x86_64-1.6.2/bin
./mongod ?shardsvr ?replSet shard1 ?port 27017 ?dbpath /home/mongodb/data/shard13 ?oplogSize 100 ?logpath /home/mongodb/data/shard13.log ?logappend ?fork
初始化replica set
用mongo连接其中一个mongod,执行:
> cOnfig= {_id: ‘shard1′, members: [
{_id: 0, host: '10.1.1.1:27017'},
{_id: 1, host: '10.1.1.2:27017'},
{_id: 2, host: '10.1.1.3:27017'}]
}
> rs.initiate(config);
同样方法,配置shard2用到的replica sets:
server1:
cd /home/mongodb/mongodb-linux-x86_64-1.6.2/bin
./mongod ?shardsvr ?replSet shard2 ?port 27018 ?dbpath /home/mongodb/data/shard21 ?oplogSize 100 ?logpath /home/mongodb/data/shard21.log ?logappend ?fork
server2:
cd /home/mongodb/mongodb-linux-x86_64-1.6.2/bin
./mongod ?shardsvr ?replSet shard2 ?port 27018 ?dbpath /home/mongodb/data/shard22 ?oplogSize 100 ?logpath /home/mongodb/data/shard22.log ?logappend ?fork
server3:
cd /home/mongodb/mongodb-linux-x86_64-1.6.2/bin
./mongod ?shardsvr ?replSet shard2 ?port 27018 ?dbpath /home/mongodb/data/shard23 ?oplogSize 100 ?logpath /home/mongodb/data/shard23.log ?logappend ?fork
初始化replica set
用mongo连接其中一个mongod,执行:
> cOnfig= {_id: ‘shard2′, members: [
{_id: 0, host: '10.1.1.1:27018'},
{_id: 1, host: '10.1.1.2:27018'},
{_id: 2, host: '10.1.1.3:27018'}]
}
> rs.initiate(config);
到此就配置好了二个replica sets,也就是准备好了二个shards