linux集群上配置Ganglia监控系统并监控solrWord格式.docx
《linux集群上配置Ganglia监控系统并监控solrWord格式.docx》由会员分享,可在线阅读,更多相关《linux集群上配置Ganglia监控系统并监控solrWord格式.docx(16页珍藏版)》请在冰豆网上搜索。
∙gmond是一个守护进程,他运行在每一个需要监测的节点上,收集监测统计,发送和接受在同一个组播或单播通道上的统计信息。
∙gmetad也是一个守护进程,他定期检查gmonds,从那里拉取数据,并将他们的指标存储在RRD存储引擎中。
它可以查询多个集群并聚合指标。
RRD也被用于生成用户界面的web前端。
∙ganglia-web顾名思义,他应该安装在有gmetad运行的机器上,以便读取RRD文件。
一般来说一个集群的每台机器上都需要安装gmond,只要负责展示web界面的机器安装了gmetad即可。
Ganglia采用InternetIPv4类D地址中的的组播进行数据请求。
主要是为了实现一对多节省带宽的需要。
其实现原理为gmetad发送一个请求到一个组播地址,由于是组播地址,所以gmetad只需发送一次请求包即可完成对所有gmond的轮询。
(如果是单播,则Ganglia需要向每台服务器均发送一次轮询请求,这样的话,集群数量多了,主服务器光发送就会占用不小的带宽。
而Ganglia本身是为大规模集群所做的HPC而生的,如果占用很高的带宽和占用很大量的CPU资源去处理网络数据就不符合其设计理念了。
)然后gmond通过这个请求将采集到的数据返回给gmetad,gmetad将数据保存在rrd数据库中,然后通过web界面绘图展示。
三、安装Ganglia
在服务器端:
#安装基础的开发包
直接在linux中使用下面命令下载,会有几部提示,都按:
y全部下载即可
yuminstall–ywgetapr-develapr-utilcheck-develcairo-develpango-devellibxml2-develrpmbuildglib2-develdbus-develfreetype-develfontconfig-develgcc-c++expat-develpython-devellibXrender-develrrdtool*
#安装jmxtrans
执行完之后,再以此执行以下的与语句,在上面安装执行完毕之后,执行以下的几个命令:
rpm-ivh
#安装绘图工具:
rrdtool
它用于数据存储和可视化
yuminstallrrdtool
#安装相应的ganglia
yuminstallganglia*
执行这个命令的时候也会有几个提示,Isthisok[y/N]:
都按:
至此,相应的Ganglia以及其需要的支撑软件全部安装完毕。
在客户端:
除了不需要安装rrdtool这个之外,其他的都需要进行安装,由于部署的是监控solr以及集群cpu、memory、tcp等基础信息,所以不仅需要启动gmond服务,还需要启动jmxtrans的服务。
因为在jmxtrans的路径下增加了solr.json配置文件(针对solr监控的配置信息)。
四、配置相应的文件
●配置gmetad.conf文件(ganglia服务端配置文件)
vim/etc/ganglia/gmetad.conf
增加data_source“solrcluster”127.0.0.1
如果是集群环境配置,那么需要这样配置:
data_source"
solrcluster"
localhostclnode1clnode2
其中localhost可以为:
127.0.0.1,也可以是你本服务器实际的地址即:
10.38.11.102,后面的clnode1,clnode2为集群内的节点(注意:
在主服务器上配置多个节点,使用这台服务器去监控集群中的所有节点的信息,我本地服务器默认是102,来监控102、103、104这三台服务器的信息)那么此时的clnode1和clnode2即需要在10.38.11.103和104上的gmnod.conf中的cluster的name里配置。
如下图所示的配置。
之后重新启动gmetad.conf和gmode.conf这两个服务即可。
solrtest1solrtest2solrtest4
注意:
如果集群节点名字发生了改变,你需要修改集群节点管理器上的/etc/gmetad.conf文件,重启所有节点上的gmond,然后重启集群节点管理器上的gmetad以使改变生效。
data_source中的每个节点都应该向Ganglia提供相同的信息进行监视,因为Ganglia使用对称模式(多播)通讯,其中一个节点失效意味着Ganglia可以继续连接到下一个节点,因为这个原因,每个data_source条目中不一定要指定集群中的每个主机。
●配置gmond.conf文件(ganglia客户端配置文件)
vim/etc/ganglia/gmond.conf
修改cluster中的name,其中name可以是随意的,如下图:
这块配置的名称就会在首页面的节点信息显示出来,标示对应的服务器的节点名称。
切忌,这里需要注意一点,我这里有3台服务器,那么对应的name值在3台服务器上需要都要一致,因为所有name相同的节点将认为在同一个集群里,那么需要在配置/etc/ganglia/gmetad.conf文件的时候,对应的名称也需要和这个name名称一致。
【在问题总结处,有对应的各个块的详细解释】
●修改ganglia.conf文件(ganglia服务配置文件)
vim/etc/httpd/conf.d/ganglia.conf
将Denyfromall修改为Allowfromall
●增加solr.json文件(针对监控内容配置文件)
配置jmxtrans对应的监控solr的json文件,即在/var/lib/jmxtrans文件夹下创建一个solr.json文件,在其中里面新增内容如下:
(加红色的地方需要修改,其中alias在每台服务器上都是用solrtest1,这只不过是一个别名,标志着这台服务器下的服务信息。
但是必须要保证下面标红色的所有alias都要一致才可以)
{
"
servers"
:
[
host"
"
10.38.11.102"
alias"
solrtest1"
port"
3000"
queries"
obj"
java.lang:
type=Memory"
resultAlias"
:
solrtest1.heap"
attr"
["
HeapMemoryUsage"
"
NonHeapMemoryUsage"
],
outputWriters"
{
@class"
com.googlecode.jmxtrans.model.output.GangliaWriter"
settings"
groupName"
Solr-JVM"
239.2.11.71"
8649"
}
}]
},
name=CMSOldGen,type=MemoryPool"
solrtest1.cmsoldgen"
Usage"
type=GarbageCollector,name=*"
solrtest1.gc"
CollectionCount"
CollectionTime"
],
type=Threading"
solrtest1.threads"
DaemonThreadCount"
PeakThreadCount"
ThreadCount"
TotalStartedThreadCount"
solr/collection1:
type=queryResultCache,id=org.apache.solr.search.LRUCache"
solrtest1.queryCache"
warmupTime"
"
size"
lookups"
evictions"
hits"
hitratio"
inserts"
cumulative_lookups"
cumulative_hits"
cumulative_hitratio"
cumulative_inserts"
cumulative_evictions"
type=searcher,id=org.apache.solr.search.SolrIndexSearcher"
solrtest1.searcher"
maxDoc"
numDocs"
}
其中239.2.11.71:
8649是ganglia默认的多点传输通道
五、启动顺序
主服务启动:
//启动apache服务
/etc/init.d/httpdstart(启动这个的时候可能会报出问题,请查看下面的问题总结)
//启动ganglia服务端服务也即绘图服务
/etc/init.d/gmetadstart
//启动ganglia客户端服务也即数据收集服务
/etc/init.d/gmondstart
//jmx的启动
/etc/init.d/jmxtransstart
启动solr的时候,需要加上一些有关solr配置的参数。
可以在相应的配置文件中将该参数加入启动参数,例如我本机的是在:
/etc/default/jetty中加入的,如下图所示:
增加的启动参入如下:
-Djava.rmi.server.hostname=10.38.11.102-Dcom.sun.management.jmxremote-Dcom.sun.management.jmxremote.port=3000-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.authenticate=false
//solr的启动
/etc/init.d/jettystart
集群客户端的启动:
/etc/init.d/jettystart(当然在启动solr服务的时候,也是需要将相应的启动参数配置到相应的配置文件中)
每个服务器上都要按照此顺序进行启动,启动之后在浏览器上输入http:
//10.38.11.102/ganglia就可以看到如下图所示的效果了:
下方的3个服务器监控都会显示出来,可以点进去具体的一个查看详情等信息。
六、问题总结
1.启动jmxtrans的时候,会报出无法检测到对应的服务器home内容,即无法连接
这是因为jmxtrans启动的时候会从hosts文件中寻找对应hostname值的ip地址,此时如果寻找不到,那么需要我们在hosts中增加上对应hostname对应的本地ip地址,例如我增加如下:
(注意:
根据具体提示信息来进行配置)
127.0.0.1
2.在/etc/ganglia/gmod.conf文件中,各个段对应的内容意思如下:
globals段:
gmond的全局配置,一般不需要修改
cluster段:
这一段是重要的一段,至少需要定义name变量,所有name相同的节点将认为在同一个集群里,其他变量是对该集群的说明。
host段:
只有一个变量,location,是对这个节点的一些说明
udp_send_channel段:
这也是很重要的一段,可以定义多个这样的段,不过如果在通一局域网内,只有一个集群的环境下,这一段保持默认也可以工作的很好。
ganglia默认采用多播发送监控数据,mcast_join变量指定多播组。
但是,并非所有环境都适合多播,例如,我的环境就不适合多播,幸运的是,ganglia也支持单播的方式,host变量指定一台gmond服务器接受监控数据。
值得注意的是,mcast_join和host不能同时出现在一个channel里。
port指定端口号,ttl指定跳数一般为1,如果需要经过gmond中转,需要修改这个跳数。
udp_recv_channel段:
对应于udp_send_channel段,也可以设置多个。
如果采用单播的方式,需要注意bind变量指出的ip,你的所有其他gmond可以访问到,事实上,可以使用0.0.0.0
tcp_accept_channel段:
指定一个端口,可以通过TCP的的方式,从这个端口读取XML格式的监控数据
modules段和collection_group段:
这两段会在下一篇讲扩展gmond的文章中介绍
七、集群的分组部署
默认配置下,Ganglia会把所有东西放在一个Grid里面,也就是一个网格。
大的集群,不分组。
但是真实的服务器集群有各种功能,每个群分管不同的事务,全放一起就太乱了。
也不好识别,所以需要分组使用。
其实Ganglia的分组很简单,就是分端口,不同的组配置不同的监听端口就完事了。
我的gmetad.conf是这样配置的。
gmetad
Namenode"
192.168.1.28:
8653
Datanode"
192.168.1.27:
8649
Portal"
192.168.1.43:
8650
Collector"
192.168.1.35:
8651
DB"
192.168.1.51:
8652
gridname"
Hadoop"
rrd_rootdir"
/opt/modules/ganglia/html/rrds"
#配置rrd数据保存文件的路径,给web界面用的,这个是固定的,最好放在web文件夹下,并赋予正确的权限
case_sensitive_hostnames0
数据来源有5个,这5个分别是每个组的组长,相当于一道杠。
但是组长是不需要配置gmetad的,除非你要做多级组播收集数据。
每个组长只需要分配不同的端口号就可以了。
你可能会问,IP不一样,端口一样不行吗?
不行,因为这个IP是单播IP,相当于一个路由指向,而Ganglia实际的数据传输是在多播IP上进行的,而多播IP只有一个。
在客户端配置,如果你需要多级gmetad,可以配多个多播IP。
客户端配置就比较复杂一些了。
我只贴上需要修改的部分,其他都是默认就可以了
gmond
cluster{
name="
#对应gmetad中的Portal,名称一定要写对。
owner="
unspecified"
latlong="
url="
/*Feelfreetospecifyasmanyudp_send_channelsasyoulike.
Gmond
usedtoonlysupporthavingasinglechannel*/
udp_send_channel{
#bind_hostname=yes#Highlyrecommended,soontobedefault.
#Thisoptiontellsgmondtouseasourceaddress
#thatresolvestothemachine'
shostname.
Without
#this,themetricsmayappeartocomefromany
#interfaceandtheDNSnamesassociatedwith
#thoseIPswillbeusedtocreatetheRRDs.
mcast_join=239.2.11.71
port=8650
#gmetad中的Portal所分配的端口号。
ttl=1
/*Youcanspecifyasmanyudp_recv_channelsasyoulikeaswell.*/
udp_recv_channel{
bind=239.2.11.71
/*Youcanspecifyasmanytcp_accept_channelsasyouliketoshare
anxmldescriptionofthestateofthecluster*/
tcp_accept_channel{
红色部分就是Portal小组的端口,从gmetad.conf中可以看到,Portal小组属于8650端口,那么相应的在gmond中,也要将udp和tcp端口写为8650。
如果是另外一个组的,就写上在gmetad中配置的那个端口。
当然,你可以把这个端口号想像为小组的代号。
可能更好理解一些。
再加上另外一个组的成员gmond就更容易理解了
/*Thehostsectiondescribesattributesofthehost,likethelocation*/
host{
location="
#Thisoptiontellsgmondtouse