Haproxy
Haproxy工作过程:6次TCP握手、4次NAT转换
server1端进行配置--172.25.90.1
<1>rpmbuild -tb tar zxf haproxy-1.6.11.tar.gz
yum installl pcre-devel -y ##软件依赖性
<2>cd /root/haproxy-1.6.11example
cp content-sw-sample.cfg /etc/haproxy/haproxy.cfg ##主配置文件,注意以.cfg结尾
(1)简单配置
vim 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 ##定义管理haproxy的用户id
chroot /var/lib/haproxy ##
daemon
defaults ##定义默认函数块
mode http ##采用httpd服务
log global
option httplog
option dontlognull
monitor-uri /monitoruri
maxconn 8000 ##定义最大连接数,一般会覆盖其它定义的数值
timeout client 30s
timeout connect 5s
retries 2 ##两次检查,来确定后端负载是否有故障
stats uri /admin/stats ##监控页面目录
frontend public ##定义前端函数
bind *:80 ##监听本机所有80端口
default_backend dynamic ##默认调度dynamic后端
backend dynamic
balance roundrobin ##轮询算法
server web1172.25.90.2:80 check inter 1000 ##后端负载
server web2 172.25.90.4:80 check inter 1000
stats auth admin:westos ##设置管理员及密码
stats refresh 5s ##每隔5s刷新页面
:wq
<3>mkdir /var/lib/haproxy ##创建日志存放目录
<4>开启后端负载(172.25.90.2、172.25.90.4)的httpd服务
<5>/etc/init.d/haproxy start ##启动服务
访问172.25.90.1: ##后端负载是否轮询
访问172.25.90.1/admin/stats ##访问管理页面
宕掉某个后端负载服务,haproxy管理页面会自动刷新后端负载状态,如宕掉server2端httpd服务,其显示如下,注意颜色变化:
(2)设置管理员及登录密码
1.vim /etc/rsyslog.conf
14$ModLoad imudp
15$UDPServerRun 514
42*.info;mail.none;authpriv.none;cron.none;local0.none /var/log/messages
63local0.* /var/log/boot.log
:wq
2.vim /etc/haproxy/haproxy.cfg
在简单配置的基础上,仅在defualts模块进行定义,添加内容如下:
stats auth admin:westos ##管理员admin,密码westos
:wq
3./etc/init.d/haproxy reload ##重新加载模块
3.测试,访问172.25.90.1/admin/stats,输入刚才定义的管理用户及密码即可登录管理页面
(3)动态与静态后端负载
1.配置haproxy
vim /etc/haproxy/haproxy.cfg ##配置动态与静态负载
在简单配置基础上将backend模块整体更改如下,添加静态后端模块:
backend static
balance roundrobin
server web1172.25.90.4:80 check inter 1000 ##可定义多个后端
backend dynamic
balance roundrobin
server web2172.25.90.2:80 check inter 1000
#注意forntend模块已定义:默认调度dynamic模块,所以访问结果应该只加载dynamic模块
2.为实现动态页面效果,选择在某个后端负载安装php软件(如选择server2端)
yum install php -y
vim /var/www/html/index.php ##httpd服务会先读以.php结尾的文件
phpinfo()
?> ##php函数
:wq
3./etc/init.d/haproxy reload ##重载
4.测试:访问172.25.90.1 ##不断刷新,其页面内容不变:php首页
(4)重定向后端负载??
1.vim /etc/haproxy/haproxy.cfg
在(3)的基础上仅对forntend内容修改:
frontend public
bind *:80
use_backend dynamic if {path_beg /image }
default_backend static ##默认调度static后端(即172.25.90.3---server3)
##表示当访问根目录时是以image开头的,则调度dynamic后端,即调度172.25.90.2;若不是,则默认调度static后端,即172.25.90.3
:wq
2./etc/init.d/haproxy reload ##重载
3.server2端
mkdir /var/www/html/image ##创建发布目录
4.测试:多次访问172.25.90.1;再多次访问172.25.90.1/image,对比显示内容
(5)acl控制访问
四种控制源:src:对来访地址控制(ip地址或者网段);
src_port:对端口控制;
dst:目标地址;
dst_port:目标端口
1. vim /etc/haproxy/haproxy.cfg
添加内容至“前端模块”:
frontend public
bind *:80
acl badhost src 172.25.90.250
##对172.25.90.254客户主机进行控制,定义为badhots
http-request deny if badhost
##如果访问httpd服务的是badhost,则拒绝
use_backend dynamic if { path_beg /image }
default_backend static
:wq
/etc/init.d/haproxy reload
测试:在172.25.90.254主机访问172.25.90.1 结果如下
2.另外一中控制方式,不直接显示403页面,进行错误重定向
vim /etc/haproxy/haproxy.cfg
前端模块内容显示如下:
frontend public
bind *:80
acl badhost src 172.25.90.250
http-request deny if badhost
errorloc 403 http://172.25.90.3
##badhost主机访问时,先拒绝,将http错误状态(403报错)重定向至http://172.25.90.3
use_backend dynamic if {path_beg /image }
default_backend static
:wq
/etc/init.d/haproxy reload
上述过程在server2端已下载php软件,该软件可进行上传文件,支持动态页面。如下操作可实现(server2端):
3. vim /etc/haproxy/haproxy.cfg
前端模块内容显示如下:
frontend public
bind *:80
acl badhost src 172.25.90.250
redirect location http://172.25.0.3
##当badhost访问时,不再拒绝,而是直接进行重定向
use_backend dynamic if {path_beg /image }
default_backend static
:wq
/etc/init.d/haproxy reload