利用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
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)