Haproxy(由C语言编写而成的)提供高可用性及负载均衡,基于TCP(四层)和HTTP(七层)的应用程序代理软件。
HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。
Haproxy可以屏蔽内部真实服务器,防止内部服务器遭受攻击。
我们可以通过官网查看配置。
注意:selinux iptables off
操作系统:Red Hat Enterprise Linux Server release 6.5 (Santiago)
百度网盘链接: https://pan.baidu.com/s/15i6LvJ1H6A1JrNvvr9mSRw 密码: vp73
主机名 | IP | 安装服务 | 功能说明 |
---|---|---|---|
server1 | 10.10.10.1 | Haproxy | 实现负载均衡 |
server2 | 10.10.10.2 | Apache | 显示WEB页面 |
server3 | 10.10.10.3 | Apache | 显示WEB页面 |
dream(真机) | 10.10.10.250 | 用于测试 |
下载地址:https://www.haproxy.org/download/
[root@server1 ~]# yum install -y gcc pcre-devel
[root@server1 ~]# yum install -y rpm-build
[root@server1 ~]# wget https://www.haproxy.org/download/1.6/src/haproxy-1.6.11.tar.gz
[root@server1 ~]# rpmbuild -tb haproxy-1.6.11.tar.gz
[root@server1 ~]# cd rpmbuild/RPMS/x86_64/
[root@server1 x86_64]# ls
haproxy-1.6.11-1.x86_64.rpm
[root@server1 x86_64]# rpm -ivh haproxy-1.6.11-1.x86_64.rpm
[root@server2 ~]# yum install -y httpd
[root@server2 ~]# echo "server2" >/var/www/html/index.html
[root@server2 ~]# /etc/init.d/httpd restart
[root@server1 ~]# tar xf haproxy-1.6.11.tar.gz
[root@server1 ~]# cp haproxy-1.6.11/examples/content-sw-sample.cfg /etc/haproxy/haproxy.cfg
[root@server1 ~]# groupadd -g 200 haproxy
[root@server1 ~]# useradd -u 200 -g 200 haproxy
[root@server1 ~]# vim /etc/haproxy/haproxy.cfg ###后面的都注释掉
global
maxconn 10000
stats socket /var/run/haproxy.stat mode 600 level admin
log 127.0.0.1 local0
uid 200
gid 200
chroot /var/empty
daemon
# The public 'www' address in the DMZ
frontend public
bind 10.10.10.1:80 ###监听IP和端口
#bind 192.168.1.10:443 ssl crt /etc/haproxy/haproxy.pem
mode http ###运行模式,可以为tcp(4层)和http(7层)
log global
option httplog ###日志类别http日志格式
option dontlognull
monitor-uri /monitoruri ###查看haproxy是否健康的URL
maxconn 8000
timeout client 30s
stats uri /admin/stats ###haproxy访问页面
#use_backend static if { hdr_beg(host) -i img }
#use_backend static if { path_beg /img /css }
default_backend static ###默认使用static模块
# The static backend backend for 'Host: img', /img and /css.
backend static
mode http
balance roundrobin ###轮询(RR)
option prefer-last-server
retries 2
option redispatch
timeout connect 5s
timeout server 5s
###负载均衡地址
server web1 10.10.10.2:80 check inter 1000
server web2 10.10.10.3:80 check inter 1000
[root@server1 ~]# /etc/init.d/haproxy restart
http://10.10.10.1/monitoruri
http://10.10.10.1/admin/stats
提示:Hapoxy也是自带健康检查当server2或者server3挂掉后,不会访问,恢复后自动加入集群!!!
[root@server1 ~]# curl 10.10.10.1
[root@server1 ~]# vim /etc/haproxy/haproxy.cfg
[root@server1 ~]# /etc/init.d/haproxy restart
http://10.10.10.1/admin/stats
刚设置的帐号密码User Name:admin Password:dream
生产使用场景:当后端服务器down了,可以使用本机来提示的作用,给用户一个好的印象。也让用户不再接着访问!!!
[root@server1 ~]# vim /etc/haproxy/haproxy.cfg
[root@server1 ~]# yum install -y httpd
[root@server1 ~]# sed -i 's#^Listen 80#Listen 8080#g' /etc/httpd/conf/httpd.conf ###由于端口被占用了,改变端口为8080
[root@server1 ~]# echo "系统维护中....." >/var/www/html/index.html
[root@server1 ~]# /etc/init.d/httpd restart
[root@server2 ~]# /etc/init.d/httpd stop
[root@server3 ~]# /etc/init.d/httpd stop
[root@server1 ~]# vim /etc/haproxy/haproxy.cfg
[root@server1 ~]# vim /etc/rsyslog.conf
加入local0.none表示不再/var/log/messages中生成日志!!!
[root@server1 ~]# /etc/init.d/rsyslog restart
acl [flags] [operator] [] ...
[root@server1 ~]# vim /etc/haproxy/haproxy.cfg
[root@server1 ~]# /etc/init.d/haproxy restart
[root@dream ~]# curl 10.10.10.1
可以发现真机访问被拒绝,而其它访问正常!!!
1. 通过errorloc配置
<1> 修改haproxy.cfg
[root@server1 ~]# vim /etc/haproxy/haproxy.cfg
<2> 查看结果
自动跳转访问10.10.10.1的8080端口!!!
[root@server1 ~]# /etc/init.d/haproxy restart
[root@dream ~]# curl -I 10.10.10.1
2. 通过redirect配置
<1> 配置haproxy.cfg
[root@server1 ~]# vim /etc/haproxy/haproxy.cfg
<2> 查看结果
[root@server1 ~]# /etc/init.d/haproxy restart
[root@dream ~]# curl -I 10.10.10.1
[root@server1 ~]# vim /etc/haproxy/haproxy.cfg
[root@server1 ~]# /etc/init.d/haproxy restart
[root@server2 ~]# mkdir -p /var/www/html/backend
[root@server2 ~]# echo backend >/var/www/html/backend/index.html
[root@server3 ~]# yum install -y php
[root@server3 ~]# vim /var/www/html/index.php
[root@server3 ~]# /etc/init.d/httpd restart
默认访问到php动态网页,加上backend访问到server2的backend目录!!!
http://10.10.10.1/
http://10.10.10.1/backend/