现在的位置: 首页 > 综合 > 正文

Mongodb Replica Sets + Sharding/配置文件启动

2018年05月08日 ⁄ 综合 ⁄ 共 3892字 ⁄ 字号 评论关闭

 

MongoDB Auto-Sharding 解决了海量存储和动态扩容的问题,但离实际生产环境所需的高可

靠、高可用还有些距离,所以有了” Replica Sets + Sharding”的解决方案:

 Shard:

使用 Replica Sets,确保每个数据节点都具有备份、自动容错转移、自动恢复能力。

 Config:

使用个配置服务器,确保元数据完整性

 Route:

使用个路由进程,实现负载平衡,提高客户端接入性能

以下我们配置一个 Replica Sets + Sharding 的环境如下:

 开放的端口如下:

主机 IP 服务及端口

Server A 192.168.0.199 mongod shard1_1:27017

mongod shard2_1:27018

mongod config1:20000

mongos1:30000

Server B 192.168.0.171 mongod shard1_2:27017

mongod shard2_2:27018

mongod config2:20000

mongos2:30000

Server C 192.168.0.170 mongod shard1_3:27017

mongod shard2_3:27018

mongod config3:20000

mongos3:30000

 创建数据目录

Server A :

D:\db\data\shard1_1

D:\db\data\shard2_1

D:\db\data\config

 Server B :

D:\db\data\shard1_2

D:\db\data\shard2_2

D:\db\data\config

 

 Server C :

D:\db\data\shard1_3

D:\db\data\shard2_3

D:\db\data\config

我用配置文件启动需要在A、B、C服务器上D:\db\data\新建以下目录

 mongo1.conf内容如下:

#common conf

#port 端口号

port=27017

#dbpath 数据库存储文件目录

dbpath=d:/db/data/shard1_1

#logpath 日志路径

logpath=d:/db/data/shard1.log

#logappend 日志追加形式  false:重新启动覆盖文件

logappend=true

#relica set 配置

#replSet指定复制集为shard1

replSet=shard1

#oplogSize

oplogSize=100

 

Mongo2.conf内容如下:

#common conf

#port 端口号

port=27018

#dbpath 数据库存储文件目录

dbpath=d:/db/data/shard2_1

#logpath 日志路径

logpath=d:/db/data/shard2.log

#logappend 日志追加形式  false:重新启动覆盖文件

logappend=true

#relica set 配置

#replSet指定复制集为shard1

replSet=shard2

#oplogSize

oplogSize=100

 

Mongoc.conf内容如下:

#common conf

#port 端口号

port=20000

#dbpath 数据库存储文件目录

dbpath=d:/db/data/config

#configsvr

configsvr=true

#logpath 日志路径

logpath=d:/db/data/config.log

#logappend 日志追加形式  false:重新启动覆盖文件

logappend=true

Mongos.conf内容如下

#common conf

#port 端口号

port=30000

#logpath 日志路径

logpath=d:/db/data/mongos.log

#logappend 日志追加形式  false:重新启动覆盖文件

logappend=true

#configdb

configdb=192.168.0.170:20000,192.168.0.171:20000,192.168.0.199:20000

 

配置Replica Sets

2.1 配置shard1所用到的Replica Sets

Server A :

Mongod -f d:\db\data\mongo1.conf

 Server B :

Mongod -f d:\db\data\mongo1.conf

 Server C :

Mongod -f d:\db\data\mongo1.conf

 mongo 连接其中一台机器的27017 端口的mongod,初始化Replica Setsshard1”,执行:

 mongo --port 27017

MongoDB shell version: 1.8.1

connecting to: 127.0.0.1:27017/test

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

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

... {_id: 1, host: '192.168.0.171:27017'},

... {_id: 2, host: '192.168.0.199:27017'}]

... }

……

rs.initiate(config)

{

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

"ok" : 1

}

3 配置shard2所用到的Replica Sets

Server A :

Mongod -f d:\db\data\mongo2.conf

 Server B :

Mongod -f d:\db\data\mongo2.conf

 Server C :

Mongod -f d:\db\data\mongo2.conf

 mongo 连接其中一台机器的27018 端口的mongod,初始化Replica Sets shard2”,执行:

[root@localhost bin]# ./mongo --port 27018

MongoDB shell version: 1.8.1

connecting to: 127.0.0.1:27018/test

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

... {_id: 0, host: '192.168.0.170:27018'},

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

... {_id: 2, host: '192.168..0.199:27018'}]

... }

……

rs.initiate(config)

{

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

"ok" : 1

}

配置Config Server

Server ABC上执行:

Mongod -f d:\db\data\mongoc.conf

 配置Route Process

Server ABC上执行:

Mongod -f d:\db\data\mongos.conf

 

 配置Shard Cluster

连接到其中一台机器的端口30000 mongos 进程,并切换到admin 数据库做以下配置

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

MongoDB shell version: 1.8.1

connecting to: 127.0.0.1:30000/test

use admin

switched to db admin

>db.runCommand({addshard:"shard1/192.168.0.170:27017,192.168.0.171:27017,192.168.0.199:

27017"});

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

>db.runCommand({addshard:"shard2/192.168.0.170:27018,192.168.0.171:27018,192.168.0.199:

27018"});

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

>

激活数据库及集合的分片

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

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

验证Sharding正常工作

连接到其中一台机器的端口30000 mongos 进程,并切换到test 数据库,以便添加测试数

use test

for(var i=1;i<=200000;i++) db.users.insert({id:i,addr_1:"Beijing",addr_2:"Shanghai"});

 

},

"ok" : 1

}

可以看到Sharding搭建成功了,跟我们期望的结果一致,至此我们就将Replica SetsSharding

结合的架构也学习完毕了。

 

抱歉!评论已关闭.