天天看点

Haproxy负载均衡集群架构设计一例

公司最近有一个项目由于用户担心一台单机无法承担最多用户量的使用,要求上应用集群。我们根据应用情况设计了应用集群架构。

架构图如下:

Haproxy负载均衡集群架构设计一例

部署应用集群的特点:

1. 前端代理负载均衡

因用户环境基础架构采用虚拟化集群平台,服务器均采用虚拟机实现,所以设计时采用单台haproxy来实现。

前端选用haproxy:有一最大的特点http第7层键康状态检查,与我们实际需要一致,因经常有应用压力大,应用无法响应的情况,正好通过这一个特性进行健康状态检查,保证用户透明访问。之前有采用haporxy的主备模式做双机主备应用集群。主备模式也是haproxy的一大特点。

本方案是采用负载均衡模式采用source模式。

2. 应用服务器会话复制

配置jboss 应用会话复制功能,保证用户登录会话三台服务器共享。

3. 共享存储空间

共享存储空间是集群应用的一个必备的功能,这里采用nfs来实现。用来实现代码与附件等数据一致。

4. haproxy配置要点文件记录如下:

(1) 取消将日志记录在/var/log/messages目录中

默认会也将haproxy日志记录在/var/log/message中,要去掉。

1

2

3

4

<code># vi /etc/syslog.conf</code>

<code>local3.*                       /</code><code>var</code><code>/log/haproxy.log</code>

<code>local0.*                       /</code><code>var</code><code>/log/haproxy.log</code>

<code>*.info;mail.none;authpriv.none;cron.none;local3.none      /</code><code>var</code><code>/log/messages</code>

(2) haproxy日志切割

haproyx日志切割脚本,没有现成的,就专门写了一个日志切割脚本来实现每天的日志切割,加入到计划任务中,一定要su root -c 强制root权限执行。如果要保留访问日志,可以修改脚本实现。

5

6

7

8

9

10

11

12

13

14

15

16

17

<code>#!/bin/bash</code>

<code># author: koumm</code>

<code># desc:</code>

<code># date: </code><code>2013</code><code>-</code><code>01</code><code>-</code><code>31</code>

<code># version: v1.</code><code>0</code>

<code># modify:</code>

<code># cut haproxy log</code>

<code>mv /</code><code>var</code><code>/log/haproxy.log /</code><code>var</code><code>/log/haproxy.log.bak</code>

<code>if</code> <code>[ -e /</code><code>var</code><code>/log/haproxy.log.bak ]; then</code>

<code>logrotate -f /etc/logrotate.conf</code>

<code>chown nobody:nobody /</code><code>var</code><code>/log/haproxy.log</code>

<code>chmod +x /</code><code>var</code><code>/log/haproxy.log</code>

<code>fi</code>

<code>sleep </code><code>1</code>

<code>if</code> <code>[ -e /</code><code>var</code><code>/log/haproxy.log ]; then</code>

<code>rm -rf /</code><code>var</code><code>/log/haproxy.log.bak</code>

(3) haproxy配置文件记录

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

<code>global</code>

<code>log    </code><code>127.0</code><code>.</code><code>0.1</code>   <code>local0</code>

<code>maxconn </code><code>65535</code>

<code>chroot /usr/local/haproxy</code>

<code>uid </code><code>99</code>

<code>gid </code><code>99</code>

<code>stats socket /usr/local/haproxy/haproxsocket level admin</code>

<code>daemon</code>

<code>nbproc </code><code>1</code>

<code>pidfile /usr/local/haproxy/haproxy.pid</code>

<code>#debug</code>

<code>defaults</code>

<code>log    </code><code>127.0</code><code>.</code><code>0.1</code>    <code>local3</code>

<code>mode   http</code>

<code>option httplog</code>

<code>option httplog clf</code>

<code>option httpclose</code>

<code>#option dontlognull</code>

<code>option forwardfor</code>

<code>option redispatch</code>

<code>retries </code><code>2</code>

<code>maxconn </code><code>2000</code>

<code>balance source</code>

<code>#balance roundrobin</code>

<code>stats   uri     /haproxy-stats</code>

<code>stats   refresh 10s</code>

<code>contimeout      </code><code>5000</code>

<code>clitimeout      </code><code>50000</code>

<code>srvtimeout      </code><code>50000</code>

<code>listen  app_cluster </code><code>0.0</code><code>.</code><code>0.0</code><code>:</code><code>80</code>

<code>mode http</code>

<code>option httpchk get /test.html http/</code><code>1.0</code><code>\r\nhost:</code><code>192.168</code><code>.</code><code>0.110</code>

<code>server </code><code>192.168</code><code>.</code><code>0</code><code>.111_node1  </code><code>192.168</code><code>.</code><code>0.111</code><code>:</code><code>80</code> <code>weight </code><code>3</code> <code>check inter </code><code>2000</code> <code>rise </code><code>2</code> <code>fall </code><code>1</code>

<code>server </code><code>192.168</code><code>.</code><code>0</code><code>.112_node2  </code><code>192.168</code><code>.</code><code>0.112</code><code>:</code><code>80</code> <code>weight </code><code>3</code> <code>check inter </code><code>2000</code> <code>rise </code><code>2</code> <code>fall </code><code>1</code>

<code>server </code><code>192.168</code><code>.</code><code>0</code><code>.113_node3  </code><code>192.168</code><code>.</code><code>0.113</code><code>:</code><code>80</code> <code>weight </code><code>3</code> <code>check inter </code><code>2000</code> <code>rise </code><code>2</code> <code>fall </code><code>1</code>

<code>listen  stats_auth </code><code>0.0</code><code>.</code><code>0.0</code><code>:</code><code>91</code>

<code>mode  http</code>

<code>stats enable</code>

<code>stats uri  /admin</code>

<code>stats realm </code><code>"login"</code>

<code>stats auth  admin:</code><code>123456</code>

<code>#stats hide-version</code>

<code>stats refresh 10s</code>

<code>stats admin </code><code>if</code> <code>true</code>

继续阅读