Haproxy是目前比较流行的一种群集调度工具,同类群集调度工具有很多,如LVS和Nginx。相比较而言,LVS性能最好,但是搭建相对复杂,Nginx的upstream模块支持群集功能,但是对群集节点的健康检查功能不强,性能没有Haproxy好。

1

2

本次实验配置;

服务器主机                                     IP                                安装软件                                 系统

Haproxy调度服务器             192.168.30.55                   haproxy-1.5.19.tar.gz                 CentOS7

Nginx节点服务器web1          192.168.30.15                   nginx-1.12.0.tar.gz                     RedHat6.5

Nginx节点服务器web2          192.168.30.99                   nginx-1.12.0.tar.gz                     RedHat6.5

测试客户端                         192.168.30.20                   IE浏览器用于测试结果                      windows7

百度云盘免费源码包:

https://pan.baidu.com/s/1NKKuqYQDiQBxrbRA39H9-w

https://pan.baidu.com/s/1k2VyWSpZ7D4D-PLwUZPFLA

简单实验拓扑图;


 3

实验步骤;

安装配置Nginx节点服务器(两台节点服务器安装基本相同,需编辑不同测试网页文档便于检测实验结果)

 



4

yum -y install gcc gcc-c++ pcre-devel  zlib-devel          #安装编译环境依赖包

tar xzvf nginx-1.12.0.tar.gz -C /opt               #将事先准备的nginx源码包解压到/opt目录下

cd /opt/nginx-1.12.0/

useradd -M -s /sbin/nologin nginx                  #为nginx服务创建独立用户

./configure \                                              

--prefix=/usr/local/nginx \

--user=nginx \

--group=nginx \

--with-http_stub_status_module                

make && make install                                  #配置编译安装

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin           #创建软链接方便管理nginx服务

nginx                                  #启动nginx服务

编辑节点服务器web1测试页面

echo “<h1>this is web 1</h1>”>/usr/local/nginx/html/index.html  

编辑节点服务器web2测试页面

echo “<h1>this is web 2</h1>”>/usr/local/nginx/html/index.html 

service iptables stop

setenforce 0

安装配置haproxy调度服务器

yum -y install gcc gcc-c++ bzip2-devel pcre-devel            #安装haproxy编译环境依赖包

systemctl stop firewalld.service

setenforce 0

tar zxvf haproxy-1.5.19.tar.gz -C /opt                          #将事先准备的源码包解压到/opt目录下

cd /opt/haproxy-1.5.19/

make TARGET=linux26         #64位系统

make install

mkdir /etc/haproxy              #创建haproxy配置文件

cp examples/haproxy.cfg /etc/haproxy/

vim /etc/haproxy/haproxy.cfg

............

#       chroot /usr/share/haproxy             #行首加“#”注释掉这行参数设定,

........

#       redispatch                                    #行首加“#”注释掉这行参数设定,

2

用下面的listen配置项替换掉配置文件里原来所有的listen配置项。

listen  webcluster 0.0.0.0:80                  #定义一个webcluster应用,允许任意客户端进行访问80端口
        option  httpchk GET /index.html     #检查web服务器的index.html文档
        balance roundrobin                       #负载均衡调度使用轮询机制
        server  inst1 192.168.30.15:80 check inter 2000 fall 3             #加入节点服务器web1
        server  inst2 192.168.30.99:80 check inter 2000 fall 3             #加入节点服务器web2

3

优化操作, 使用系统服务管理,创建自启动

cp examples/haproxy.init /etc/init.d/haproxy

chmod 755 /etc/init.d/haproxy

chkconfig --add haproxy

ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy

service haproxy start

4

测试Haprox y负载均衡功能

通过上面的步骤,已经搭建完成Haproxy的web群集,接下来需要验证群集是否工作正常,一个群集一般需要具备两个特性;(1)高性能;(2)高可用

5

(1)测试 高性能

在客户端浏览器输入http://192.168.30.55/进行访问,不断刷新,可以看到两个web服务的测试页面不断进行转换。说明web群集的负载均衡调度已经生效,已经满足了群集的高性能需求。

5

6

(2)测试高可用

现在将节点服务器web1的nginx服务关掉,在客户端使用浏览器打开http://192.168.30.55/进行访问,只能看到节点服务器web2的测试网页,

由此可以看出,当一台节点出现故障,不会影响群集的使用,这样就满足了群集的可用性。

6 

 

Haproxy的日志分离

Haproxy的日志默认输出到系统的syslog中,查看起来不是很方便,为了更好地管理haproxy的日志,我们在生产环境中一般单独定义出来,定义的方法如下所述。

(1)修改haproxy配置文件中关于日志配置的选项,加入下面的配置

vim /etc/haproxy/haproxy.cfg

log /dev/log local0 info

log /dev/log local0 notice

7

将这两行 配置加入到haproxy配置文件的global配置项目中,主要是将haproxy的info及notice日志分别记录到不同的日志文件中

service haproxy restart    #重启服务

(2)修改rsyslog配置

为了便于管理,将haproxy相关的配置独立定义到haproxy.conf,并放到/etc/rsyslog.d目录下,rsyslog启动时会自动加载此目录下的所有配置文件

touch /etc/rsyslog.d/haproxy.conf

vim /etc/rsyslog.d/haproxy.conf

加入下面内容

if ($programname == 'haproxy' and $syslogseverity-text == 'info')
then -/var/log/haproxy/haproxy-info.log
& ~
if ($programname == 'haproxy' and $syslogseverity-text == 'notice')
then -/var/log/haproxy/haproxy-notice.log
& ~

这部分配置是将haproxy的info日志记录到/var/log/haproxy/haproxy-info.log下,将notice日志记录到/var/log/haproxy/haproxy-notice.log下,其中“&~”表示当日志写入到日志文件后,rsyslog停止处理这个信息。这里配置的语法是使用rainerscript脚本语言写的

systemctl restart rsyslog.service     #重启rsyslog服务,完成rsyslog配置

(3)测试日志信息

在客户端访问http://192.168.30.55/后,查看/var/log/haproxy/haproxy-info.log内容,可以即时查看haproxy的访问请求日志信息

cd /var/log/haproxy

cat haproxy-info.log

8