1)架构图:

 

2)四个组件:mongos、config server、shard、replica set

mongos,数据库集群请求的入口,所有的请求都通过mongos进行协调,不需要在应用程序添加一个路由选择器,mongos自己就是一个请求分发中心,它负责把对应的数据请求请求转发到对应的shard服务器上。在生产环境通常有多mongos作为请求的入口,防止其中一个挂掉所有的mongodb请求都没有办法操作。

config server,顾名思义为配置服务器,存储所有数据库元信息(路由、分片)的配置。

Shard,和大数据存储HDFS分片存储的思想的东西。

Replica set,副本集服务器。

 

3)准备环境:

ip:192.168.30.243
ip:192.168.30.126
ip:192.168.30.9

4)在每台机器上建立mongos、config、shard1、shard2、shard3五个目录。

复制代码
#建立mongos目录
mkdir -p /data/mongodbtest/mongos
#建立config server 数据文件存放目录
mkdir -p /data/mongodbtest/config/data 
#建立config server 日志文件存放目录
mkdir -p /data/mongodbtest/config/log
#建立config server 日志文件存放目录
mkdir -p /data/mongodbtest/mongos/log
#建立shard1 数据文件存放目录
mkdir -p /data/mongodbtest/shard1/data
#建立shard1 日志文件存放目录
mkdir -p /data/mongodbtest/shard1/log
#建立shard2 数据文件存放目录
mkdir -p /data/mongodbtest/shard2/data
#建立shard2 日志文件存放目录
mkdir -p /data/mongodbtest/shard2/log
#建立shard3 数据文件存放目录
mkdir -p /data/mongodbtest/shard3/data
#建立shard3 日志文件存放目录
mkdir -p /data/mongodbtest/shard3/log
cd /data/mongodbtest
复制代码

5)安装mongodb

这里不多说了,看上个文章,还是在/data/mongodbtest/single里

 

6)规划5个组件对应的端口号,由于一个机器需要同时部署 mongos、config server 、shard1、shard2、shard3,所以需要用端口进行区分。

这个端口可以自由定义,在本文 mongos为 20000, config server 为 21000, shard1为 22001 , shard2为22002, shard3为22003.

 

参数说明:

dbpath:数据存放目录
logpath:日志存放路径 logappend:以追加的方式记录日志
replSet:replica set 的名字
port:mongodb 进程所使用的端口号,默认为 27017 fork:以后台方式运行进程

journal:写日志
smallfiles:当提示空间不够时添加此参数
其他参数
pidfilepath:进程文件,方便停止 mongodbdirectoryperdb:为每一个数据库按照数据库名建立文件夹存放 bind_ip:mongodb 所绑定的 ip 地址
oplogSize:mongodb 操作日志文件的最大大小。单位为 Mb,默认为硬盘剩余空间的 5%
noprealloc:不预先分配存储
shardsvr:分片
configsvr:配置服务节点
configdb:配置 config 节点到 route 节点

7)在每台机器上启动配置服务器

 ./mongod --dbpath /data/mongodbtest/config/data/ --configsvr  --port 29000 --logpath /data/mongodbtest/config/log/config4.log --fork

about to fork child process, waiting until server is ready for connections.
forked process: 5693
child process started successfully, parent exiting

8)在每台服务器上启动mongos服务器

/data/mongodbtest/single/mongodb/bin/mongos --configdb 192.168.30.134:21000,192.168.30.132:21000,192.168.30.131:21000 --port 20000 --logpath /data/mongodbtest/mongos/log/mongos.log –fork

但是在启动mongos的时候遇到这个问题

FailedToParse: mirrored config server connections are not supported; for config server replica sets be sure to use the replica set connection string
try './mongos --help' for more information

也就是说mongos只能和副本集主节点来进行连接


于是我决定先建立副本集,分别在三台服务器上执行以下命令,建立副本集。

9)配置各个分片的副本集

#在每个机器里分别设置分片1服务器及副本集shard1

/data/mongodbtest/single/mongodb/bin/mongod --shardsvr --replSet shard1 --port 22001 --dbpath /data/mongodbtest/shard1/data --logpath /data/mongodbtest/shard1/log/shard1.log --fork -nojournal --oplogSize 10

#在每个机器里分别设置分片2服务器及副本集shard2

/data/mongodbtest/single/mongodb/bin/mongod --shardsvr --replSet shard2 --port 22002 --dbpath /data/mongodbtest/shard2/data --logpath /data/mongodbtest/shard2/log/shard2.log --fork -nojournal --oplogSize 10

#在每个机器里分别设置分片3服务器及副本集shard3

/data/mongodbtest/single/mongodb/bin/mongod --shardsvr --replSet shard3 --port 22003 --dbpath /data/mongodbtest/shard3/data --logpath /data/mongodbtest/shard3/log/shard3.log --fork -nojournal --oplogSize 10

任意登陆一个机器,比如登陆192.168.30.131,连接mongodb

复制代码
#设置第一个分片副本集
/data/mongodbtest/single/mongodb/bin/mongo 127.0.0.1:22001
> use admin;
switched to db admin
#定义副本集配置
>config={_id:"shard1",members:[
... {_id:0,host:"192.168.30.131:22001"},
... {_id:1,host:"192.168.30.132:22001"},
... {_id:2,host:"192.168.30.134:22001",arbiterOnly:true}]#指定仲裁节点
... }
{
         "_id" : "shard1",
         "members" : [
                   {
                            "_id" : 0,
                            "host" : "192.168.30.131:22001"
                   },
                   {
                            "_id" : 1,
                            "host" : "192.168.30.132:22001"
                   },
                   {
                            "_id" : 2,
                            "host" : "192.168.30.134:22001",
                            "arbiterOnly" : true
                   }
         ]
}
#初始化副本集配置
>rs.initiate(config); 
#设置第二个分片副本集
/data/mongodbtest/single/mongodb/bin/mongo 127.0.0.1:22002 > use admin; >config={_id:"shard2",members:[ ... {_id:0,host:"192.168.30.131:22002"}, ... {_id:1,host:"192.168.30.132:22002"}, ... {_id:2,host:"192.168.30.134:22002",arbiterOnly:true}] ... } >rs.initiate(config); #设置第三个分片副本集 /data/mongodbtest/single/mongodb/bin/mongo 127.0.0.1:22003 > use admin; >config={_id:"shard3",members:[ ... {_id:0,host:"192.168.30.131:22003"}, ... {_id:1,host:"192.168.30.132:22003"}, ... {_id:2,host:"192.168.30.134:22003",arbiterOnly:true}] ... } >rs.initiate(config);
复制代码
下面是我的配置文件


./mongod --shardsvr --replSet shard1 --port 22001 --dbpath /data/mongodbtest/shard1/data/ --logpath /data/mongodbtest/shard1/log/shard1.log --fork


./mongod --shardsvr --replSet shard2 --port 22002 --dbpath /data/mongodbtest/shard2/data/ --logpath /data/mongodbtest/shard2/log/shard2.log --fork 
./mongod --shardsvr --replSet shard2 --port 22002 --dbpath /data/mongodbtest/shard2/data/ --logpath /data/mongodbtest/shard2/log/shard2.log --fork 

 
config={_id:"shard1",members:[
... {_id:0,host:"192.168.38.243:22001"},
... {_id:1,host:"192.168.38.126:22001"},
... {_id:2,host:"192.168.38.9:22001",arbiterOnly:true}]}

> rs.initiate(config)
{ "ok" : 1 }


到此为止  第一个副本集搭建成功,接下来搭建第二个副本集

进入22002的服务器shell

config={_id:"shard2",members:[ {_id:0,host:"192.168.38.243:22002"}, {_id:1,host:"192.168.38.126:22002"},
... {_id:2,host:"192.168.38.9:22002",arbiterOnly:true}]}
rs.initiate(config);


下面搭建第三个副本集

> use admin
switched to db admin
> config={_id:"shard3",members:[
... {_id:0,host:"192.168.38.243:22003"},
... {_id:1,host:"192.168.38.126:22003"},
... {_id:2,host:"192.168.38.9:22003",arbiterOnly:true}]}

> rs.initiate(config)
{ "ok" : 1 }


第三个副本集搭建成功



Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐