jdk nginx. redis 在arm和x86要分别编译

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jdk nginx. redis 在arm和x86要分别编译相关的知识,希望对你有一定的参考价值。

参考技术A

一、注意openssl和pcre只需要把源码解压缩,不需要单独交叉编译!
开始的时候不知道,傻傻的把这两个库弄半天把它们编译过去了。谁知道nginx的--with-pcre和--with-openssl选项,指定的是这两个库源代码的路径,并非安装路径!nginx的编译系统只会从/usr、/usr/local等少数几个目录查找是否有预编译的pcre、zlib、openssl等库。对于交叉编译,直接把交叉编译后的pcre等安装在/usr、/usr/local显然不合适,因此需要使用--with-pcre和--with-openssl指定源代码的位置

二、交叉编译nginx
在x64 linux上面编译非常简单的nginx,没想到在交叉编译的时候巨多坑。下面一个configure是编译成功的配置

进入/usr/local/src目录,创建nginx文件夹。入刚创建的nginx目录,下载nginx的tar包,解压,进入解压生成的目录,进行配置(后面有补充,建议通读一遍)编译安装查找安装路径,在执行make编译时,可以添加要编译的参数,已安装完成,比如我现在要新增 http_stub_status_module 模块参数,那么我只要把该参数添加进去然后重新编译即可,需要注意的是原先编译过的参数也要加进来。
进入nginx的安装目录,因为我安装的时候没有添加任何参数,所以这里我只需要执行

我这里只需要这一个模块,如果你安装的nginx还使用其他的模块,记得在上面的编译命令中加上。
另外,这里只能 make 千万别 make install,否则就覆盖安装了。

    make完成后,在源码目录下会有一个objs目录,objs目录下就多了个nginx,这个就是新版本的程序了;

    然后将objs目录下的nginx替换之前已经安装过的nginx(建议将旧的nginx程序做下备份)


nginx+tomcat7+redis

安装jdk

安装tomcat7

安装nginx

安装redis


tomcat-redis-session-manager项目目前只支持tomcat6和tomcat7


  • 使用gradle编译

wget https://services.gradle.org/distributions/gradle-4.4.1-bin.zip

unzip gradle-4.4.1-bin.zip

然后将它的bin加到PATH环境变量就可以使用gradle命令了


  • 编译tomcat-redis-session-manager

  • 修改tomcat-redis-session-manager中的代码

https://github.com/jcoleman/tomcat-redis-session-manager

下载tomcat-redis-session-manager的zip文件

技术分享图片

unzip tomcat-redis-session-manager-master.zip


  • 修改build.gradle文件

vim build.gradle

注释掉47-49行,56-58行

 47 //signing {

 48 // sign configurations.archives

 49 //}

 

  56 //      repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") {

 57 //        authentication(userName: sonatypeUsername, password: sonatypePassword)

 58 //      }

 

 


构建

到tomcat-redis-session-manager-master目录下

gradle build

#如果gradle没有加到PATH环境变量中,就用绝对路径

技术分享图片

显示BUILD SUCCESSFUL说明构建成功

build/libs/下可以找到构建的tomcat-redis-session-manager-master-2.0.0.jar包

/root/.gradle/caches/目录下可以找到jedis-2.5.2.jar、commons-pool2-2.2.jar

技术分享图片

将这三个包放到tomcat的libs目录下



  • 设置nginx+tomcat的负载均衡

本次测试使用的一台机器,运行了tomcat双实例

服务端口主配置文件 
nginx    80

/etc/nginx/conf.d/default.conf(yum安装)

${NGINX_HOME}/conf/nginx.conf(二进制安装)

tomcat18080/tomcat1/conf/server.xml/
tomcat28081/tomcat2/conf/server.xml/


  • 在tomcat中添加测试页面(路径自行修改)

tomcat1/tomcat1/webapps/ROOT/test.jsp
tomcat2 tomcat2 


内容如下(out.println后面为输出信息,请自行修改)

<%@ page contentType="text/html;charset=UTF-8" isELIgnored="false"%>

SessionID:<%=session.getId()%><BR>

SessionIP:<%=request.getServerName()%> <BR>

SessionPort:<%=request.getServerPort()%>

<%     out.println("This is Tomcat 1 !");     %>


启动tomcat访问测试

IP:PORT/test.jsp

技术分享图片



  • 设置nginx负载均衡

这里以yum安装的nginx为例

vim /etc/nginx/conf.d/default.conf

     #设置upstream

     upstream tomcat_nginx {

         server 192.168.233.111:8080;

         server 192.168.233.111:8081;

     }

 

 server {

     listen       80 default_server;

     listen       [::]:80 default_server;

     server_name  _;

     root         /usr/share/nginx/html;

 

     # Load configuration files for the default server block.

     include /etc/nginx/default.d/*.conf;

     

     #修改location

     location / {

             proxy_pass http://tomcat_nginx;

     #        root   html;

     #        index  index.html index.htm;

     }

 

     error_page 404 /404.html;

         location = /40x.html {

     }

 

     error_page 500 502 503 504 /50x.html;

         location = /50x.html {

     }

 

 }

 


启动nginx访问测试

技术分享图片


  • 修改tomcat的conf/context.xml实现将session存放在redis中

<Context>


    <!-- Default set of monitored resources -->

    <WatchedResource>WEB-INF/web.xml</WatchedResource>

    <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />

    <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager" 

    host="127.0.0.1" 

    port="6379" 

    password="redhat"

    database="0" 

    maxInactiveInterval="60"

    />


    <!-- Uncomment this to disable session persistence across Tomcat restarts -->

    <!--

    <Manager pathname="" />

    -->


    <!-- Uncomment this to enable Comet connection tacking (provides events

         on session expiration as well as webapp lifecycle) -->

    <!--

    <Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />

    -->


</Context>

host是主机,password是密码,没有就删掉这行,post端口,注意Valve必须在Manager之前



启动redis,重启tomcat访问测试

技术分享图片

技术分享图片


##### 注意:tomcat-redis-session-manager项目不支持tomcat8,作者没弄,网上的都是在7的基础上进行的修改,不知道会有什么问题。

安装网上的弄tomcat8+redis老是报错,明天试试其他方法,试试memcache


以上是关于jdk nginx. redis 在arm和x86要分别编译的主要内容,如果未能解决你的问题,请参考以下文章

ARM PWN基础教程

x86的库和arm的.o文件能链接吗

华为鲲鹏下可用的 Redis docker 镜像

给Arm生态添把火,腾讯Kona JDK Arm架构优化实践

在x86的Docker中构建TVM的ARM环境

在x86的Docker中构建TVM的ARM环境