安装:
共有三种方式安装haproxy:
方式一:yum install -y haproxy.x86_64
方式二:
get haproxy-1.6.11.tar.gz
tar zxf haproxy-1.6.11.tar.gz
less README #查看文档来安装
make TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 PREFIX=/usr/local/haproxy #编译
make TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 PREFIX=/usr/local/haproxy install #安装
#找到配置文件模板
cp /root/haproxy-1.6.11/examples/content-sw-sample.cfg /etc/haproxy/
cd /etc/haproxy
mv content-sw-sample.cfg haproxy.cfg
方式三:
cp /root/haproxy-1.6.11.tar.gz /root/rpmbuild/SOURCES
cd /root/haproxy-1.6.11/examples/
rpmbuild -bb haproxy.spec
cd rpmbuild/RPMS/x86_64/
[root@server1 x86_64]# ls
haproxy-1.6.11-1.x86_64.rpm
rpm -ivh haproxy-1.6.11-1.x86_64.rpm
#和上面一样获取配置文件
cat /etc/sysconfig/network #查看network是否为yes
修改配置文件如下:
global #全参数的设置
maxconn 65535 #设置最大连接数
stats socket /var/run/haproxy.stat mode 600 level admin
log 127.0.0.1 local0 #全局的日志配置
uid 200
gid 200
chroot /var/empty #改变当前的工作目录
daemon #以守护进程的方式运行haproxy
defaults
mode http #默认的模式(tcp/http/health),tcp是四层,http是7层,health只会返回ok
log global #应用全局的日志配置
option httplog #应用日志记录http请求,默认haproxy不会记录http请求日志
option dontlognull#启用该项,日志将不会记录空连接
monitor-uri /monitoruri
maxconn 8000
timeout client 30s
#bind 192.168.1.10:443 ssl crt /etc/haproxy/haproxy.pem
bind 172.25.92.100:80 name clear #监听主机和端口
acl bad src 172.25.92.250
acl read method GET
acl read method HEAD
acl write method PUT
acl write method POST
#http-request deny if bad
#errorloc 403 http://172.25.92.9:80
#redirect location http://172.25.92.9:80
#use_backend static if { hdr_beg(host) -i img }
#use_backend static if { path_beg /img /css }
#use_backend dynamic if { path_end .php }
#use_backend dynamic if { path_beg /images }
use_backend static if write
default_backend dynamic
# The static backend backend for 'Host: img', /img and /css.
backend dynamic
balance roundrobin
server web1 172.25.92.2:80 check inter 1000
server web2 172.25.92.3:80 check inter 1000
根据配置文件需要设置haproxy的最大并发链接数:
和nginx相同,从三个层面设置:
内核层面:
[root@server1 haproxy]# sysctl -a | grep file
fs.file-nr = 544 0 188465
fs.file-max = 188465 #此处内核所支持的最大连接数已满足
如果不满足需要修改配置文件:
vim /etc/sysctl.conf
7 net.ipv4.ip_forward = 1 #开启内核路由功能
系统层面:
vim /etc/security/limits.conf #最后一行添加
haproxy - nofile 65535
应用层面:
vim /etc/haproxy/haproxy.cfg
最大连接设置为65535
配置负载均衡:
default_backend dynamic
# The static backend backend for 'Host: img', /img and /css.
backend dynamic
balance roundrobin
server web1 172.25.92.2:80 check inter 1000
server web2 172.25.92.3:80 check inter 1000
测试:
server2和server3上均开启apache服务:
可以看见以轮询的方式访问server2和server3!
在浏览器查看后端主机的情况并添加访问控制:
vim /etc/haproxy/haproxy.cfg
添加内容如下:
/etc/init.d/haproxy restart
在浏览器访问:
可以通过图形街界面查看后端主机的健康状况。
日志配置:
vim /etc/rsyslog.conf
13 $ModLoad imudp
14 $UDPServerRun 514
42*.info;mail.none;authpriv.none;cron.none;local0.none; /var/log/mes sages
62 local0.* /var/log/haproxy.log
/etc/init.d/rsyslog restart
日志查看:
添加访问控制
172.25.254.92主机在浏览器端就不能访问:172.25.92.1了
所以对限制访问的主机添加提示页面:错误访问时重定向:
如果遇见403的错误代码就重定向
[root@server1 haproxy]# vim haproxy.cfg
[root@server1 haproxy]# vim /var/www/html/index.html
error
[root@server1 haproxy]# /etc/init.d/httpd start
测试:访问时会跳转到172.25.92.1:8080/index.html
直接重定向:
vim /etc/haproxy/haproxy.cfg
动静分离
[root@server1 haproxy]# vim haproxy.cfg
server2上:
[root@server2 ~]# cd /var/www/html/
[root@server2 html]# ls
index.html
[root@server2 html]# cat index.html
sesrver2
server3上:
[root@server3 html]# ls
index.php
[root@server3 html]# cat index.php
<?php
phpinfo()
?>
测试:
即实现了动静分离访问。
上传下载分离:
vim /etc/haproxy/haproxy.conf
配置文件修改如下:
在server2和server3上:
[root@server2 html]# ls #两者相同
index.php upload upload_file.php
测试:
即使用server3上传图片(访问动态页面),却上传到server2上了(静态请求)