标签归档:HDFS

ELK kibana 安装和插件管理(9th)

kibana 本质上是elasticsearch web客户端,是一个分析和可视化elasticsearch平台,可通过kibana搜索、查看和与存储在elasticsearch的索引进行交互。可以很方便的执行先进的数据分析和可视化多种格式的数据,如图表、表格、地图等。

Discover页面: 交互式的浏览数据。可以访问所匹配的索引模式的每个索引的每个文档。可以提交搜索查询,过滤搜索结果和查看文档数据。还可以搜索查询匹配的文档数据和字段值的统计数据。还可以选定时间以及刷新频率。

Elasticsearch

Visualize页面:设计数据可视化。可以保存这些可视化,单独或合并成仪表盘。可视化可以基于以下数据源类型1.一个新的交互式搜索 2. 一个保存的搜索 3. 现有的可视化。

Elasticsearch

Dashboard页面:自由排列已保存的可视化,保存这个仪表盘并可以分享或者重载。

Elasticsearch

settings页面:要使用kibana,得先告诉kibana要搜索的elasticsearch索引是哪些,可以配置一个或更多索引。

安装配置

kibana安装依然很简单。需要注意的是,kibana版本要与elasticsearch版本匹配。版本兼容参见之前文章。

我这里安装的是kibana-4.2.1版本。

可以直接访问http://10.1.19.18:5601。kibana没有权限控制,我这里是通过nginx反代的。配置如下:

密码自己设置。

kibana插件管理

kibana的附加功能是通过插件模块来实现的。可以通过bin/kibana plugin命令来管理插件。

插件安装:

插件删除:

安装sense插件

Elasticsearch

sense是啥玩意下篇再说了咯。

有关kibana更多内容,请参考:https://www.elastic.co/guide/en/kibana/4.2/index.html

大规模web架构gearman分布式处理应用案例

一. 场景分析
业务服务压力比较大,想把一些占用资源的功能异步到远程处理,比如记录业务日志,文件加密,文件分发到其他文件服务器节点上,检查文件服务器是否已同步,对用户上传的图片进行剪裁生成多份缩略图,视频转换,静态内容生成,清除缓存等等,这些请求耗时长,占用系统资源大,影响业务正常访问。这些问题会经常遇到的,如果这些任务都在用户请求过程中完成,服务器撑不撑得住暂不考虑,单凭用户体验角度考虑来说,那是难以忍受的。

二. 解决之道
对于这种需求,我们可以通过分布式计算,对任务进行拆分,转移到多台服务器上进行异步或同步处理。分布式消息队列有多种实现方式如rabbitmqgearman等。 在这里主要说gearman—分布式处理系统。gearman由三部分组成:Job server,worker server,client server。 任务服务器job server运行这gearmand进程,来负责处理应用的远程调用请求,并且维护计算任务;工作服务器worker server负责向job server注册函数等待领取任务并执行实际的计算,然后将结果返回给job server;客户端client server提供gearman client API给应用程序调用,API支持多种语言如C、phpperlpython、mysql udf、java、ruby、go等等,主要是向job server添加任务,
流程图如下:

web架构
客户端client server向gearman添加任务时,有三种模式:
1. 同步顺序处理 相当于消息队列,先进先出。
2. 同步并行处理 这种模式会阻塞后面的运行,将互不依赖的任务并行处理,大大缩短整体处理时间。
3. 异步后台处理 将耗时任务交给后台处理,不阻塞当前进程。

本站点ttlsa.com关于gearman介绍以及应用 参见:http://www.ttlsa.com/?s=gearman
关于PHP实现异步操作的研究 参见:http://www.ttlsa.com/html/1720.html
gearman安装 参见:http://www.ttlsa.com/html/663.html

三. 应用实例
需要安装的模块有Mail::SendEasy、Gearman::Worker、Gearman::Client、JSON。

或通过cpanm来安装,参见:http://www.ttlsa.com/html/2030.html
在使用异步处理之前,当我们要发送邮件时,会直接这么写,代码如下:

这存在一个问题, 会长期阻塞在send函数,而无限制等待下去, 直到超时,很可能会拖垮服务器的。我们可以使用gearman,来改变这种发送邮件的方式。第一步,创建一个worker实例SENDMAIL,并向job server注册,等待接收任务并执行发送邮件的操作。第二步,客户端只需要将发送邮件的任务丢给job server便退出,没你什么事了。上代码:
# vim work_SENDMAIL.pl

# vim gearman_client.pl

完成上面的改造不要认为解决了发送邮件会长期阻塞在send函数,而无限制等待下去的问题了。这其实只是解决了一部分,还有一个问题需要考虑进去,既然采用了异步方式,那么应用程序是不知道邮件是否发送成功的,因此需要记录任务执行的结果,可以将结果写入数据库,定期的对发送失败的邮件进行再次发送,或写个异常处理的worker,捕获发送邮件异常,进行多次尝试发送。

这种方案是我在捕获数据库备份过程中失败时,发邮件报警的应用。mongodb备份与恢复(下)  http://www.ttlsa.com/html/2052.html中提供的备份脚本就有应用到,只是删掉了该功能,哈,网友们自己去实现咯。

通过这样的异步任务处理,可以很好的解决前面场景提到的问题,完全取决于如何应用gearman了。如有更好的应用可以相互交流。

如需转载请注明出处:http://www.ttlsa.com/html/2839.html

关于Flume-ng那些事(一)

前言

落群好久,一直潜水,实在抹不开了,为ttlsa做点贡献。这个群是我见到所有技术群里扯淡最少的群。支持下,谢谢群主默北和管理员白开水为我们开辟一块学习的净土。希望ttlsa走的更远,各位同学在技术更上一层楼。我们的口号是有困难找群主!!! :),文章是去年2012年写的,现整理如下:

介绍
Flume-ng  在官方网站上说的重大结构性调整,以至于调整的连相应文档也都精简了,缺少实例配置,也许这就所谓的官方声称的孵化阶段。Apache Flume 是一个分布的,高可靠和高可用的日志收集系统。能将从不同节点将大量日志数据进行汇总并迁移到中央存储。现在flume分为两个版本1.x.x 和0.9.x。

Flume 1.x.x一些特性

  • sources和sinks 使用channels 进行链接
  • 两个主要channel 。1,  in-memory channel  非持久性支持,速度快。2 , JDBC-based channel 持久性支持。
  • 不再区分逻辑和物理node,所有物理节点统称为 “agents”,每个agents 都能运行0个或多个sources 和sinks
  • 不再需要master节点和对zookeeper的依赖,配置文件简单化。
  • 插件化,一部分面对用户,工具或系统开发人员。
  • 使用Thrift、Avro Flume sources 可以从flume0.9.4 发送 events  到flume 1.x

让我们开始我们的Flume-ng 之旅吧

安装依赖关系

[info]Note: The Flume 1.x flume-ng-agent package directly depends only on flume-ng package. Theflume-ng package directly depends only on hadoop-hdfs and bigtop-utils packages. Theflume-ng-doc package has no direct package dependencies.[/info]

需要装好多包 –  -!

使用cloudera tar.gz 包

让我们更改flume-env.sh添加JAVA_HOME

一些概念

组件 功能
Agent 使用JVM 运行Flume。每台机器运行一个agent,但是可以在一个agent中包含多个sources和sinks。
Client 生产数据,运行在一个独立的线程。
Source 从Client收集数据,传递给Channel。
Sink 从Channel收集数据,运行在一个独立线程。
Channel 连接 sources 和 sinks ,这个有点像一个队列。
 Events  可以是日志记录、 avro 对象等。

转载请注明出处:http://www.ttlsa.com/html/2754.html

MogileFS的使用 – 浅谈分布式文件系统MogileFS(3)

MogileFS的使用

文件下载

文件是存在与domain里的,在下载的时候要指定domain参数

文件上传

文件具备class属性,所以在上传的时候要指定class参数,和domain参数

文件查看

存储设备查看

节点设备查看

domain查看

 class查看

所有的请求都是发送到tracker节点。

Inner MogileFS

Key-file

MogileFS不维护原来的文件名,所谓的file是storage node收到的bit流。在MogileFS内部以在domain中可见的key来标记文件。

文件存放

MogileFS对每个文件分配fid,文件以.fid为后缀存放,系统维护fid到path的映射关系。fid按照(\d)(\d{3})(\d{3})(\d{3})分割成四部分后,文件放置于目录/devid/$1/$2/$3下,对于是哪个devid则由master提供给客户端决定。

文件冗余

通过class的dvcont属性来保证文件在系统内的冗余

look into MogileFS

既然MogileFS是用Perl写成的,我们就来看看程序相关的源代码吧

Mogdbsetup

本程序在安装database节点时初始化meta database

程序代码分析

调用模块

Mogdbsetup程序调用了MogileFS::Store中的setup_database subroutine初始化了数据库,通过SCHEMA_VERSION来判断当前操作是在安装还是升级中。

MogileFSd

Tracker节点进程,完成整个cluster的任务分派

程序代码分析

调用模块

程序简单了调用了MogileFS::Server中的run subroutine。

整个MogileFS是一个event-based的cluster。

Mogstored

Storage node节点进程,负责文件的真实操作

程序代码分析

调用模块

 

请看下一篇:浅谈分布式文件系统MogileFS(4)

Zookeeper分布式集群部署

部 署完成Hadoop/Hbase集群之后,开始测试Sleuthkit,结果发现tpkickoff.sh运行时不断提醒zookeeper的连接错 误:Session 0x0 for server。网上大部分的资料说问题出在DNS的解析上,需要去修改/etc/hosts文件,但是之前部署分布式的时候这个文件就已经设置好了,所以 问题应该不是在这里。于是考虑这个奇怪的问题会不会是因为启动Hbase自带zookeeper的问题呢?虽然对内部的原理并不太清楚,但是还是决定先安 装一个独立的zookeeper来试一试。先说下自己的平台:
——hadoop-1.1.2
——hbase-0.90.0
——zookeeper-3.4.5
——jdk-1.6
好了,现在开始zookeeper-3.4.5的安装吧!


一、官方网站下载zookeeper-3.4.5:http://www.apache.org/dyn/closer.cgi/zookeeper/
二、将下载得到的zookeeper-3.4.5.tar.gz放到指定的目录中,自己统一放在了/home/hadoop/platform/下,tar解压缩即可
三、设置环境变量:
为了方便运行zkServer.sh脚本,我们将zookeeper的bin路径加入到/etc/profile中,作为一个全局变量进行输出到PATH中,记得修改完成之后运行source /etc/profile使修改生效
ZOOKEEPER_HOME=/home/hadoop/platform/zookeeper-3.4.5
export ZOOKEEPER_HOME
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf
然后利用scp命令将修改复制到各个节点
hadoop
hadoop
四、建立zookeeper配置文件(可以先在一个节点上配置,后期直接复制到其他节点即可)
进入到zookeeper的conf/中,将zoo_sample.cfg拷贝成zoo.cfg:

端口2181,设置dataDir为一个指定目录存放zookeeper的协调数据,最后添加集群中的节点。接下来需要根据server.X的号码在相应 的节点上的dataDir下建立myid文件,输入自身的“X”作为内容即可,比如master节点上的myid只输入1即可。
五、复制zookeeper-3.4.5到其他各节点
这里使用scp -r zookeeper-3.4.5/ hadoop@node1:实现,注意每个节点的dataDir下的myid文件要修改成自身的Server-X号码
六、运行zkServer.sh
在所有节点上分别运行zkServer.sh start命令:
hadoop
这里需要注意第一个节点启动zookeeper时由于集群的其他节点未启动zookeeper,因此使用zkServer.sh status命令查看当前状态时会提示错误,如上图白色区域;但是随着后续节点的zookeeper的陆续启动,使用status查看状态时会显示当前节 点的状态,本次master作为了leader。
配置好重新运行tpkickoff.sh,终于没有像之前报zookeeper的错误了:
hadoop

关于Flume-ng那些事(四)

最后一章了,flume-ng的手册总是慢半拍,一些实例可以参考下手册总的图,会很有收获。http://flume.apache.org/FlumeUserGuide.html  还是1.4版本,有些参数已经发生变化,注意更改。

贴个上hadoop hdfs的例子,Flume-ng write events to HDFS example:

update flume-ng  1.3 example:

agent config

#List sources, sinks and channels in the agent
weblog-agent.sources = tail
weblog-agent.sources.tail.interceptors = ts host
weblog-agent.sources.tail.interceptors.ts.type = org.apache.flume.interceptor.TimestampInterceptor$Builder
weblog-agent.sources.tail.interceptors.host.type = org.apache.flume.interceptor.HostInterceptor$Builder
weblog-agent.sources.tail.interceptors.host.useIP = false
weblog-agent.sources.tail.interceptors.host.preserveExisting = true
weblog-agent.sinks = avro-forward-sink01
weblog-agent.channels = jdbc-channel01
#define the flow
#webblog-agent sources config
weblog-agent.sources.tail.channels = jdbc-channel01
weblog-agent.sources.tail.type = exec
weblog-agent.sources.tail.restart = true
#weblog-agent.sources.tail. = true
weblog-agent.sources.tail.command = tail -f /opt/nginx/logs/access.log
#weblog-agent.sources.tail.selector.type = replicating
#avro sink properties
weblog-agent.sinks.avro-forward-sink01.channel = jdbc-channel01
weblog-agent.sinks.avro-forward-sink01.type = hdfs
weblog-agent.sinks.avro-forward-sink01.hdfs.path = hdfs://ttlsa-hadoop-master.:9000/user/flume/webtest/%{host}/%Y-%m-%d/
weblog-agent.sinks.avro-forward-sink01.hdfs.filePrefix = nginx
weblog-agent.sinks.avro-forward-sink01.hdfs.kerberosPrincipal = flume@HADOOP.TTLSA.COM
weblog-agent.sinks.avro-forward-sink01.hdfs.kerberosKeytab = /var/run/flume-ng/flume.keytab
weblog-agent.sinks.avro-forward-sink01.hdfs.rollInterval = 120
weblog-agent.sinks.avro-forward-sink01.hdfs.rollSize = 0
weblog-agent.sinks.avro-forward-sink01.hdfs.rollCount = 0
weblog-agent.sinks.avro-forward-sink01.hdfs.fileType = DataStream
#channels config
weblog-agent.channels.jdbc-channel01.type = memory

关于Flume-ng那些事(二)

继续我们的测试。

编辑flume.conf配置文件

一个agnet的完整配置文件需要如下内容:

a,Sources, sources type
b,Sinks ,sinks type
c,Channel ,Channel type
d,使用Channel 来串接Sources和Sinks

我们根据上述的flume.conf 文件来做下解释,该配置文件其实应该调整下顺序。
先定义下sources、slinks、channels。flume-ng agent名字为agent1,该名字和后续启动agent程序-n 后的名称要保持一致。
agent1.channels = ch1      #channels 名称 ch1
agent1.sources = avro-source1  #sources 名称 avro-source1  名字能望文生义,不错:)
agent1.sinks = log-sinke1 # sinks 名称为 log-sink1

—————————我是分割线—————————
sources 部分定义
agent1.sources.avro-source1.channels = ch1 #agent名称.sources.sources名称.使用的channels
agent1.sources.avro-source1.type = avro    #同上最后一个点.type 类型 avro
agent1.sources.avro-source1.bind = 0.0.0.0 #最后一个点.bind 绑定地址
agent1.sources.avro-source1.port = 41414 #最后一个点.port 指定端口
—————————我是分割线—————————
channel 部分定义:
agent1.channels.ch1.type = memory #agent名称.channels.channels名称.使用的类型
—————————我是分割线—————————
agent1.sinks.log-sink1.channel = ch1  # agent名称.sinks.sinks名称.从哪个channel收集events
agent1.sinks.log-sink1.type = logger #最后一个点.type  sinks类型。

——————————————————————————————

开始我们的测试:
首先开启客户端:

#注意名字agent1要和配置文件定义的一致。

开启avro-client客户端读取/etc/passwors 文件:

#启动avro-client 读取/etc/passwd 后进程退出。

验证下我们的测试情况,查看flume.log  详见附件flume_log01.txt

manage MogileFS – 浅谈分布式文件系统MogileFS(4)

1. 系统的启动与停止

 启动tracker

 启动storage node

 停止tracker

 停止storage node

2. 查看系统状态

#mogadm check

dfs

mogilefs-04

【系统内流量分布】

系统内存在三种流量

 Tcp7001 on tracke #Client客户端发送给tracker请求流量
 Tcp3306 on mysql #tracker与meta database的流量
 Tcp7500 on storage node #Client与storage node数据流量
 Tcp7501

安装配置 – 浅谈分布式文件系统MogileFS(2)

MogileFS的架构

MogileFS的架构如下

dfs

mogilefs-02

在一个MogileFS集群里,存在三种角色的节点

  • Tracker node
  1. 任务分发调度
  • Meta Database node
  1.  存储集群的元信息
  2. Host信息
  3. Device信息
  4. Domain信息
  5. Class信息
  6. Key信息
  7. File信息
  • Storage node
  1. 文件存储

 

MogileFS两种程序

  • MogileFSd        #负责实现tracker角色功能
  • Mogstored        #负责实现storage node角色功能

在MogileFS中file被定义为上传到storage node的一系列bits,在系统内以domain内唯一的key来标识。一个file属于一个class,class为一组属性值。

MogileFS的安装

服务器环境

ip hostname
10.1.192.63 cluster-database
10.1.192.58 cluster-master01
10.1.192.59 cluster-master02
10.1.192.60 cluster-segment01
10.1.192.61 cluster-segment02
10.1.192.62 cluster-segment03

 

此五台服务器是vmware vSphere上的五台虚拟机,虚拟机挂在一个新增vmware network2端口下,服务器之间通过vmware switch连接,端口速率为10000Mbps;

dfs
mogilefs-03

 

由于模块间的依赖关系并没有按照服务器角色区分严格,建议在所有的服务器下安装如下模块:

  • MogileFS-Utils-2.28.tar.gz
  • MogileFS-Server-2.70.tar.gz
  • MogileFS-Client-1.17.tar.gz

 

MogileFS的安装过程

在cluster-database上初始化数据库

建立用户与database

初始化数据库

 配置tracker节点

 

配置storage node节点

 

在storage node节点建立device目录

增加host与device

启动tracker

增加host与device

请看下一篇:MogileFS使用 – 浅谈分布式文件系统MogileFS(3)

Logstash 日志管理工具

Logstash是一个开源的日志管理工具。

ELK 部署,参见本博客内容《ELK部署》,以及elasticsearch相关文章。

ELK系列文章:http://www.ttlsa.com/elk/

项目地址:http://logstash.net/

Logstash安装使用以下组件:

服务端:

  • fqdn: dev.kanbier.lan (should be resolvable!)
  • ip: 10.37.129.8

安装所需的软件

作者更喜欢使用RPM包来安装软件,要注意版本号,不要去追求时髦用最新的最伟大的,Elasticsearch的版本应该匹配Logstash的版本。

启用Kibana

我们需要告诉Kibana在哪里可以找到elasticsearch。打开配置文件并修改elasticsearch参数:

搜索“elasticsearch”参数,并对其进行修改以适应您的环境:

您还可以修改default_route参数,默认打开logstash仪表板而不是Kibana欢迎页面:

通过web界面访问:

nginx配置如下:

配置redis

配置Logstash 

可以使用Logstash文档上的logstash-complex.conf文件,并不是很负责,包含:

  • 从 /var/log目录读取文件
  • 打开5544端口以启用直接接收远程系统日志消息
  • 告诉logstash,利用本身的elasticsearch而不是嵌入的

启动服务

对于rsyslog现在你可以将这些行添加到/ etc/ rsyslog.conf

如果有防火墙需要放开这些端口:

  • port 80 (for the web interface)
  • port 5544 (to receive remote syslog messages)
  • port 6379 (for the redis broker)
  • port 9200 (so the web interface can access elasticsearch)

Elasticsearch

译自:http://www.denniskanbier.nl/blog/logging/installing-logstash-on-rhel-and-centos-6/