分布式mongodb搭建-分区搭建

如上图所示为一个高可用处理大批量应用日志的模型,系统应用日志数据通过对应语言的mongodb客户端进行收集输入到mongo集群路由服务器,路由服务器根据配置中心集群将日志数据根据设置的片键路由到各个分片集群。下文将对该模型进行逐步说明如何搭建。

分片集群

针对大批量的系统应用日志,存在单节点无疑难以保证数据的高可用性,若节点因一些不可避免的原因(如停电,磁盘损坏)挂掉则影响正常使用。搭建主从结构则是一个不错的选择,搭建主从结构可参考前篇文章

然而单个主从结构并无法应付大批量的数据,随着系统运行时间的推移,数据逐日增长。单个主从集群会逐步膨胀一致饱和,直到饱和的时候再进行扩展则显得有些为时已晚。何不趁早进行分片处理。类似于我们常用的关系型数据库mysql进行分库分表存储。庆幸的是mongodb在进行分片的时候并不像mysql分库分表需要我们借助第三方工具,而mongodb已经为我们提供了一定的分片路由能力。我们只需要搭建若个主从结构集群以接入配置服务中心。

此处需要说明的是,搭建分片集群的时候,我们有必要在配置文件中标识集群角色为分片服务集群,如下

systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

storage:
  dbPath: /var/lib/mongo
  journal:
    enabled: true

processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb/mongod.pid  # location of pidfile

net:
  port: 27017
#  bindIp: 10.5.204.86  # Listen to local interface only, comment to listen on all interfaces.

replication:
  replSetName: rs2
  oplogSizeMB: 1024
sharding: 
  clusterRole: shardsvr #此处为重点

配置集群

如图中所示的CS1,CS2即为我们的配置中心集群。对于配置中心集群,在安装好mongodb后我们需要修改配置文件如下:

systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

storage:
  dbPath: /var/lib/mongo
  journal:
    enabled: true


processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb/mongod.pid  # location of pidfile

net:
  port: 27017
#  bindIp: 10.5.204.86  # Listen to local interface only, comment to listen on all interfaces.

replication:
  replSetName: cs #集群名字
  oplogSizeMB: 1024
sharding: 
  clusterRole: configsvr  #标识该集群为配置服务

初始化配置中心与前面的普通主从集群一样。不过需要在集群信息中需要体现出配置标识被激活,可通过如下命令方式补全

rs.initiate();
rs.reconfig({
    _id: "cs",
    configsvr: true,
    members: [
        {
            _id: 0,
            host: "10.5.204.73:27018",
            priority: 2
        },
        {
            _id: 1,
            host: "10.5.204.73:27017",
            priority: 1
        }
    ]
});

其中configsvr:true信息不可缺少,两个节点则是对应配置服务集群的节点信息.

路由服务

可以在指定目录下创建mongos.conf文件,内容如下

systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongos.log

processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb/mongos.pid  # location of pidfile

# network interfaces
net:
  port: 27019
#  bindIp: 10.5.204.86  # Listen to local interface only, comment to listen on all interfaces.

sharding: 
  configDB: cs/10.5.204.73:27017,10.5.204.73:27018 #此处为标识配置服务集群信息

使用如下命令启动路由服务

/usr/bin/mongos -f /etc/mongos.conf

接下来便可以在配置路由服务中添加分片集群,例如

use admin;

#添加分片集群信息
db.runCommand({addshard:"rs3/10.5.204.84:27017,10.5.204.84:27018"});

 

片键设置

在客户端登录mongos,登录方式与普通的mongo服务一样.运行如下命令

use admin;

#指定对log数据库开启分片功能
sh.enableSharding('log');

#对log数据库中的log集合的level字段进行hash分区
sh.shardCollection("log.log",{level:'hashed'}})

此处用作测试时将选择日志的级别作为片键仅供参考。

测试

在系统中集成mongodb收集日志时,仅需配置mongos服务的信息作为应用mongodb配置。日志则会将不同级别的日志自动路由到各个分区。

 

 

转载于:https://my.oschina.net/crazyharry/blog/1572947

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是搭建MongoDB分布式集群的步骤: 1.下载MongoDB二进制文件并解压缩到三台服务器上。 2.在三台服务器上创建数据目录和日志目录,并分别启动三个配置服务器。 ```shell # 创建数据目录和日志目录 mkdir -p /data/mongodb/configdb /data/mongodb/shard1/rs0 /data/mongodb/shard2/rs0 /data/mongodb/shard3/rs0 mkdir -p /var/log/mongodb/configdb /var/log/mongodb/shard1/rs0 /var/log/mongodb/shard2/rs0 /var/log/mongodb/shard3/rs0 # 启动三个配置服务器 mongod -f /home/mongodb/conf/config.conf ``` 3.在三台服务器上启动三个路由器。 ```shell mongos --configdb configserver1:27019,configserver2:27019,configserver3:27019 ``` 4.在三台服务器上启动三个分片服务器。 ```shell # 启动分片服务器1 mongod --shardsvr --replSet rs0 --dbpath /data/mongodb/shard1/rs0 --logpath /var/log/mongodb/shard1/rs0.log --port 27017 # 启动分片服务器2 mongod --shardsvr --replSet rs0 --dbpath /data/mongodb/shard2/rs0 --logpath /var/log/mongodb/shard2/rs0.log --port 27018 # 启动分片服务器3 mongod --shardsvr --replSet rs0 --dbpath /data/mongodb/shard3/rs0 --logpath /var/log/mongodb/shard3/rs0.log --port 27019 ``` 5.在其中一个分片服务器上初始化副本集。 ```shell mongo --port 27017 rs.initiate() ``` 6.将其他两个分片服务器加入到副本集中。 ```shell rs.add("shard2:27018") rs.add("shard3:27019") ``` 7.将三个分片服务器添加到路由器中。 ```shell mongos> sh.addShard("rs0/shard1:27017,shard2:27018,shard3:27019") ``` 至此,MongoDB分布式集群搭建完成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值