分布式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配置。日志则会将不同级别的日志自动路由到各个分区。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不爱运动的跑者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值