2023年7月19日发(作者:)
HAproxy实现负载均衡及常见配置(访问控制、⽇志查看⾃动刷新时间、动静分离和读写分离) 什么是HAproxyHAProxy提供⾼可⽤性、负载均衡以及基于TCP和HTTP应⽤的代理,⽀持虚拟主机,它是免费、快速并且可靠的⼀种解决⽅案。HAProxy特别适⽤于那些负载特⼤的web站点,这些站点通常⼜需要会话保持或七层处理。 HAProxy运⾏在当前的硬件上,完全可以⽀持数以万计的并发连接。并且它的运⾏模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到⽹络上。HAProxy实现了⼀种事件驱动, 单⼀进程模型,此模型⽀持⾮常⼤的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及⽆处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的⽤户端(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进⾏优化以 使每个CPU时间⽚(Cycle)做更多的⼯作。 HAproxy的特性:(1)反向代理(2)读写分离(3)动静分离 HAproxy与各负载均衡器的区别(1)与nginx:同样⼯作在⽤户空间,nginx是⼀款轻量级,能实现缓存、webserver、邮件、负载均衡等功能,但nginx的许多功能都需要第三⽅的模块,⽽haproxy的转发能⼒⽐nginx有更强更灵活的定制性,可以运⽤splice实现0复制的转发,并且有更直观的图形化管理界⾯,不过通⽤性不如nginx,并⽆缓存功能(2)与varnish:varnish是⼀款web缓存系统,(3)与lvs:lvs是⼯作在内核空间上直接转发的,⽆缓存功能 正向代理和反向代理的区别正向代理是指客户端直接访问服务端反向代理是指客户端访问调度器,调度器再访问后端服务器将访问到的数据返回给客户端实验环境:主机名server1server2server3foundation22IP172.25.22.1172.25.22.2172.25.22.3172.25.22.250服务haproxy,httpdhttpd,phphttpd,php测试端⼀、HApronxy实现负载均衡的配置过程1.从官⽹获得⼀个HAproxy的安装包,解压安装包(makefile写各个模块之间是怎么调⽤的config make install后⽣成的⽂件)[root@server1 ~]# [root@server1 ~]# tar zxf
[root@server1 ~]# lshaproxy-1.7.3 [root@server1 ~]# cd haproxy-1.7.3[root@server1 haproxy-1.7.3]# lsCHANGELOG doc include Makefile scripts testscontrib ebtree LICENSE README src VERDATECONTRIBUTING examples MAINTAINERS ROADMAP SUBVERS VERSION2.将源码包打包成⼀个rpm包(1)查找.spec⽂件 (能否把⼀个源码包打成rpm包要看.sepc⽂件)[root@server1 haproxy-1.7.3]# find . -name *.spec./examples/[root@server1 haproxy-1.7.3]# cd(2)安装编译⼯具rpm-build gcc pcre-devel[root@server1 ~]# yum install -y rpm-build gcc pcre-devel
(3)编译安装包[root@server1 ~]# rpmbuild -tb
编译完成之后会出现⼀个rpmbuild⽬录,rpm安装包在这个⽬录中 (rpm 红帽的包的管理器)[root@server1 ~]# lshaproxy-1.7.3 rpmbuild[root@server1 ~]# cd rpmbuild/[root@server1 rpmbuild]# lsBUILD BUILDROOT RPMS SOURCES SPECS SRPMS[root@server1 rpmbuild]# cd RPMS/[root@server1 RPMS]# lsx86_64[root@server1 RPMS]# cd x86_64/[root@server1 x86_64]# lshaproxy-1.7.3-1.x86_3.安装rpm包[root@server1 x86_64]# rpm -ivh haproxy-1.7.3-1.x86_
< ########################################### [100%] 1:haproxy ########################################### [100%]4.编辑haproxy的配置⽂件(1)haproxy的配置⽂件在源码包中[root@server1 x86_64]# cd[root@server1 ~]# ls[root@server1 ~]# cd haproxy-1.7.3[root@server1 haproxy-1.7.3]# ls[root@server1 haproxy-1.7.3]# cd examples/[root@server1 examples]# 是haproxy的默认配置⽂件(2)将这个⽂件复制到/etc/haproxy⽬录下[root@server1 examples]# cp /etc/haproxy/[root@server1 examples]# cd[root@server1 ~]# cd /etc/haproxy/[root@server1 haproxy]# (3)编辑配置⽂件[root@server1 haproxy]# vim⽂件内容如下:global ##全局定义 maxconn 10000 ##最⼤连接数 stats socket /var/run/ mode 600 level admin log 127.0.0.1 local0 ##本机⽇志(⾃定义) uid 200 ##haproxy⽤户的uid gid 200 ##haproxy⽤户的gid chroot /var/empty daemondefaults ##默认条件 mode http ##默认使⽤http的7层模式 tcp:4层 log global option httplog option dontlognull monitor-uri /monitoruri maxconn 8000 timeout client 30s option prefer-last-server retries 2 option redispatch timeout connect 5s timeout server 5s stats uri /admin/stats# The public 'www' address in the DMZfrontend public bind *:80 name clear ##监听所有端⼝ #bind 192.168.1.10:443 ssl crt /etc/haproxy/ #use_backend static if { hdr_beg(host) -i img } #use_backend static if { path_beg /img /css } default_backend dynamic ##默认使⽤dynamic后端服务器集群# the application servers go herebackend dynamic
balance roundrobin ##负载均衡算法rr(轮循) server web1 172.25.22.2:80 check inter 1000 ##后端服务器server2 server web2 172.25.22.3:80 check inter 1000 ##后端服务器2和server3安装httpd,编辑测试页,开启服务(1)server2[root@server2 ~]# yum install -y httpd[root@server2 ~]# cat /var/www/html/rver2[root@server2 ~]# /etc/init.d/httpd start(2)server3[root@server3 ~]# yum install -y httpd[root@server3 ~]# vim /var/www/html/[root@server3 ~]# cat /var/www/html/rver3[root@server3 ~]# /etc/init.d/httpd 1开启haproxy服务[root@server1 haproxy]# /etc/init.d/haproxy start7.物理机测试:访问server1出现轮循调度[root@foundation22 ~]# curl 172.25.22.1server2[root@foundation22 ~]# curl 172.25.22.1server3[root@foundation22 ~]# curl 172.25.22.1server2[root@foundation22 ~]# curl 172.25.22.1server31.⽤户密码访问(1)编辑配置⽂件设置⽤户和密码以及刷新时间[root@server1 haproxy]# vim
[root@server1 haproxy]# /etc/init.d/rsyslog restartShutting down system logger: [ OK ]Starting system logger: [ OK ]添加的内容: stats auth admin:westos stats refresh 5s(2)测试:浏览器访问需要输⼊密码,密码输⼊正确后可以访问(3)查看⽇志看刷新时间<1>编辑⽇志服务的配置⽂件,打开UDP接⼝,创建haproxy的⽇志⽂件,重启服务[root@server1 haproxy]# vim /etc/
[root@server1 haproxy]# /etc/init.d/rsyslog restartlocal0.* /var/log/<2>查看⽇志⽂件,可以看到5秒刷新⼀次2.⿊名单(1)编辑配置⽂件,重启服务[root@server1 haproxy]# vim
[root@server1 haproxy]# /etc/init.d/haproxy reload acl blacklist src 172.25.22.250 http-request deny if blacklist(2)物理机访问:出现403报错[root@foundation22 ~]# curl 172.25.22.1
403 Forbidden
Request forbidden by administrative rules.3.错误页⾯重定向(1)编辑配置⽂件,重启服务[root@server1 haproxy]# vim[root@server1 haproxy]# /etc/init.d/haproxy restart(2)编辑httpd配置⽂件修改httpd端⼝,编辑测试页。开启服务[root@server1 haproxy]# yum install -y httpd[root@server1 haproxy]# vim /var/www/html/[root@server1 haproxy]# cat /var/www/html/
正在维护中,请稍后。。。[root@server1 haproxy]# /etc/init.d/httpd start(3)物理机测试:物理机访问没有结果,浏览器访问错误页⾯重定向到server1[root@foundation22 ~]# curl 172.25.22.1[root@foundation22 ~]# curl 172.25.22.1三、动静分离(1)编辑配置⽂件将server3变成静态访问,默认的是dynamic,dynamic下是server2重启服务,测试访到的是server2[root@server1 haproxy]# vim
[root@server1 haproxy]# /etc/init.d/haproxy restart[root@server1 haproxy]# curl localhostserver2(2)编辑配置⽂件,设置动静分离,退出保存后重启服务[root@server1 haproxy]# vim
[root@server1 haproxy]# /etc/init.d/haproxy restart(3)server3安装php,编辑php默认测试页,重启httpd[root@server3 ~]# yum install -y php[root@server3 ~]# cd /var/www/html[root@server3 html]# [root@server3 html]# vim [root@server3 html]# cat [root@server3 html]# /etc/init.d/httpd restart(4)打开浏览器测试:访问172.25.22.1看到的是server2访问172.25.22.1/看到的是php的默认测试页四、读写分离(1)编辑配置⽂件,部分内容如下:frontend public acl read method HEAD acl read method GET acl write method POST acl write method PUT bind *:80 name clear #bind 192.168.1.10:443 ssl crt /etc/haproxy/ #use_backend static if { hdr_beg(host) -i img } #use_backend static if { path_beg /img /css } acl blacklist src 172.25.9.250 http-request deny if blacklist errorloc 403 172.25.22.1:8080/ if blacklist use_backend static if write use_backend dynamic if read default_backend static# the application servers go herebackend static balance roundrobin server web1 172.25.22.2:80 check inter 1000backend dynamic balance roundrobin server web2 172.25.22.3:80 check inter 1000(2)重启服务[root@server1 haproxy]# vim
[root@server1 haproxy]# /etc/init.d/haproxy restart(3)server2在/var/www/html⽬录下创建两个⽂件和⼀个upload⽬录,给他们满权限[root@server2 html]# chmod 777 upload[root@server2 html]# upload upload_[root@server2 html]# lltotal 12-rwxr-xr-x 1 root root 257 Apr 21 14:47 xrwxrwx 2 root root 4096 Apr 21 14:46 upload-rwxr-xr-x 1 root root 929 Apr 21 14:47 upload_两个⽂件内容如下:<1>
<2>upload_ 0) { echo "Return Code: " . $_FILES["file"]["error"] . ""; } else { echo "Upload: " . $_FILES["file"]["name"] . "
"; echo "Type: " . $_FILES["file"]["type"] . "
"; echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb
"; echo "Temp file: " . $_FILES["file"]["tmp_name"] . "
"; if (file_exists("upload/" . $_FILES["file"]["name"])) { echo $_FILES["file"]["name"] . " already exists. "; } else { move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; } } }else { echo "Invalid file"; }>(4)server2安装php,并重启httpd服务[root@server2 html]# yum install -y php[root@server2 html]# /etc/init.d/httpd restart(5)将这三个⽂件和⽬录传给server3[root@server2 html]# scp -r * server3:/var/www/html/(6)server3查看,并将其他的⽂件删除[root@server3 html]# upload upload_[root@server3 html]# rm -fr [root@server3 html]# upload upload_(7)编辑⽂件,⽅便观察,重启服务给submit前添加westos[root@server3 html]# vim t@server3 html]# /etc/init.d/httpd restart(8)打开浏览器测试:访问172.25.22.1出现的页⾯中submit前有wesos,说明读到的是server3,上传图⽚,可以在server2的uopload⽬录下看到。
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1689743158a282698.html
评论列表(0条)