Keepalived安装及配置实现虚拟IP与Namenode HA中Active地址端口的代理

一、背景

  由于NameNode做了HA,因此需要使用Keepalived将NameNode的8020/9820端口代理出去,比如代理一个虚拟ip+端口

  使用说明:如果在192.168.66.21、192.168.66.22节点安装了Keepalived,并创建了虚拟IP192.168.66.130和虚拟端口29870、28020,则在192.168.66.21、192.168.66.22节点上,若standby节点为192.168.66.22,则此192.168.66.22主机将无法telnet通192.168.66.130:29870、192.168.66.130:28020

二、下载

  下载keepalived-2.2.4.tar.gz,并上传至服务器

  https://www.keepalived.org/download.html

三、安装

1、解压

tar -zxvf keepalived-2.2.4.tar.gz -C /opt/module/

2、安装依赖包

yum install -y gcc openssl-devel popt-devel

3、编译安装

cd /opt/module/keepalived-2.2.4/
./configure --prefix=/usr/local/keepalived
make && make install

4、复制配置

cp /opt/module/keepalived-2.2.4/keepalived/etc/init.d/keepalived /etc/init.d/
mkdir -p /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /opt/module/keepalived-2.2.4/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/sbin/keepalived /usr/bin/

5、主节点操作

(1)检测active节点

vim /etc/keepalived/chkHealth.sh
复制代码
#!/bin/bash
status=`curl -HGET http://192.168.66.21:9870/jmx?qry=Hadoop:service=NameNode,name=NameNodeStatus`
active="active"
result=$(echo $status | grep "${active}")

if [ "$result" != "" ];then
echo "result=$result"
exit 0
else
exit 1
fi
复制代码

  最后赋予权限

chmod +x /etc/keepalived/chkHealth.sh

(2)keepalived.conf配置

vim /etc/keepalived/keepalived.conf
复制代码
! Configuration File for keepalived

global_defs {
   notification_email {   }
   router_id HA_NETDISK
   script_user root
}

vrrp_script chk_ha_service {
   script "/etc/keepalived/chkHealth.sh"
   interval 3
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 79
    priority 200
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.66.130
    }
    track_script {
       chk_ha_service
    }
}

virtual_server 192.168.66.130 29820 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    persistence_timeout 1
    protocol TCP

    real_server 192.168.66.21 9820 {
         weight 1
         TCP_CHECK {
         connect_timeout 1
         nb_get_retry 3
         delay_before_retry 3
         connect_port 9820
         }
    }
}

virtual_server 192.168.66.130 29870 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    persistence_timeout 1
    protocol TCP

    real_server 192.168.66.21 9870 {
         weight 1
         TCP_CHECK {
         connect_timeout 1
         nb_get_retry 3
         delay_before_retry 3
         connect_port 9870
         }
    }
}
Keepalived.conf
复制代码

  说明:大致的思路是创建了一个192.168.66.130的虚拟IP,当建立TCP连接之后,访问虚拟IP的29820端口时,Keepalived会先调用chkHealth.sh脚本进行判断,若主节点192.168.66.21的NameNode处于active状态,则将请求转发至192.168.66.21的9820端口。同理,访问虚拟IP的29870端口时,Keepalived会先调用chkHealth.sh脚本进行判断,若主节点192.168.66.21的NameNode处于active状态,则将请求转发至192.168.66.21的9870端口

  值得注意的是interface ens33中的ens33表示网卡名称,可以使用ifconfig查看你自己的网卡名称

  完成之后赋予权限:

chmod 644 /etc/keepalived/keepalived.conf

(3)启停

service keepalived start
service keepalived stop
service keepalived status
service keepalived restart
ps -ef | grep keepalived

(4)日志路径说明:/var/log/messages

6、从节点操作

(1)检测active节点

vim /etc/keepalived/chkHealth.sh
复制代码
#!/bin/bash
status=`curl -HGET http://192.168.66.22:9870/jmx?qry=Hadoop:service=NameNode,name=NameNodeStatus`
active="active"
result=$(echo $status | grep "${active}")

if [ "$result" != "" ];then
echo "result=$result"
exit 0
else
exit 1
fi
复制代码

  最后赋予权限

chmod +x /etc/keepalived/chkHealth.sh

(2)keepalived.conf配置

vim /etc/keepalived/keepalived.conf
复制代码
! Configuration File for keepalived

global_defs {
   notification_email {   }
   router_id HA_NETDISK
   script_user root
}

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

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 79
    priority 195
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.66.130
    }
    track_script {
       chk_ha_service
    }
}

virtual_server 192.168.66.130 29820 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    persistence_timeout 1
    protocol TCP

    real_server 192.168.66.22 9820 {
         weight 1
         TCP_CHECK {
         connect_timeout 1
         nb_get_retry 3
         delay_before_retry 3
         connect_port 9820
         }
    }
}

virtual_server 192.168.66.130 29870 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    persistence_timeout 1
    protocol TCP

    real_server 192.168.66.22 9870 {
         weight 1
         TCP_CHECK {
         connect_timeout 1
         nb_get_retry 3
         delay_before_retry 3
         connect_port 9870
         }
    }
}
View Code
复制代码

  说明1:大致的思路是创建了一个192.168.66.130的虚拟IP,当建立TCP连接之后,访问虚拟IP的29820端口时,Keepalived会先调用chkHealth.sh脚本进行判断,若主节点192.168.66.22的NameNode处于active状态,则将请求转发至192.168.66.22的9820端口。同理,访问虚拟IP的29870端口时,Keepalived会先调用chkHealth.sh脚本进行判断,若主节点192.168.66.22的NameNode处于active状态,则将请求转发至192.168.66.22的9870端口

  说明2:interface指网卡名称,可以使用ifconfig查看网卡名称

  完成之后赋予权限:

chmod 644 /etc/keepalived/keepalived.conf

(3)启停

service keepalived start
service keepalived stop
service keepalived status
service keepalived restart
ps -ef | grep keepalived
#开机自启
systemctl enable keepalived.service

(4)日志路径说明:/var/log/messages

7、测试

(1)将keepalived启动起来

(2)访问虚拟IP+29870端口,发现处于激活状态的是slave3节点

  http://192.168.66.130:29870/

(3)将slave3节点的NameNode 停掉,再次访问,发现keepalived将链接转发到了slave22节点上了

hdfs --daemon stop namenode

posted @   落魄的大数据转AI小哥  阅读(1066)  评论(3编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示