Keepalived安装及配置实现虚拟IP与HDFS Active Namenode同步

来源:互联网 发布:哪些网络游戏有mac版 编辑:程序博客网 时间:2024/06/06 19:24

1.软件及安装环境

本文中所使用的环境为三台Centos服务器,操作系统版本为CentOS6.5

  HDFS版本为2.6.0,通过journal node实现高可用(HDFS journal node高可用配置可参见__HDFS三节点集群搭建(Journal Node)或自行百度)。

Keepalived 版本为1.2.6。

IP地址为211,212,214,其中211和212节点作为Namenode,211节点在hdfs中配置为hadoop01,212节点配置为hadoop02,214节点用于datanode。同时,需要在211和212节点部署Keepalived服务。

<property>        <name>dfs.nameservices</name>        <value>cluster1</value>    </property>    <property>        <name>dfs.ha.namenodes.cluster1</name>        <value>hadoop01,hadoop02</value>    </property>    <property>        <name>dfs.namenode.rpc-address.cluster1.hadoop01</name>        <value>192.168.6.211:9000</value>    </property>    <property>        <name>dfs.namenode.http-address.cluster1.hadoop01</name>        <value>192.168.6.211:50070</value>    </property>   <property>        <name>dfs.namenode.rpc-address.cluster1.hadoop02</name>        <value>192.168.6.212:9000</value>    </property>    <property>        <name>dfs.namenode.http-address.cluster1.hadoop02</name>        <value>192.168.6.212:50070</value>    </property>
如代码中所示,将211节点作为hadoop01节点,212节点作为hadoop02节点。

2.配置

2.1首先,配置hdfs,配置完成之后,可以在控制台通过jps指令查看,可以看到211和212运行的进程如下:

   

通过jps指令可以看到214运行的进程如下:

2.2集群中两个元数据节点需要安装Keepalived,在示例中,将Server211设置为主节点,Server212设置为从节点。

2.2.1 安装

(1)将安装程序keepalived-1.2.6.tar.gz放到/usr/local/src目录下

(2)解压缩此软件

tar -zxvf ./ keepalived-1.2.6.tar.gzcd ./keepalived-1.2.6

(3)执行安装指令

./configure --prefix=/usr/local/keepalivedmake make install

至此,安装过程完成。

(4) 安装问题记录

  • 问题一:遇到错误提示:configure: error: Popt libraries is required

解决方案:yum install popt-devel

然后重新./configure

  • 问题二:遇到错误提示:configure: error:

  !!! OpenSSL is not properly installed on your system. !!!

  !!! Can not include OpenSSL headers files.            !!!

解决方案:yum install openssl-devel

然后重新./configure

2.2.2 Keepalived初始配置使之实现对hdfs进程50070端口的监测

本部分内容为配置keepalived实现其对hdfs进程的50070端口进行监测,2.2.3部分将介绍如何配置keepalived使之实现虚拟IP与HDFS Active Namenode同步

(1) 修改配置文件路径

cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /retc/rc.d/init.d/cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/mkdir /etc/keepalivedcp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

  (2)修改主节点(Server211Keepalived配置文件信息,配置文件位于/etc/keepalived/ keepalived.conf目录,首先需要修改其检测脚本方法,如下:

vrrp_script chk_http_port {        script "</dev/tcp/192.168.6.211/50070"#此脚本向namenode节点发送tcp连接        interval 1#时间间隔为1        weight -10#权重为-10,即连接两次(次数可配置,即fall值)若失败,将此节点的keepalived权重减10        fall 2#连续两次失败则减权重        rise 1#对成功的检测只需一次即可}

然后修改配置文件总vrrp实例配置信息,如下:

vrrp_instance VI_1 {    state MASTER#设置此节点为主节点    interface eth1#当前ip正在使用的网卡    virtual_router_id 51    priority 200#设置的优先级,两节点的优先级必须不同    advert_int 1    authentication {        auth_type PASS        auth_pass 1111    }    virtual_ipaddress {        192.168.6.210#virtual ip address need to be set    }    track_script {        chk_http_port#需要执行的检测脚本,即上述检测211端口的那个脚本    }    notify_master /usr/local/keepalived/shell/toMaster.sh#当keepalived抢占到虚拟IP(成为主节点时),触发的脚本,这些根据自己需要配置即可    notify_backup /usr/local/keepalived/shell/toSlave.sh#当keepalived丢失虚拟IP(成为备节点时),触发的脚本,脚本所在位置也可变化    notify_fault  /usr/local/keepalived/shell/toFault.sh#出错时触发的脚本    notify_down /usr/local/keepalived/shell/toSlave.sh#停止keepalived时触发的脚本}

根据配置,可以看到将虚拟ip地址设置为192.168.6.210

3)修改从节点(Server212Keepalived配置文件信息,配置文件位于/etc/keepalived/ keepalived.conf目录,首先需要修改其检测脚本方法,如下:

vrrp_script chk_http_port {        script "</dev/tcp/192.168.6.212/50070"#注意,这里是212,与211的配置不同了        interval 1        weight -10        fall 2        rise 1}

然后修改配置文件总vrrp实例配置信息,如下:

vrrp_instance VI_1 {    state MASTER#注意,状态也是Master    interface eth1#network card being used now    virtual_router_id 51    priority 195#优先级比211低    advert_int 1    authentication {        auth_type PASS        auth_pass 1111    }    virtual_ipaddress {        192.168.6.210    }    track_script {        chk_http_port    }    notify_master /usr/local/keepalived/shell/toMaster.sh    notify_backup /usr/local/keepalived/shell/toSlave.sh    notify_fault  /usr/local/keepalived/shell/toFault.sh    notify_down /usr/local/keepalived/shell/toSlave.sh}

从节点的配置信息修改与主节点类似,参照修改即可;示例如下。

4)至此,配置完成,在两个节点上分别执行指令启动Keepalived服务:

service keepalived start

启动之后通过ip -a指令查看主节点是否已抢占到虚拟IP,若抢占成功,则说明配置成功。(注意:此验证步骤需等待hdfs集群启动之后进行启动集群后,再在两台机器上开启Keepalived服务,观察IP分配情况)

然后可通过指令关闭Keepalived服务。

service keepalived stop

2.2.3 Keepalived初始配置使之实现虚拟IP与HDFS Active Namenode同步

若需实现Keepalived的虚拟IP所在节点与AN同步,只需更改Keepalived的配置文件/etc/leepalived/keepalived.conf和所需的脚本文件即可,且仅需修改其监测脚本相关内容,修改如下:

(1)在211节点(hdfs中配置为hadoop01)上,新建监测Namenode服务状态的脚本文件,在示例环境中,脚本文件路径为 /etc/keepalived/chkHealth.sh,内容如下:

#!/bin/bash/home/root/hztest/hz-2.6.0-cdh5.4.1/bin/hdfs haadmin -getServiceState hadoop01 | grep active#其中,bin之前为示例环境hdfs安装位置if [ $? -gt  0 ]; then#此脚本监测该节点的NN是否处于Active    exit 1#若不处于,则返回代码1else#若处于,则返回代码0    exit 0fi
(2)修改211节点上的/etc/keepalived/keepalived.conf文件,

 !Configuration File for keepalivedglobal_defs {   notification_email {   }#   notification_email_from root@localhost#   smtp_server 127.0.0.1#   smtp_connect_timeout 30   router_id HA_NETDISK}vrrp_script chk_ha_service {        script "/etc/keepalived/chkActive.sh"#vrrp_script修改为调用chkActive.sh        interval 3        weight -10        fall 2        rise 1}vrrp_instance VI_1 {    state MASTER    interface eth1    virtual_router_id 51    priority 200    advert_int 1    authentication {        auth_type PASS        auth_pass 1111    }    virtual_ipaddress {        192.168.6.210    }    track_script {        chk_ha_service#调用chk_ha_service来监测节点状态    }}

(3)在212节点(hdfs中配置为hadoop02)上,新建监测Namenode服务状态的脚本文件,在示例环境中,脚本文件路径为 /etc/keepalived/chkHealth.sh,内容如下:

#!/bin/bash/home/root/hztest/hz-2.6.0-cdh5.4.1/bin/hdfs haadmin -getServiceState hadoop02| grep active#其中,bin之前为示例环境hdfs安装位置if [ $? -gt  0 ]; then#此脚本监测该节点的NN是否处于Active    exit 1#若不处于,则返回代码1else#若处于,则返回代码0    exit 0fi
(2)修改212节点上的/etc/keepalived/keepalived.conf文件,

 !Configuration File for keepalivedglobal_defs {   notification_email {   }#   notification_email_from root@localhost#   smtp_server 127.0.0.1#   smtp_connect_timeout 30   router_id HA_NETDISK}vrrp_script chk_ha_service {        script "/etc/keepalived/chkActive.sh"#vrrp_script修改为调用chkActive.sh        interval 3        weight -10        fall 2        rise 1}vrrp_instance VI_1 {    state MASTER    interface eth1    virtual_router_id 51    priority 195    advert_int 1    authentication {        auth_type PASS        auth_pass 1111    }    virtual_ipaddress {        192.168.6.210    }    track_script {        chk_ha_service#调用chk_ha_service来监测节点状态    }}
至此,配置完成。启动hdfs与keepalived进行验证即可。

3.踩过的坑及解决方案

踩到的坑主要为与 Keepalived相关的,都是Keepalived的虚拟ip所在节点未根据Active NN节点变化而变化,主要问题有两个:

3.1 keepalived配置格式错误

由于Keepalived配置若有错误,也不会有错误提示,所以修改配置文件时需特别小心。同时,注意{}与其花括号之前的字母之间需要有空格,如:

vrrp_script chk_ha_service {        script "/etc/keepalived/chkActive.sh"        interval 3        weight -10        fall 2        rise 1}

3.2 脚本需要添加可执行权限

Keepalived中所使用到的脚本必须要添加可执行权限,否则无法被执行。

原创粉丝点击