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信号,这个参数放在命令行的最后

ASP NET站点中做负载均衡

基于HTTP协议我们可能发现我们要解决两点问题

第一 做到负载均衡 我们需要一个负载均衡器

可以通过DNS轮询来做 在DNS服务器上配置为每次对我们做负载均衡的同一主机名的DNS查询得到不同的IP地址 这样的好处是配置简单投入较小 缺点是浏览器访问各个服务器的机会是均等的 不能根据服务器的负载程度自动把请求路由到负载较小的服务器

可以通过专用的负载均衡设备 通过监测后台数台服务器的负载情况 自动把HTTP请求转发到负载较轻的服务器 另外必须监测后台服务器的IIS负载情况 而不是整台服务器的CPU负载 同时可能需要在负载均衡器和后台服务应用之间建立心跳连接 以避免出现某台服务器IIS进程或者其中跑的应用已经down掉 负载均衡器反而监测到这台服务器的负载最小而把大量请求转发的这台服务器 达到相反的效果

第二 Session状态的保持和迁移

由于HTTP协议的无状态性 我们一般是在Session中保存客户端的一些状态数据 负载均衡之后 前后两次HTTP请求所到达的服务器可能不是同一台 这就造成可能出现这样的情况 前一此请求处理中设置的session在第二次请求中变得不可用了 造成应用程序出错 所以我们要把session跟随迁移 实现的方法就是session的统一存储和服务器间共享

在ASP NET中服务器保存session有五种方式 Off不说了 InProc是保存在服务器进程的内存中 显然不能满足要求 另外两种能够满足

StateServer是把session保存在专门的状态服务器中 这样各台服务器都存取同一个StateServer 达到共享的目的

SQLServer是把session保存在数据库中 同样能达到目的

Custom自定制的存储方案 我们自己写当然能够实现

比较一下 Custom这种自己实现比较麻烦一般不用 SQLServer可以利用数据库的cluster达到高性能和高可用性的目的 StateServer当然也可以通过手段达到高可用性 不过似乎不能实现集群所以性能也有所限制

另外如果要做负载均衡在StateServer和SQLServer中配置session时 必须在nfig中重写machineKey节点

<machineKey

validationKey= AAAAAAAAAA

decryptionKey=

validation= SHA

decryption= Auto

/>

否则各个应用服务器拿到的session还是不一样的

lishixinzhi/Article/program/net/201311/12775


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11355718.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存