版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Dream_ya/article/details/81543619
一、Haproxy介绍
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 | 用于测试 |
三、Haproxy安装
1、解决依赖(使用rpmbuild安装)
[root@server1 ~]# yum install -y gcc pcre-devel
2、使用rpmbuild建立rpm包
[root@server1 ~]# yum install -y rpm-build
[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
四、安装Apache(server2、3)
1、安装Apache
[root@server2 ~]# yum install -y httpd
2、建立发布文件和启动
[root@server2 ~]# echo "server2" >/var/www/html/index.html
[root@server2 ~]# /etc/init.d/httpd restart
五、配置Haproxy
1、复制配置文件
[root@server1 ~]# tar xf tar xf haproxy-1.6.11.tar.gz
[root@server1 ~]# cp /root/haproxy-1.6.11/examples/content-sw-sample.cfg /etc/haproxy/haproxy.cfg
2、配置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
3、测试
(1)查看URL
http://10.10.10.1/monitoruri
http://10.10.10.1/admin/stats
(2)查询轮询效果
提示:Hapoxy也是自带健康检查当server2或者server3挂掉后,不会访问,恢复后自动加入集群!!!
[root@server1 ~]# curl 10.10.10.1
4、加密haproxy访问页面
(1)修改haproxy.cfg 配置
[root@server1 ~]# vim /etc/haproxy/haproxy.cfg
[root@server1 ~]# /etc/init.d/haproxy restart
(2)测试
http://10.10.10.1/admin/stats
刚设置的帐号密码User Name:admin Password:dream
5、配置Backup
生产使用场景:当后端服务器down了,可以使用本机来提示的作用,给用户一个好的印象。也让用户不再接着访问!!!
(1)修改配置文件haproxy.cfg
[root@server1 ~]# vim /etc/haproxy/haproxy.cfg
(2)安装httpd
[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
(3)测试
[root@server2 ~]# /etc/init.d/httpd stop
[root@server3 ~]# /etc/init.d/httpd stop
6、开启日志记录功能
(1)配置文件位置
[root@server1 ~]# vim /etc/haproxy/haproxy.cfg
(2)配置日志
[root@server1 ~]# vim /etc/rsyslog.conf
加入local0.none表示不再/var/log/messages中生成日志!!!
[root@server1 ~]# /etc/init.d/rsyslog restart
(3)查看生成日志
六、配置ACL规则
1、ACL语法介绍
acl <aclname> <criterion> [flags] [operator] [<value>] ...
- aclname:制定acl的名称,区分大小写,可以多个acl制定同一个aclname,表示“或“的逻辑。
- criterion:获取样本方法,检查方法;例如:src、src_port、dst、dst_port。
- flags:可选项,表示标识位。常用“-i“,不区分大小。
- operator:可选项,操作符:“eq“、“ge“、“gt“、“le“、“lt“。
- value:根据criterion不同,值的类型不同。
2、SRC规则实现访问控制
(1)拒绝访问配置
[root@server1 ~]# vim /etc/haproxy/haproxy.cfg
(2)查看结果
[root@server1 ~]# /etc/init.d/haproxy restart
[root@dream ~]# curl 10.10.10.1
可以发现真机访问被拒绝,而其它访问正常!!!
(3)配置重定向(二种)
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
3、动静分离
(1)通过use_backend进行配置
[root@server1 ~]# vim /etc/haproxy/haproxy.cfg
[root@server1 ~]# /etc/init.d/haproxy restart
(2)配置backend默认发布目录
[root@server2 ~]# mkdir -p /var/www/html/backend
[root@server2 ~]# echo backend >/var/www/html/backend/index.html
(3)安装php(server3)
[root@server3 ~]# yum install -y php
[root@server3 ~]# vim /var/www/html/index.php
<?php
phpinfo()
?>
[root@server3 ~]# /etc/init.d/httpd restart
(4)查看结果
默认访问到php动态网页,加上backend访问到server2的backend目录!!!
http://10.10.10.1/
http://10.10.10.1/backend/