haproxy


Haproxy:是反向代理服务器的负载均衡,拥有不错的服务器健康检查功能,当其后端的的代理服务器出现故障时。Haproxy会自动去除该服务,故障服务后在自动运行该服务。HAProxy支持两种主要的代理模式:"tcp"也即4层(大多用于邮件服务器、内部协议通信服务器等),和7层(HTTP)。在4层模式 下,HAProxy仅在客户端和服务器之间转发双向流量。7层模式下,HAProxy会分析协议,并且能通过允许、拒绝、交换、增加、修改或者删除请求 (request)或者回应(response)里指定内容来控制协议,这种操作要基于特定规则。

 

可以用rpm安装方式,也可以源码编译。

软件下载:http://haproxy.1wt.eu/

rpm 包方式:

rpmbuild -tb haproxy-1.4.23.tar.gz

rpm -ivh /root/rpmbuild/RPMS/x86_64/haproxy-1.4.23-1.x86_64.rpm

 

此实验是用源码编译:

实验主机 server5 haproxy

         Server6 web1

      Server7 web2

需要的包:

haproxy-1.4.24.tar.gz

[root@server5 ~]# tar zxfhaproxy-1.4.24.tar.gz

编译成二进制文件包。发现找不到rpmbuild说明没有装rpmbuild

wKiom1eaIHuDHXt7AAAVam82nKM941.png

[root@server5 ~]# yum install rpm-build -y

[root@server5 ~]# rpmbuild -tbhaproxy-1.4.24.tar.gz 编译失败,缺什么程序就下什么程序

wKiom1eaINDCPuURAAAqU2tXbCo818.png

[root@server5 ~]# yum install pcre-devel -y

[root@server5 ~]# rpmbuild -tbhaproxy-1.4.24.tar.gz 

haproxy_第1张图片

这样就编译成功。

编译成的二进制文件一般都在 /root/rpmbuild/RPMS/x86_64里

 

[root@server5 x86_64]# rpm -ivhhaproxy-1.4.24-1.x86_64.rpm

[root@server5 x86_64]# cd /etc/haproxy/

[root@server5 haproxy]# ls  生成一个haproxy配置文件

Haproxy.cfg

 [root@server5 haproxy]# vim haproxy.cfg

 1 #this config needs haproxy-1.1.28 or haproxy-1.2.1

  2

  3global

 4         log 127.0.0.1   local0

 5         log 127.0.0.1   local1 notice

 6         #log loghost    local0 info

 7         maxconn 4096

 8         chroot/usr/share/haproxy

 9         uid 99

 10        gid 99

 11        daemon

 12        #debug

 13        #quiet

 14

 15defaults

 16        log     global

 17        mode    http

 18        option  httplog

 19        option  dontlognull

 20        retries 3

 21        option redispatch

 22        maxconn 2000

 23        contimeout      5000    连接超时

 24        clitimeout      50000     客户端连接超时

 25        srvtimeout      50000     服务端连接超时

 27listen  westos *:80                  监听的实例名称,地址和端口

 28        balance roundrobin         负载均衡算法

 29        server web1 172.25.137.6 check inter 2000 rise 2 fall 3

 30        server web2 172.25.137.7 check inter 2000 rise 2 fall 3

check inter   检测心跳   rise 2连接2次正确认为服务器可用 

fall 3  连接3次认为连接失败 web1只是一个名称

 

Server6和server7的阿帕奇服务要开

wKiom1eaIRvQ1B3-AAA77QDog3g342.png

当haproxy启动失败是没有/usr/shre/haproxy这个目录

[root@server5 share]# mkdir/usr/share/haproxy

再次启动服务

haproxy_第2张图片

haproxy_第3张图片

这样一个负载均衡就做出来了。

在配置文件还可以加

26        stats uri /status    haproxy监控页面

还要把阿帕奇的端口改为8080,因为haproxy用的是80端口

haproxy_第4张图片

 29     server web1 172.25.137.6 check inter 2000 rise 2 fall 3 weight 5

 30     serverweb2 172.25.137.7 check inter 2000 rise 2 fall 3  weight 1

 31     server backup 127.0.0.1:8080 backup

Weight 是权重,表现在页面上是server6上刷5次之后在刷server7上刷一次。

后台检测当web1和2的服务都停止的时候本地就开始接管,当web1和2正常运行时他就不会出现在前台页面

haproxy_第5张图片

web12服务停止时

haproxy_第6张图片

haproxy_第7张图片

28         acl badhost src 172.25.137.250 只要是通过这个ip访问都会被禁止。

 29        block if badhost

Acl :访问控制列表是用来控制端口进出数据包,acl适用于所有的路由协议,例如:IP,IPX等。


haproxy_第8张图片

30       errorloc 403 http://172.25.137.5:8080  就上述的错误重定向在本地的http服务

haproxy_第9张图片


[root@server5 haproxy]# vim /var/www/html/index.htm

wKioL1eaI-2xUPFPAAAQylhG138378.png

[root@server5 haproxy]# /etc/init.d/httpd restart

haproxy_第10张图片

为了给用户呈现一个美感有必要写一个页面。

动静分离

Server6需要写一个php测试页(动态)

Vim /var/www/html/index.php

wKiom1eaJEXhcP1SAAAKSwd63jI646.png


[root@server6 ~]# /etc/init.d/httpd restart

 

Server7 需要在/var/www/html/目录里见一个p_w_picpaths目录存照片文档之类的。

[root@server7 html]# mkdir p_w_picpaths

[root@server7 html]# ls

p_w_picpaths index.html

吴彦祖.jpeg

[root@server7 html]# cd p_w_picpaths/

[root@server7 p_w_picpaths]# ls

[root@server7 p_w_picpaths]# ls

32        acl url_static path_beg -i /p_w_picpaths

33        acl url_static path_end -i .jpg$ .png$ .jpeg$ .gif$  静态服务器支持的图片类型

35        use_backend group2 if url_static  如果是静态就在group2上否则是group1

 36        default_backend group1

[root@server5 haproxy]# /etc/init.d/haproxyreload

动态

haproxy_第11张图片

静态

haproxy_第12张图片

读写分离:

Server6

需要这两个php文件 在upload_file.php里有限定上传图片的大小

haproxy_第13张图片

Server7

[root@server7 upload]# yum install php -y

[root@server7 html]# ls

p_w_picpaths index.html  index.php  upload_file.php   在upload_file.php里有限定上传图片的大小

 

[root@server7 html]# mkdir upload  这个目录是上传图片的保存位置

[root@server7 html]# chmod -R 777/var/www/html/upload

haproxy_第14张图片

haproxy_第15张图片


这是上传保存的位置

wKioL1eaJd6jvcrGAAAP0GmIe7I628.png