array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 实战Nginx+Tomcat负载均衡集群 - 爱码网

实验环境:RHEL6.5  server1.example.com 172.25.254.1     

                                     server2.example.com 172.25.254.2     

实验内容:

1.tomcat基本配置

    1.1安装tomcat

    1.2配置环境变量并启动tomcat

    1.3设置开机启动

2.配置测试网页

       (1)自己写的JSP测试页进行测试

(2) 网络中的测试页

3.编辑nginx的配置文件

4.测试访问 172.25.254.1/test.jsp

5.tomcat 集群

    5.1Server2端配置:

    5.2 rr论寻

    5.3 ip_hash绑定

安装包:apache-tomcat-7.0.37.tar.gz

前提:已经配置好Nginx与JDK环境



1.tomcat基本配置

    1.1安装tomcat

[[email protected] mnt]# cd /opt/lnmp/

[[email protected] lnmp]# ls

apache-tomcat-7.0.37.tar.gz  java

[[email protected] lnmp]# tar zxf apache-tomcat-7.0.37.tar.gz 

[[email protected] lnmp]# ln -s apache-tomcat-7.0.37  tomcat   ##链接改名

    1.2配置环境变量并启动tomcat

[[email protected] lnmp]# vim /etc/profile

[[email protected] lnmp]# source /etc/profile

[[email protected] lnmp]# startup.sh       ##启动tomcat,tomcat的端口号是8080

Using CATALINA_BASE:   /opt/lnmp/tomcat

Using CATALINA_HOME:   /opt/lnmp/tomcat

Using CATALINA_TMPDIR: /opt/lnmp/tomcat/temp

Using JRE_HOME:        /opt/lnmp/java/

Using CLASSPATH:       /opt/lnmp/tomcat/bin/bootstrap.jar:/opt/lnmp/tomcat/bin/tomcat-juli.jar

[[email protected] bin]# netstat -antple|grep 8080

tcp        0      0 :::8080                     :::*                        LISTEN      0          21195      2913/java  

    1.3设置开机启动

[[email protected] lnmp]# cd tomcat/bin/      ###bin下的部分sh文件是tomcat的功能启动脚本文件

[[email protected] bin]# vim /etc/rc.local      ##因为nginx和tomcat等没有开机启动脚本,/etc/rc.local是开机读取的文件,

source /etc/profile   ##该文件读取的是环境变量中的绝对路径

/opt/lnmp/nginx/sbin/nginx

/opt/lnmp/tomcat/bin/startup.sh


实战Nginx+Tomcat负载均衡集群



    2.配置测试网页

       (1)自己写的JSP测试页进行测试  

           vim /opt/lnmp/tomcat/webapps/ROOT/steven.jsp

             SERVER-willis - Time is:<%=new java.util.Date()%>

    刷新可看到实时时间


实战Nginx+Tomcat负载均衡集群


实战Nginx+Tomcat负载均衡集群


(2) 网络中的测试页

vim /opt/lnmp/tomcat/webapps/ROOT/test.jsp 

<%@ page contentType="text/html; charset=GBK" %>

<%@ page import="java.util.*" %>

<html><head><title>Cluster App Test</title></head>

<body>

Server Info:

<%

out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>

<%

out.println("<br> ID " + session.getId()+"<br>");

String dataName = request.getParameter("dataName");

if (dataName != null && dataName.length() > 0) {

String dataValue = request.getParameter("dataValue");

session.setAttribute(dataName, dataValue);

}

out.print("<b>Session list</b>");

Enumeration e = session.getAttributeNames();

while (e.hasMoreElements()) {

String name = (String)e.nextElement();

String value = session.getAttribute(name).toString();

out.println( name + " = " + value+"<br>");

System.out.println( name + " = " + value);

}

%>

<form action="test.jsp" method="POST">

name:<input type=text size=20 name="dataName">

<br>

key:<input type=text size=20 name="dataValue">

<br>

<input type=submit>

</form>

</body>

</html>


实战Nginx+Tomcat负载均衡集群



    3.编辑nginx的配置文件

[[email protected] nginx]# pwd

/opt/lnmp/nginx

[[email protected] nginx]# vim conf/nginx.conf

          location / {

                     root   html;

                     index index.jsp index.php index.html index.htm;

                  }

         location ~  \.jsp$  {

                proxy_pass http://localhost:8080;      

                 }

[[email protected] lnmp]# nginx -t

nginx: the configuration file /opt/lnmp/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /opt/lnmp/nginx/conf/nginx.conf test is successful

[[email protected] lnmp]# nginx -s reload


    4.测试访问 172.25.254.1/test.jsp


实战Nginx+Tomcat负载均衡集群



5.tomcat 集群

再启动一个虚拟机server2  IP为172.25.254.2

    5.1Server2端配置:

把server1端配置好的java-jdk,nginx和tomcat复制到启动的server2中

[[email protected] ~]# mkdir /opt/lnmp

[[email protected] ~]# 

[[email protected] ~]# cd /opt/lnmp

[[email protected] lnmp]# scp -r 172.25.254.1:/opt/lnmp/* .

[[email protected] lnmp]# scp -r 172.25.254.1:/etc/profile /etc/

[[email protected] lnmp]# source /etc/profile       

[[email protected] lnmp]# startup.sh 


测试server2的tomcat

实战Nginx+Tomcat负载均衡集群



    5.2 rr论寻

[[email protected] lnmp]# vim /opt/lnmp/nginx/conf/nginx.conf

 18 http {

 19     include       mime.types;

 20     default_type  application/octet-stream;

 21         upstream tomcat{

 22                 server 172.25.6.10:8080;

 23                 server 172.25.6.20:8080;

 24         }


 49         location / {

 50             root   html;

 51             index index.jsp index.php index.html index.htm;

 52         }

 53         location ~ \.jsp$ {

 54                 proxy_pass http://tomcat;

 55         }

 56 

测试:访问172.25.254.2:8080 无论是那个ip访问的都是server1一次server2一次

关闭server1的tomcat,只访问server2


    5.3 ip_hash绑定(同一个ip访问的是同一台服务器

(1)vim /opt/lnmp/nginx/conf/nginx.conf

18 http {

 19     include       mime.types;

 20     default_type  application/octet-stream;

 21         upstream tomcat{

 22    ip_hash;

 23                 server 172.25.15.110:8080;

 24                 server 172.25.15.112:8080;

 25         }

    (2)测试   ./shutdown.sh

        关闭一台后访问另外一台


本文转自willis_sun 51CTO博客,原文链接:http://blog.51cto.com/willis/1851737,如需转载请自行联系原作者

相关文章: