公司最近有一个项目因为用户担忧一台单机没法承担最多用户量的使用,要求上应用集群。咱们根据应用状况设计了应用集群架构。html
架构图以下:前端
部署应用集群的特色:node
1. 前端代理负载均衡redis
因用户环境基础架构采用虚拟化集群平台,服务器均采用虚拟机实现,因此设计时采用单台Haproxy来实现。bash
前端选用haproxy:有一最大的特色HTTP第7层键康状态检查,与咱们实际须要一致,因常常有应用压力大,应用没法响应的状况,正好经过这一个特性进行健康状态检查,保证用户透明访问。以前有采用haporxy的主备模式作双机主备应用集群。主备模式也是haproxy的一大特色。服务器
本方案是采用负载均衡模式采用source模式。架构
2. 应用服务器会话复制负载均衡
配置jboss 应用会话复制功能,保证用户登陆会话三台服务器共享。socket
3. 共享存储空间ide
共享存储空间是集群应用的一个必备的功能,这里采用nfs来实现。用来实现代码与附件等数据一致。
4. haproxy配置要点文件记录以下:
(1) 取消将日志记录在/var/log/messages目录中
默认会也将haproxy日志记录在/var/log/message中,要去掉。
# vi /etc/syslog.conf local3.* /var/log/haproxy.log local0.* /var/log/haproxy.log *.info;mail.none;authpriv.none;cron.none;local3.none /var/log/messages
(2) haproxy日志切割
haproyx日志切割脚本,没有现成的,就专门写了一个日志切割脚原本实现天天的日志切割,加入到计划任务中,必定要su root -c 强制root权限执行。若是要保留访问日志,能够修改脚本实现。
#!/bin/bash # author: koumm # desc: # date: 2013-01-31 # version: v1.0 # modify: # cut haproxy log mv /var/log/haproxy.log /var/log/haproxy.log.bak if [ -e /var/log/haproxy.log.bak ]; then logrotate -f /etc/logrotate.conf chown nobody:nobody /var/log/haproxy.log chmod +x /var/log/haproxy.log fi sleep 1 if [ -e /var/log/haproxy.log ]; then rm -rf /var/log/haproxy.log.bak fi
(3) haproxy配置文件记录
global log 127.0.0.1 local0 maxconn 65535 chroot /usr/local/haproxy uid 99 gid 99 stats socket /usr/local/haproxy/HaproxSocket level admin daemon nbproc 1 pidfile /usr/local/haproxy/haproxy.pid #debug defaults log 127.0.0.1 local3 mode http option httplog option httplog clf option httpclose #option dontlognull option forwardfor option redispatch retries 2 maxconn 2000 balance source #balance roundrobin stats uri /haproxy-stats stats refresh 10s contimeout 5000 clitimeout 50000 srvtimeout 50000 listen APP_Cluster 0.0.0.0:80 mode http option httpchk GET /test.html HTTP/1.0\r\nHost:192.168.0.110 server 192.168.0.111_node1 192.168.0.111:80 weight 3 check inter 2000 rise 2 fall 1 server 192.168.0.112_node2 192.168.0.112:80 weight 3 check inter 2000 rise 2 fall 1 server 192.168.0.113_node3 192.168.0.113:80 weight 3 check inter 2000 rise 2 fall 1 listen stats_auth 0.0.0.0:91 mode http stats enable stats uri /admin stats realm "LOGIN" stats auth admin:123456 #stats hide-version stats refresh 10s stats admin if TRUE