分享

[求助]hadoop ha 主备节点切换时实现邮件通知

ltz 发表于 2015-8-31 14:28:04 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 2 12439
本帖最后由 ltz 于 2015-8-31 14:38 编辑

我在hdfs-site.xml 中设置dfs.ha.fencing.methods的值如下所示:<property>     
     <!-- sshfence,shell -->     
    <name>dfs.ha.fencing.methods</name>     
    <value>shell(/usr/local/testsh/hashell.sh)</value>
</property>
问题出现,重启 主节点 namenode后,当前服务节点状态可以由active切换到standby,但并未执行/usr/local/testsh/hashell.sh中的内容,请帮忙分析下原因,谢谢!
hashell.sh
[mw_shl_code=python,true]#!/bin/bash
`python notify_email.py`
/bin/true[/mw_shl_code]


notify_email.py 如下:
[mw_shl_code=python,true]#!/usr/bin/env python
#coding: utf-8


from email.MIMEMultipart import MIMEMultipart
from email.MIMEText      import MIMEText
from email.MIMEImage     import MIMEImage
from email.header        import Header
import sys
import smtplib
import socket

smtp_user ='liu.tz@qq.com'
strFrom = 'liu.tz@qq.com'


strTo = ['ll@163.com','liu.tz@qq.com']

smtp_server='smtp.exmail.qq.com'
smtp_pass='1234'

cur_hostname = socket.getfqdn(socket.gethostname())
cur_hostaddr = socket.gethostbyname(cur_hostname)

mail_title='[info]Hadoop HA Warning '
mail_body_plain='Hadoop HA has a change,please check !'
mail_body_html='<b><font color=red>'+'Warning!\n['+cur_hostname+':'+cur_hostaddr+'] \t namenode change! </font></b>'


msgRoot = MIMEMultipart('related')
msgRoot['Subject'] =Header(mail_title,'utf-8')
msgRoot['From'] = strFrom
#msgRoot['To'] = strTo
msgRoot['To'] = ",".join(strTo)

msgAlternative = MIMEMultipart('alternative')
msgRoot.attach(msgAlternative)

msgText = MIMEText(mail_body_plain, 'plain', 'utf-8')
msgAlternative.attach(msgText)



msgText = MIMEText(mail_body_html, 'html','utf-8')
msgAlternative.attach(msgText)


smtp = smtplib.SMTP()
smtp.connect(smtp_server)
smtp.login(smtp_user,smtp_pass)
smtp.sendmail(strFrom, strTo, msgRoot.as_string())
smtp.quit()[/mw_shl_code]


已有(2)人评论

跳转到指定楼层
xuanxufeng 发表于 2015-8-31 15:19:19

参考
dfs.ha.fencing.methods将用于停止活动NameNode节点的故障转移期间的脚本或Java类的列表
任何时候只有一个namenode处于活动状态,对于HA集群的操作是至关重要的,因此,在故障转移期间,在启动备份节点前,我们首先要确保活动节点处于等待状态,或者进程被中止,为了达到这个目的,您至少要配置一个强行中止的方法,或者回车分隔的列表,这是为了一个一个的尝试中止,直到其中一个返回成功,表明活动节点已停止。hadoop提供了两个方法:shell和sshfence,要实现您自己的方法,请看org.apache.hadoop.ha.NodeFencer类。
sshfence 通过ssh连接活动namenode节点,杀掉进程
为了实现SSH登录杀掉进程,还需要配置免密码登录的SSH密匙信息,如下所示:
<property>
<name>dfs.ha.fencing.methods</name>
  <value>sshfence</value>
</property>



回复

使用道具 举报

xuanxufeng 发表于 2015-8-31 15:18:31

楼主这个有点牵强。
就如同一个人缺了一块肉,我们不能随便找块肉往里面填就可以了。

sshfence这是hadoop自定义的方法。所以楼主如果想执行自己的方法,需要阅读源码,并且该源码,然后打包,按照自己定义的hadoop.
在配置里定义脚本,程序根本不认识的。所以也不会执行。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条