mongodb单机分片 fangfu的技术博客

之前在生产环境中搭建过mongodb的分片集群,在上生产环境之前,是必须在测试环境中搭建并测试的。 这里记录一下mongodb单台服务器分片的简单的搭建过程。

mongo分片实际上就是一种水平扩展。通过增加更多的服务器来承载工作数据负载。以便于支撑海量的数据和高读写的操作。 如果数据集不够大,建议还是用副本集。因为有路由的存在并且在处理细节上更复杂。分片环境下的性能可能始终没有副本集性能高。

mongo分片主要包括三大部分:shard,mongos,config。

shard分片服务器:每个分片都是整体数据的一部分子集。生产环境中每个分片都需要部署成副本集。 mongos路由服务器:为客户端和分片集群之间提供接口。可以部署多个。 config配置服务器:存储集群的元数据和配置,必须配置成副本集。

注意:以下配置过程仅限测试环境使用,生产环境不适用。

安装mongodb的过程就不写了,下载安装包直接解压就行了。 主要是需要改mongodb的配置文件。

我们先配置config配置服务器。 编辑mongod1.conf,mongod2.conf,mongod3.conf

vi /etc/mongodb/mongod1.conf

systemLog:
  destination: file
  logAppend: true
  path: /data/mongodb/config/mongodb1.log
storage:
  dbPath: /data/mongodb/config/data1
  journal:
    enabled: true
processManagement:
  fork: true
  pidFilePath: /data/mongodb/config/configsrv1.pid
net:
  port: 21001
  bindIp: 0.0.0.0
replication:
    replSetName: configs
sharding:
    clusterRole: configsvr

一共三个配置文件,我只贴了其中一个的配置文件,文件内容都一样,只是端口、存储路径、pid、日志不一样,改一下就行了。 然后创建对应的文件路径:

mkdir -p /data/mongodb/config/data1
mkdir -p /data/mongodb/config/data2
mkdir -p /data/mongodb/config/data3

分别启动三个进程:

mongod --config=/etc/mongodb/mongod1.conf
mongod --config=/etc/mongodb/mongod2.conf
mongod --config=/etc/mongodb/mongod3.conf

下面搭建Shard分片服务器。 创建三个文件shard1.conf,shard2.conf,shard3.conf 同样的,文件内容一样,只有端口、dbpath、log、pid不一样,自己改一下 vi shard1.conf

systemLog:
  destination: file
  logAppend: true
  path: /data/mongodb/shard1/log/shard1.log

storage:
  dbPath: /data/mongodb/shard1/data
  journal:
    enabled: true

processManagement:
  fork: true
  pidFilePath: /data/mongodb/shard1/shard1.pid

net:
  port: 27001
  bindIp: 0.0.0.0

#replication:
#    replSetName: shard1

sharding:
    clusterRole: shardsvr

创建对应目录:

mkdir -p /data/mongodb/shard1/log
mkdir -p /data/mongodb/shard1/data
mkdir -p /data/mongodb/shard2/log
mkdir -p /data/mongodb/shard2/data
mkdir -p /data/mongodb/shard3/log
mkdir -p /data/mongodb/shard3/data

搭建mongos路由服务器 创建mongos.conf vi mongos.conf

systemLog:
  destination: file
  logAppend: true
  path: /data/mongodb/mongos/log/mongodbmongos.log
processManagement:
  fork: true
net:
  port: 20000
  bindIp: 0.0.0.0
sharding:
   configDB: configs/127.0.0.1:21001,127.0.0.1:21002,127.0.0.1:21003

创建目录: mkdir -p /data/mongodb/mongos/log

启动三个shard进程:

mongod --config=/etc/mongodb/shard1.conf
mongod --config=/etc/mongodb/shard2.conf
mongod --config=/etc/mongodb/shard3.conf

进入mongo shell mongo –port 21001 输入命令创建副本集,简单粗暴:

use admin
config = {
    _id : "configs",
     members : [
         {_id : 0, host : "127.0.0.1:21001" },
         {_id : 1, host : "127.0.0.1:21002" },
         {_id : 2, host : "127.0.0.1:21003" }
     ]
}
rs.initiate(config)

启动mongos进程,注意查看有无报错:

mongos --config=/etc/mongodb/mongos.conf

mongos启动完成后,登录mongos: mongo –port 20000 在mongo shell中输入下面的命令:

use admin
sh.addShard("127.0.0.1:27001")
sh.addShard("127.0.0.1:27002")
sh.addShard("127.0.0.1:27003")
sh.status()

由于是单机测试,Shard分片没有做副本集。在生产环境中每个Shard都是必须要做副本集的。

在mongos里测试,用test库中的msg集合,循环1000次插入数据,最后可以分别登录shard进行验证。

sh.enableSharding("test")
sh.shardCollection("test.msg",{x: 1,time: 1})

use test
for(var i=0;i<1000;i++){db.msg.insert({"x":"something"+i,"time":new Date()})}
FFwechat FFalipay