当前位置: 首页 > news >正文

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

下载安装nginx所用的依赖

yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel

下载nginx

wget http://nginx.org/download/nginx-1.12.2.tar.gz 
tar -xvf nginx-1.12.2.tar.gz

稍后安装nginx

安装lua语言

yum install readline-develcurl -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自行设置

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

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路径

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版本,其他版本可能会报错

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/
# 进入安装包目录
cd
cd nginx-1.12.2

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

./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文件,防治报错

cd /opt/nginx-1.12.2

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

打开:vi objs/Makefile


CFLAGS =  -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g 

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

CFLAGS =  -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -g 

保存:Esc,ZZ

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

cd /opt/nginx-1.12.2
make && make install

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

配置nginx的环境变量
打开:vi /etc/profile

export NGINX_HOME=/opt/nginx-1.12.2
export PATH=$PATH:$NGINX_HOME/sbin

保存:. /etc/profile

查看结果

nginx -V
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

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

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/中
建立软链接

cd /lib64
ln -s /opt/luaJIT-2.0.5/lib/libluajit-5.1.so.2 libluajit-5.1.so.2

刷新lib库

ldconfig

配置服务

cd /usr/lib/systemd/system/

新建服务nginx.service

vi /usr/lib/systemd/system/nginx.service

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

[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命令

systemctl daemon-reload

启动和开机自启

#启动服务或者使用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

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'

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

cd
mkdir run_shell
cd /root/run_shell
vi hadoop-statusi ...Esc ZZ
chnod +x ./hadoop-status

尝试运行确定无误

./hadoop-status

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

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

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" thenngx.exec("@node1")elsengx.exec("@node2")end}}location @node1 {proxy_pass http://node15:50070;}location @node2 {proxy_pass http://node16:50070;}}
}

重启nginx

systemctl restart nginx.service

访问localhost:80即可直接跳转到active的hadoop-ha上
如果是虚拟机,则在主机上访问虚拟机的ip地址即可访问

相关文章:

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

下载安装nginx所用的依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel下载nginx wget http://nginx.org/download/nginx-1.12.2.tar.gz tar -xvf nginx-1.12.2.tar.gz稍后安装nginx 安装lua语言 yum install readline-develcurl -R -O http://w…...

AJAX学习笔记2发送Post请求

AJAX学习笔记1发送Get请求_biubiubiu0706的博客-CSDN博客 继续 AJAX发送POST请求 无参数 测试 改回来 测试 AJAX POST请求 请求体中提交参数 测试 后端打断点 如何用AJAX模拟form表单post请求提交数据呢? 设置请求头必须在open之后,send之前 请求头里的设置好比…...

产品团队的需求分析指南

需求分析是软件开发流程中需求识别与管理的关键环节,需求分析的目的在于确保所有产品需求准确地代表了利益相关者的需求和要求。选择合适的需求分析方式可以帮助我们获取准确的产品需求,从而保证我们所交付的成果与利益相关者预期相符。 一、什么是需求…...

Python算法——排序算法(冒泡、选择、插入、快速、堆排序、并归排序、希尔、计数、桶排序、基数排序)

本文章只展示代码实现 ,原理大家可以参考: https://zhuanlan.zhihu.com/p/42586566 一、冒泡排序 def bubble_sort(lst):for i in range(len(lst) - 1): # 表示第i趟exchange False # 每一趟做标记for j in range(len(lst)-i-1): # 表示箭头if ls…...

[Linux]文件描述符(万字详解)

[Linux]文件描述符 文章目录 [Linux]文件描述符文件系统接口open函数close函数write函数read函数系统接口与编程语言库函数的关系 文件描述符文件描述符的概念文件数据交换的原理理解“一切皆文件”进程默认文件描述符文件描述符和编程语言的关系 重定向输出重定向输入重定向追…...

RenderTarget导出成图片,CineCamera相机

一、获取Cinecamera相机图像 1.1、启用UE自带插件 1.2、在UE编辑器窗口栏找到Composure合成,打开窗口 1. 3、右键空白处,新建合成,默认名称为 0010_comp;再右键新建的 0010_comp,新建图层元素 CGLayer层,默…...

深入探讨Java虚拟机(JVM):执行流程、内存管理和垃圾回收机制

目录 什么是JVM? JVM 执行流程 JVM 运行时数据区 堆(线程共享) Java虚拟机栈(线程私有) 什么是线程私有? 程序计数器(线程私有) 方法区(线程共享) JDK 1.8 元空…...

3D 碰撞检测

推荐:使用 NSDT场景编辑器快速搭建3D应用场景 轴对齐边界框 与 2D 碰撞检测一样,轴对齐边界框 (AABB) 是确定两个游戏实体是否重叠的最快算法。这包括将游戏实体包装在一个非旋转(因此轴对齐)的框中&#…...

Unity Canvas动画不显示的问题

问题描述: 我通过角色创建了一个walk的动画,当我把这个动画给到Canvas里面的一个image上,这个动画就不能正常播放了,经过一系列的查看我才发现,canvas里面动画播放和非canvas得动画播放,他们的动画参数是不一样的。一个…...

NSSCTF2nd与羊城杯部分记录

文章目录 前言[NSSCTF 2nd]php签到[NSSCTF 2nd]MyBox[NSSCTF 2nd]MyHurricane[NSSCTF 2nd]MyJs[NSSCTF 2nd]MyAPK羊城杯[2023] D0nt pl4y g4m3!!!羊城杯[2023]ezyaml羊城杯[2023]Serpent羊城杯[2023]EZ_web羊城杯[2023]Ez_misc总结 前言 今天周日,有点无聊没事干&a…...

数据库(一) 基础知识

概述 数据库是按照数据结构来组织,存储和管理数据的仓库 数据模型 数据库系统的核心和基础是数据模型,数据模型是严格定义的一组概念的集合。因此数据模型一般由数据结构、数据操作和完整性约束三部分组成。数据模型主要分为三种:层次模型,网状模型和关…...

vue从零开始学习

npm install慢解决方法:删掉nodel_modules。 5.0.3:表示安装指定的5.0.3版本 ~5.0.3:表示安装5.0X中最新的版本 ^5.0.3: 表示安装5.x.x中最新的版本。 yarn的优点: 1.速度快,可以并行安装 2.安装版本统一 项目搭建: 安装nodejs查看node版本:node -v安装vue clie : np…...

dji uav建图导航系列(三)模拟建图、导航

前面博文【dji uav建图导航系列()建图】、【dji uav建图导航系列()导航】 使用真实无人机和挂载的激光雷达完成建图、导航的任务。 当需要验证某一个slam算法时,我们通常使用模拟环境进行测试,这里使用stageros进行模拟测试,实际就是通过模拟器,虚拟一个带有传感器(如…...

PixelSNAIL论文代码学习(1)——总体框架和平移实现因果卷积

文章目录 引言正文目录解析README.md阅读Setup配置Training the model训练模型Pretrained Model Check Point预训练的模型训练方法 train.py文件的阅读model.py文件阅读h12_noup_smallkey_spec模型定义_base_noup_smallkey_spec模型实现一、定义因果卷积过程通过平移实现因果卷…...

Python大数据处理利器之Pyspark详解

摘要: 在现代信息时代,数据是最宝贵的财富之一,如何处理和分析这些数据成为了关键。Python在数据处理方面表现得尤为突出。而pyspark作为一个强大的分布式计算框架,为大数据处理提供了一种高效的解决方案。本文将详细介绍pyspark…...

S905L3A(M401A)拆解, 运行EmuELEC和Armbian

关于S905L3A / S905L3AB S905Lx系列没有公开资料, 猜测是Amlogic用于2B的芯片型号, 最早的 S905LB 是 S905X 的马甲, 而这个 S905L3A/S905L3AB 则是 S905X2 的马甲, 因为在性能评测里这两个U的得分几乎一样. S905L3A/S905L3AB 和 S905X2, S905X3 一样 GPU 是 G31, 相比前一代的…...

stack和queue容器

1 stack 基本概念 概念:stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口 栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为 栈中进入数据称为 — 入栈 push 栈中弹出数据称为 — 出栈 pop 2 stack 常用…...

面向对象基础

文章目录 面向对象基础一.面向对象介绍二.设计对象并使用三.封装四.This关键字五.构造方法六.标准的Javabean类七.对象内存图八.基本数据类型和引用数据类型九.成员和局部 面向对象基础 一.面向对象介绍 面向:拿,找 对象:能干活的东西 面向对象编程:找东西来做对应的事情 …...

spring集成mybatis

1、新建一个javaEE web项目 2、加入相关依赖的坐标 <dependencies><!--数据系列&#xff1a;mybatis,mysgl,druid数据源,junit--><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</grou…...

抽象轻松c语言

目 c语言 c程序 c语言的核心在于语言&#xff0c;语言的作用是进行沟通&#xff0c;人与人之间的信息交换 人与人之间的信息交换是会有信息空白&#xff08;A表达信息&#xff0c;B接受信息&#xff0c;B对信息的处理会与A所以表达的信息具有差距&#xff0c;这段差距称为信…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...