配置Haproxy

一、安装Haproxy

Haproxy的安装非常简单,从以下网址下载源码文件进行编译安装即可:

http://haproxy.1wt.eu/

然后解压缩源码包,我下载的是1.4.9的版本:

  1. tar -zxvf haproxy-1.49.tar.gz  
  2. cd haproxy-1.4.9
  3. make TARGET=linux26 PREFIX=/haproxy 
  4. make install PREFIX=/haproxy

这样就安装好了。
我的Haproxy的配置文件haproxy.cfg的内容为:

1 global
2 log 127.0.0.1 local3
3 #log 127.0.0.1 local1 notice
4 #log loghost local0 info
5 maxconn 4096
6 #chroot /usr/local/haproxy
7 #chroot /home/haproxy
8 uid 502
9 gid 502
10 daemon
11 nbproc 1
12 pidfile /home/haproxy/logs/haproxy.pid
13 #debug
14 #quiet
15
16 defaults
17 log global
18 mode http
19 option httplog
20 option dontlognull
21 option forwardfor
22 option redispatch
23 log 127.0.0.1 local3
24 retries 3
25 maxconn 32000
26 balance roundrobin
27 stats uri /haproxy-stats
28 contimeout 5000
29 clitimeout 50000
30 srvtimeout 50000
31
32 listen web_proxy *:80
33 appsession JSESSIONID len 52 timeout 3h
34 cookie SRV insert indirect nocache
35 mode http
36 stats enable
37 stats hide-version
38 stats uri /haproxy-stats
39 stats refresh 10s
40 monitor-uri /haproxy_test
41 balance roundrobin
42 option httpclose
43 option forwardfor
44 option httpchk HEAD /index.html HTTP/1.0
45 #option httpchk GET /ping.jsp
46 #server webA 10.1.29.1:80 cookie A check
48 #server webB 10.1.29.3:80 cookie B check
49 server webC 10.1.29.1:80 cookie C check
50 listen web_proxy_2 *:1080
51 balance roundrobin
52 option forwardfor
53 option ssl-hello-chk
54 stats enable
55 stats hide-version
56 stats uri /haproxy-stats
57 stats refresh 10s
58 monitor-uri /haproxy_test
59 option httpchk HEAD /index.html HTTP/1.0
60 server webD 10.1.29.25:1080 cookie D check

 

启动 haproxy:

sbin/haproxy -f haproxy.cfg

可以打开 stats 看,http://10.1.29.3/haproxy-stats, 如:

如果修改 haproxy.cfg 配置,想重启 haproxy 用 kill -HUP `cat logs/haproxy.pid` 是不行的。必须使用 -sf 或 -st 参数,如:

sbin/haproxy -f haproxy.cfg -st `cat /home/haproxy/logs/haproxy.pid`

另外网上的一些设置log的方法基本都不行。

二、安装heartbeat

heartbeat依赖于一系列软件包,安装heartbeat前要先安装这些软件包:

  • A C compiler (typically gcc) and associated C development libraries;
  • the flex scanner generator and the bison parser compiler;
  • net-snmp development headers, to enable SNMP related functionality;
  • OpenIPMI development headers, to enable IPMI related functionality;
  • Python (just the language interpreter, not library headers)
  • the cluster-glue development headers.

其中cluster-glue是从源码编译的,下载地址为:http://linux-ha.org/wiki/Downloads

解压缩后执行以下命令进行编译和安装:

$ ./autogen.sh

$ ./configure

$  make

$  make install

在编译时会遇到一个警告式的错误:函数声明不是一个原型。定位后会发现version()函数的参数为空,自己加一个void参数,再编译就好了。

 

安装好cluster-glue后,编译heartbeat,下载地址同上。编译方法为:

$ ./bootstrap

$ ./ConfigureMe configure

$  make

$  make install

这两个过程写doc文件夹中的文件的时间都很长,不知道在写什么。

编译heartbeat时,make最后阶段写doc时报错,但我直接make install了,出现了两个可以忽略的错误(glue中也出现了一个这样的错误)。其原因是要创建haclient用户组和haserver用户,再进行编译安装,一切正常。

安装好后进行启动,问题又来了,就是shellfunc文件没有创建,我对比了ubuntu上直接安装的heartbeat,此文件是创建好了的。cp过来修改了一下启动还是有问题,索性决定直接用rpm包安装。搜了一下,找到了一个地址:

http://www.clusterlabs.org/rpm/epel-5/x86_64/

两台机器下载安装都很正常。然后编辑/etc/sysctl.conf,加入如下选项:

#Allow Haproxy shared IP

net.ipv4.ip_nonlocal_bind = 1

运行sysctl -p

接下来就是配置各个文件了,切换到/etc/ha.d目录。首先在lb1和lb2(lb即load blance的缩写)上都创建authkeys文件:

 

1 auth 3
2  3 md5 password

其中password需要自己设置,是两台机器之间进行认证的密码。创建完成后利用chmod 600 authkeys命令修改文件访问权限,保证只有root用户可以读写。

 

然后在lb1和lb2上创建haresources文件:

 

1 lm 10.1.29.9

其中lm是运行uname -n命令得到的主机名,这个主机名可以在/etc/sysconfig/network中修改,修改后需要重启。而主机名后面的ip地址为虚拟ip,是lb1和lb2共享的ip地址。

 

最后在lb1和lb2上创建ha.cf文件:

 

1 #
2 # keepalive: how many seconds between heartbeats
3 #
4  keepalive 2
5  #
6 # deadtime: seconds-to-declare-host-dead
7 #
8  deadtime 10
9  #
10 # What UDP port to use for udp or ppp-udp communication?
11 #
12  udpport 694
13 bcast br0
14 mcast br0 225.0.0.1 694 1 0
15 ucast br0 10.1.29.3
16  # What interfaces to heartbeat over?
17 udp eth0
18 #
19 # Facility to use for syslog()/logger (alternative to log/debugfile)
20 #
21 logfacility local3
22 #
23 # Tell what machines are in the cluster
24 # node nodename ... -- must match uname -n
25 node cc
26 node lm

其中我们要修改的就是接口和ip以及主机名。因为我的环境用的是桥接,所以设置是br0,ip为自己的ip(某些文章介绍是对方lb的ip),node后面的名称为uname -a得到的host name。

这样两台主备haproxy就配置好了。首先启动两台机器上的heartbeat:

/etc/init.d/heartbeat start

然后在lb1运行ip addr sh br0可以看到的显示内容如下:

 

[root@cc ha.d]# ip addr sh br0
5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue
link
/ether d8:5d:4c:74:ee:e8 brd ff:ff:ff:ff:ff:ff
inet
10.1.29.3/16 brd 10.1.255.255 scope global br0
inet6 fe80
::da5d:4cff:fe74:eee8/64 scope link
valid_lft forever preferred_lft forever

同样在lb2上运行ip addr sh br0:

 

[root@lm haproxy]# ip addr sh br0
4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue
link
/ether e0:cb:4e:b8:19:16 brd ff:ff:ff:ff:ff:ff
inet
10.1.29.1/16 brd 10.1.255.255 scope global br0
inet
10.1.29.9/16 brd 10.1.255.255 scope global secondary br0:0
inet6 fe80
::e2cb:4eff:feb8:1916/64 scope link
valid_lft forever preferred_lft forever

这说明主机lb2进行代理工作,而备机lb1处于监听状态。然后拔掉主机lb1的网线,此时备机接替主机的工作成为服在均衡代理服务器,运行以上命令:

 

[root@cc ha.d]# ip addr sh br0
5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue
link
/ether d8:5d:4c:74:ee:e8 brd ff:ff:ff:ff:ff:ff
inet
10.1.29.3/16 brd 10.1.255.255 scope global br0
inet
10.1.29.9/16 brd 10.1.255.255 scope global secondary br0:0
inet6 fe80
::da5d:4cff:fe74:eee8/64 scope link
valid_lft forever preferred_lft forever

 

 

 

这说明备机lb2已经接替了主机lb1的工作。我们再将主机lb1的网线插上,运行以上命令:

 

 

[root@lm haproxy]# ip addr sh br0
4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue
link
/ether e0:cb:4e:b8:19:16 brd ff:ff:ff:ff:ff:ff
inet
10.1.29.1/16 brd 10.1.255.255 scope global br0
inet
10.1.29.9/16 brd 10.1.255.255 scope global secondary br0:0
inet6 fe80
::e2cb:4eff:feb8:1916/64 scope link
valid_lft forever preferred_lft forever
[root@cc ha.d]# ip addr sh br0
5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue
link
/ether d8:5d:4c:74:ee:e8 brd ff:ff:ff:ff:ff:ff
inet
10.1.29.3/16 brd 10.1.255.255 scope global br0
inet6 fe80
::da5d:4cff:fe74:eee8/64 scope link
valid_lft forever preferred_lft forever

说明主机和备机已经各自恢复。以上说明heartbeat运行正常。

 

然后在两台机器上运行haproxy,这样带有ha功能的haproxy就配置好了。

 

http://www.oschina.net/bbs/thread/4090

posted @ 2010-11-17 16:13  chinacloud  阅读(5859)  评论(0编辑  收藏  举报