使用nginx-lua配置统一url自动跳转到hadoop-ha集群的active节点

下载安装nginx所用的依赖

sh 复制代码
yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel

下载nginx

sh 复制代码
wget http://nginx.org/download/nginx-1.12.2.tar.gz 
tar -xvf nginx-1.12.2.tar.gz

稍后安装nginx

安装lua语言

sh 复制代码
yum install readline-devel

curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gz
tar zxf lua-5.3.0.tar.gz
cd lua-5.3.0
make linux test
make install

安装LuaJIT,安装路径/opt/luaJIT-2.1.0自行设置

sh 复制代码
wget http://luajit.org/download/LuaJIT-2.1.0-beta2.tar.gz
tar zxf LuaJIT-2.1.0-beta2.tar.gz
cd LuaJIT-2.1.0-beta2
make PREFIX=/opt/luaJIT-2.1.0
make install PREFIX=/opt/luaJIT-2.1.0

设置环境变量

打开:vi /etc/profile

sh 复制代码
export LUAJIT_LIB=/opt/luaJIT-2.1.0/lib 
export LUAJIT_INC=/opt/luaJIT-2.1.0/include/luajit-2.1

保存:. /etc/profile

下载ngx_devel_kit(NDK)模块 :https://github.com/simpl/ngx_devel_kit/tags,不需要安装,记住存放位置/opt/luaJIT-2.0.5/package/ngx_devel_kit-0.2.19路径

sh 复制代码
wget https://github.com/simpl/ngx_devel_kit/archive/v0.2.19.tar.gz
tar -xzvf v0.2.19.tar.gz
cd /opt/luaJIT-2.1.0
mkdir package
mv ngx_devel_kit-0.2.19 /opt/luaJIT-2.0.5/package/

下载最新的lua-nginx-module 模块 :https://github.com/openresty/lua-nginx-module/tags,不需要安装,记住存放位置/opt/luaJIT-2.0.5/package/lua-nginx-module-0.10.13路径

注意:一定要下载0.10.13版本,其他版本可能会报错

sh 复制代码
wget https://github.com/openresty/lua-nginx-module/archive/v0.10.13.tar.gz
tar -xzvf v0.10.13.tar.gz
mv lua-nginx-module-0.10.13 /opt/luaJIT-2.0.5/package/
sh 复制代码
# 进入安装包目录
cd
cd nginx-1.12.2

在nginx中编译,/opt/nginx-1.12.2为安装路径,--add-module后面加上面下载的两个包的位置

sh 复制代码
./configure --prefix=/opt/nginx-1.12.2 --with-http_stub_status_module --with-http_ssl_module --add-module=/opt/luaJIT-2.0.5/package/lua-nginx-module-0.10.13 --add-module=/opt/luaJIT-2.0.5/package/ngx_devel_kit-0.2.19

修改Makefile文件,防治报错

sh 复制代码
cd /opt/nginx-1.12.2

找到当前目录下找到objs文件夹,并进入,打开文件Makefile,找到有一下内容的这行:

打开:vi objs/Makefile

sh 复制代码
CFLAGS =  -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g 

-Werror: gcc将所有的警告当成错误进行处理把这行内容中的 "-Werror"去掉

sh 复制代码
CFLAGS =  -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -g 

保存:Esc,ZZ

回到上一级目录,进行安装

sh 复制代码
cd /opt/nginx-1.12.2
make && make install

要在bash中执行
echo $SHELL 需要是/bin/bash如果是其他的,执行bash,切换到bash

配置nginx的环境变量

打开:vi /etc/profile

sh 复制代码
export NGINX_HOME=/opt/nginx-1.12.2
export PATH=$PATH:$NGINX_HOME/sbin

保存:. /etc/profile

查看结果

sh 复制代码
nginx -V
sh 复制代码
nginx version: nginx/1.12.2
built by gcc 8.3.1 20190311 (Red Hat 8.3.1-3) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/opt/nginx-1.12.2 --with-http_stub_status_module --with-http_ssl_modu
le --add-module=/opt/luaJIT-2.0.5/package/lua-nginx-module-0.10.13 --add-module=/opt/luaJIT-2.0.5/package/ngx_devel_kit-0.2.19

看看有没有断开的链接,如果有的话,自己连一下

sh 复制代码
ldd $(which /opt/nginx-1.12.2/sbin/nginx)

假如有 libluajit-5.1.so.2 => not found

通过观察,我们知道, libluajit-5.1.so.2 在/opt/luaJIT-2.0.5/lib/中

建立软链接

sh 复制代码
cd /lib64
ln -s /opt/luaJIT-2.0.5/lib/libluajit-5.1.so.2 libluajit-5.1.so.2

刷新lib库

sh 复制代码
ldconfig

配置服务

sh 复制代码
cd /usr/lib/systemd/system/

新建服务nginx.service

sh 复制代码
vi /usr/lib/systemd/system/nginx.service

输入以下内容,注意路径/opt/nginx-1.12.2为自己的安装nginx的路径

sh 复制代码
[Unit]
Description=nginx - high performance web server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/opt/nginx-1.12.2/logs/nginx.pid
ExecStartPre=/opt/nginx-1.12.2/sbin/nginx -t -c /opt/nginx-1.12.2/conf/nginx.conf
ExecStart=/opt/nginx-1.12.2/sbin/nginx -c /opt/nginx-1.12.2/conf/nginx.conf
ExecReload=/opt/nginx-1.12.2/sbin/nginx -s reload
ExecStop=/opt/nginx-1.12.2/sbin/nginx -s stop
ExecQuit=/opt/nginx-1.12.2/sbin/nginx -s quit                                                        
PrivateTmp=true

[Install]
WantedBy=multi-user.target

在启动服务之前,需要先重载systemctl命令

sh 复制代码
systemctl daemon-reload

启动和开机自启

sh 复制代码
#启动服务或者使用systemctl start nginx
systemctl start nginx.service

#运行以下命令设置Nginx服务开机自启动
systemctl enable nginx

获取当前hadoop-ha集群的状态,例如有两台namenode,ip地址分别是192.168.206.215和192.168.206.216,那么如果192.168.206.215是active,那么下面返回active,如果是192.168.206.216是active,那么返回standby

sh 复制代码
wget -qO- http://192.168.206.215:50070/jmx?qry=Hadoop:service=NameNode,name=NameNodeStatus | sed 's
/,/\n/g' | grep 'State' | sed 's/"State" : "//g' | sed 's/[" ]//g'

将上面代码放到一个文件中

sh 复制代码
cd
mkdir run_shell
cd /root/run_shell
vi hadoop-status

i ...

Esc ZZ
chnod +x ./hadoop-status

尝试运行确定无误

sh 复制代码
./hadoop-status

到nginx的配置文件下,进行配置

sh 复制代码
cd /opt/nginx-1.12.2/conf/

配置nginx-conf,其中/root/run_shell/hadoop-status为脚本执行的路径,/tmp/hadoop-status.tmp是随便的一个文件,避免文件名冲突,注意是>不是追加>>,access_by_lua_block是lua脚本,需要要安装上面的带有lua脚本的nginx,ngx.log(ngx.ERR, result)是日志信息,调试的时候用,可以删掉,代码可以简化,懒得弄了,user root root;是用户名和组,一定要和hadoop-status脚本权限对应,否则会没有访问执行权限,proxy_pass http://node15:50070;是重定向的hadoop-web页面,自行设置,如果报错,执行lua进入命令行,一行一行的执行,看哪里出了问题,退出lua-shell直接Ctrl+C,或者看nginx下面的logs文件中的error报错日志

vi nginx.conf

json 复制代码
worker_processes  1;
user root root;

events {
    worker_connections  1024;
}

http {

    server {
        listen       80;
        server_name  localhost;

        location / {
            access_by_lua_block {
				os.execute("/bin/bash /root/run_shell/hadoop-status > /tmp/hadoop-status.tmp")
				handle = io.open("/tmp/hadoop-status.tmp", "r")
				result = handle:read("*a")
				handle:close()
				
				sentinel_result = result:match("active") and "active" or "standby"
				ngx.log(ngx.ERR, result)
				ngx.log(ngx.ERR, sentinel_result)
				ngx.log(ngx.ERR, "123")
				if sentinel_result == "active" then
					ngx.exec("@node1")
				else
					ngx.exec("@node2")
				end
			}
        }

       
		location @node1 {
			proxy_pass http://node15:50070;
		}

		location @node2 {
			proxy_pass http://node16:50070;
		}

    }
}

重启nginx

sh 复制代码
systemctl restart nginx.service

访问localhost:80即可直接跳转到active的hadoop-ha上

如果是虚拟机,则在主机上访问虚拟机的ip地址即可访问

相关推荐
TTBIGDATA16 分钟前
【Ambari监控】Ambari-Metrics 的分支研究
大数据·数据库·hadoop·ambari·bigtop·edp·hidataplus
IT学长编程33 分钟前
计算机毕业设计 基于Hadoop的南昌房价数据分析系统的设计与实现 Python 大数据毕业设计 Hadoop毕业设计选题【附源码+文档报告+安装调试
大数据·hadoop·python·毕业设计·课程设计·毕业论文·豆瓣电影数据可视化分析
郑洁文1 小时前
豆瓣网影视数据分析与应用
大数据·python·数据挖掘·数据分析
MocapLeader1 小时前
IROS 2025 多智能体深度强化学习算法实现Crazyflie无人机在复杂环境中协同追逐
无人机·集群·控制·导航·协同·轨迹规划·避障
计算机编程-吉哥2 小时前
大数据毕业设计-大数据-基于大数据的热门游戏推荐与可视化系统(高分计算机毕业设计选题·定制开发·真正大数据)
大数据·毕业设计·计算机毕业设计选题·机器学习毕业设计·大数据毕业设计·大数据毕业设计选题推荐·大数据毕设项目
DDC楼宇自控与IBMS集成系统解读2 小时前
IBMS智能化集成系统:构建建筑全场景协同管控中枢
大数据·网络·人工智能·能耗监测系统·ibms智能化集成系统·楼宇自控系统·智能照明系统
奋斗的蛋黄2 小时前
HDFS(Hadoop 分布式文件系统)知识点梳理
大数据·hadoop·hdfs
计算机编程-吉哥3 小时前
大数据毕业设计-基于大数据的高考志愿填报推荐系统(高分计算机毕业设计选题·定制开发·真正大数据)
大数据·毕业设计·计算机毕业设计选题·机器学习毕业设计·大数据毕业设计·大数据毕业设计选题推荐·大数据毕设项目
m0_464608263 小时前
Nginx反向代理与负载均衡部署
运维·nginx·负载均衡
武子康3 小时前
大数据-95 Spark 集群 SparkSQL Action与Transformation操作 详细解释与测试案例
大数据·后端·spark