Java web项目,怎么做负载均衡啊?

Java web项目,怎么做负载均衡啊?,第1张

HAProxy是一款反向代理服务器工具,通过它,可以实现负载均衡。它支持双机热备支持虚拟主机,但其配置简单,拥有非常不错的服务器健康检查功能,当其代理的后端服务器出现故障, HAProxy会自动将该服务器摘除,故障恢复后再自动将该服务器加入。新的1.3引入了frontend,backend,frontend根据任意HTTP请求头内容做规则匹配,然后把请求定向到相关的backend.

利用HAPorxy实现负载均衡

1. 利用HAProxy实现负载均衡

192.168.169.137 (haproxy)———负载均衡———-(192.168.169.117192.168.169.118)

安装配置HAproxy

cd /usr/local/

wget http://haproxy.1wt.eu/download/1.3/src/haproxy-1.3.14.2.tar.gz

tar zxvf haproxy-1.3.14.2.tar.gz

mv haproxy-1.3.14.2 haproxy

cd haproxy

make TARGET=linux26

2. 创建配置文件

# vi haproxy.cfg

global

maxconn 5120

chroot /usr/local/haproxy

uid 99

gid 99

daemon

quiet

nbproc 2 #通过nbproc多设置几个haproxy并发进程,这样每个进程的task_queue相对就会短很多,性能自然就能提高不少

#pidfile /var/run/haproxy-private.pid

defaults

log global

mode http

option httplog

option dontlognull

log 127.0.0.1 local3

retries 3

option redispatch

maxconn 2000

contimeout 5000

clitimeout 50000

srvtimeout 50000

listen webfarm 0.0.0.0:80

mode http

stats uri /haproxy-stats #监控haproxy状态

stats realm Haproxy\ statistics

stats auth netseek:52netseek #设置状态监控的用户名为netseek密码为52netseek

balance roundrobin #负载均衡算法

cookie SERVERID insert indirect

option httpclose #

option forwardfor #apache日志转发功能

option httpchk HEAD /check.txt HTTP/1.0 #健康检测

server app_bbs1 192.168.169.117:80 cookie app1inst1 check inter 2000 rise 2 fall 5

server app_bbs2 192.168.169.118:80 cookie app1inst2 check inter 2000 rise 2 fall 5

syslog.conf里加一行

local3.* /var/log/haproxy.log

# touch /var/log/haproxy.log

# chown haproxy:haproxy /var/log/haproxy.log

# chmod u+x /var/log/haproxy.log

# tail –f /var/log/harpoxy.log 监控日志

# ./haproxy -f haproxy.cfg 启动服务.

监控状态图示http://192.168.169.137/haproxy-stats ,输入用户名密码查看状态。

后端apache日志处理

配置httpd.conf

LogFormat “%{X-Forwarded-For}i %l %u %t \”%r\” %>s %b ” combined

CustomLog /var/log/httpd/access_log combined

虚拟主机不记录检测日志:

SetEnvIf Request_URI “^/check\.txt$” dontlog

LogLevel warn

ErrorLog /var/log/httpd/vhost_error.log

CustomLog /var/log/httpd/vhost_access.log combined env=!dontlog

相关介绍

#./haproxy –help //haproxy相关命令参数介绍.

haproxy -f <配置文件>[-n 最大并发连接总数] [-N 每个侦听的最大并发数] [-d] [-D] [-q] [-V] [-c] [-p <pid文件>] [-s] [-l] [-dk]

[-ds] [-de] [-dp] [-db] [-m <内存限制M>] [{-sf|-st} pidlist...]

-d 前台,debug模式

-D daemon模式启动

-q 安静模式,不输出信息

-V 详细模式

-c 对配置文件进行语法检查

-s 显示统计数据

-l 显示详细统计数据

-dk 不使用kqueue

-ds 不使用speculative epoll

-de 不使用epoll

-dp 不使用poll

-db 禁用后台模式,程序跑在前台

-sf <pidlist>

程序启动后向pidlist里的进程发送FINISH信号,这个参数放在命令行的最后

-st <pidlist>

程序启动后向pidlist里的进程发送TERMINATE信号,这个参数放在命令行的最后

分主机跑,有两种情况,一种是分布式系统,前端,服务端,数据库分别跑在不同的主机上,分担了压力。一种是集群,每一台上跑的都是一样的程序,一样的配置。同样的访问请求被分发到了不同的机器上响应,这才是负载均衡所追求的。

分布式和集群可以独立使用,也可以混合使用。

1、在远程server里搭建一个http服务,并支持某种服务端语言(如.net或php之类)

2、用服务端语言获取到服务器的磁盘信息,把结果输出

3、在本地用JS写一段AJAX脚本,远程请求服务端写好的程序,得到结果,并展示给用户

<html>

<head>

<title>提取硬盘序列号</title>

<script>

function disk() {//硬盘序列号 信息

var locator = new ActiveXObject ("WbemScripting.SWbemLocator")

var service = locator.ConnectServer(".")

var properties = service.ExecQuery("SELECT * FROM Win32_DiskDrive")

var e = new Enumerator (properties)

document.write("<table border=1>")

for (!e.atEnd()e.moveNext ())

{

var p = e.item ()

document.write("<tr>")

document.write("<td>" + p.signature + "</td>")

document.write("</tr>")

}

document.write("</table>")

}

</script>

</head>

<body>

<input type="button" value="硬盘序列号" onclick="disk()">

</body>

</html>

在这上找的代码:

对于写过ASP或.net 的人来说,通过asp或.net 语言来获得客户端的硬件信息是很熟悉的.但如何通过javascript这种客户端脚本来获得客户端的信息呢?请看以下实例:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>

<head>

<title>javascript获得客户端硬件信息-www.web2bar.cn/</title>

<meta name="GENERATOR" content="Microsoft Visual Studio .NET

7.1">

<meta name="vs_targetSchema"

content="http://schemas.microsoft.com/intellisense/ie5">

<script id=clientEventHandlersJS language=javascript>

<!--

function Button2_onclick() {//CPU 信息

var locator = new ActiveXObject ("WbemScripting.SWbemLocator")

var service = locator.ConnectServer(".")

var properties = service.ExecQuery("SELECT * FROM Win32_Processor")

var e = new Enumerator (properties)

document.write("<table border=1>")

for (!e.atEnd()e.moveNext ())

{

var p = e.item ()

document.write("<tr>")

document.write("<td>" + p.Caption + "</td>")

document.write("<td>" + p.DeviceID + "</td>")

document.write("<td>" + p.Name + "</td>")

document.write("<td>" + p.CpuStatus + "</td>")

document.write("<td>" + p.Availability + "</td>")

document.write("<td>" + p.Level + "</td>")

document.write("<td>" + p.ProcessorID + "</td>")

document.write("<td>" + p.SystemName + "</td>")

document.write("<td>" + p.ProcessorType + "</td>")

document.write("</tr>")

}

document.write("</table>")

}

function Button1_onclick() {//软盘信息

var locator = new ActiveXObject ("WbemScripting.SWbemLocator")

var service = locator.ConnectServer(".")

var properties = service.ExecQuery("SELECT * FROM Win32_FloppyDrive")

var e = new Enumerator (properties)

document.write("<table border=1>")

for (!e.atEnd()e.moveNext ())

{

var p = e.item ()

document.write("<tr>")

document.write("<td>" + p.Description + "</td>")

document.write("<td>" + p.DeviceID + "</td>")

document.write("<td>" + p.Status + "</td>")

document.write("<td>" + p.Manufacuturer + "</td>")

document.write("</tr>")

}

document.write("</table>")

}

function Button1_onclick() {//CD-ROM 信息

var locator = new ActiveXObject ("WbemScripting.SWbemLocator")

var service = locator.ConnectServer(".")

var properties = service.ExecQuery("SELECT * FROM Win32_CDROMDrive")

var e = new Enumerator (properties)

document.write("<table border=1>")

for (!e.atEnd()e.moveNext ())

{

var p = e.item ()

document.write("<tr>")

document.write("<td>" + p.Caption + "</td>")

document.write("<td>" + p.Description + "</td>")

document.write("<td>" + p.Drive + "</td>")

document.write("<td>" + p.Status + "</td>")

document.write("<td>" + p.MediaLoaded + "</td>")

document.write("</tr>")

}

document.write("</table>")

}

function Button1_onclick() {//键盘信息

var locator = new ActiveXObject ("WbemScripting.SWbemLocator")

var service = locator.ConnectServer(".")

var properties = service.ExecQuery("SELECT * FROM Win32_Keyboard")

var e = new Enumerator (properties)

document.write("<table border=1>")

for (!e.atEnd()e.moveNext ())

{

var p = e.item ()

document.write("<tr>")

document.write("<td>" + p.Description + "</td>")

document.write("<td>" + p.Name + "</td>")

document.write("<td>" + p.Status + "</td>")

document.write("</tr>")

}

document.write("</table>")

}

function Button1_onclick() {//主板信息

var locator = new ActiveXObject ("WbemScripting.SWbemLocator")

var service = locator.ConnectServer(".")

var properties = service.ExecQuery("SELECT * FROM Win32_BaseBoard")

var e = new Enumerator (properties)

document.write("<table border=1>")

for (!e.atEnd()e.moveNext ())

{

var p = e.item ()

document.write("<tr>")

document.write("<td>" + p.HostingBoard + "</td>")

document.write("<td>" + p.Manufacturer + "</td>")

document.write("<td>" + p.PoweredOn + "</td>")

document.write("<td>" + p.Product + "</td>")

document.write("<td>" + p.SerialNumber + "</td>")

document.write("<td>" + p.Version + "</td>")

document.write("</tr>")

}

document.write("</table>")

}

//-->

</script>

</head>

<body>

<INPUT id="Button1" type="button" value="Button"

name="Button1" language=javascript onclick="return Button1_onclick()">

</body>

</html>

使用javascript方式获得客户端的信息主要的优点是,不需求服务器资源.不需求刷新网页.直接在客户端执行脚本获得显示.

在这上找到了硬盘序列号的参数:

\'获得硬盘序列号

Dim cmicWmi As New System.Management.ManagementObjectSearcher(\"SELECT * FROM Win32_DiskDrive\")

Dim Uint32 As UInt32

For Each cmicWmiObj As ManagementObject In cmicWmi.Get

Uint32 = cmicWmiObj(\"signature\")

Next

TextBox1.Text = Uint32.ToString


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/699039.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-08-03
下一篇2023-08-03

发表评论

登录后才能评论

评论列表(0条)

    保存