haproxy实现负载均衡--日志路径+访问控制+动静分离+读写分离

haproxy实现负载均衡


http://www.ttlsa.com/linux/haproxy-study-tutorial/
https://www.sohu.com/a/166112427_151779
4层效率高于7层

haproxy实现访问控制,动静分离

haproxy实现读写分离
主备,读写分离,主从复制


 

tar zxf haproxy-1.7.3.tar.gz
cd haproxy-1.7.3
ls

Makefile 各模块之间的调用

 

rpm:redhat package manager
源码安装比较随意

##命令find -name *.spec有这个文件表示可以用源码软件包安装
[root@server1 haproxy-1.7.3]# find -name *.spec    
./examples/haproxy.spec


 

yum install rpm-build  pcre-devel  gcc -y

gdb c语言调试工具

[root@server1 ~]# rpmbuild -tb haproxy-1.7.3.tar.gz

[root@server1 ~]# cd /root/rpmbuild/RPMS/x86_64/

[root@server1 x86_64]# ls haproxy-1.7.3-1.x86_64.rpm

[root@server1 x86_64]# rpm -ivh haproxy-1.7.3-1.x86_64.rpm

建立haproxy用户和组。利用linux对haporxy用户的访问控制实现对haporxy服务的控制
 

[root@server1 ~]# groupadd -g 200 haproxy
[root@server1 ~]# useradd -u 200 -g 200  -M haproxy   ##-M参数表示不自动建立用户的登陆目录
[root@server1 ~]# id haproxy
uid=200(haproxy) gid=200(haproxy) groups=200(haproxy)

5.找到haproxy的配置文件,并复制到/etc/haproxy目录下
 

[root@server1 ~]# cd haproxy-1.7.3/examples/
[root@server1 examples]# cp content-sw-sample.cfg /etc/haproxy/haproxy.cfg

6.编辑配置文件

[root@server1 examples]# cd /etc/haproxy/
[root@server1 haproxy]# vim haproxy.cfg


 

global      # 全局定义
         maxconn         10000     # 最大连接数
         stats socket    /var/run/haproxy.stat mode 600 level admin
         log             127.0.0.1 local0     # 夲机日志
         uid             200    # haproxy用户的uid
         gid             200    # haproxy用户的gid
         chroot          /var/empty
         daemon

defaults   # 默认条件
         mode            http               #默认使用 http 的 7 层模式 tcp: 4 层

         log             global
         option          httplog
         option          dontlognull
         monitor-uri     /monitoruri
         maxconn         8000
         timeout client  30s

         stats uri       /admin/stats  ##监控页面 数据流量 F12显示细节
         option prefer-last-server
         retries         2
         option redispatch
         timeout connect 5s
         timeout server  5s

# The public 'www' address in the DMZ
frontend public  ##前端
         bind            *:80 name clear     ##监听所有端口
         #bind            192.168.1.10:443 ssl crt /etc/haproxy/haproxy.pem
         #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
         balance         roundrobin     # 负载均衡算法rr
         server          statsrv1 172.25.99.2:80 check inter 1000    # 后端服务器server2
         server          statsrv2 172.25.99.3:80 check inter 1000   # 后端服务器server3


 7. 然后在server2和server3上安装httpd,开启httpd,再编写默认发布内容

[root@server2 ~]# yum install httpd -y
[root@server2 ~]# /etc/init.d/httpd start
[root@server2 ~]# cd /var/www/html/
[root@server2 html]# vim index.html
server2
                           
[root@server3 ~]# yum install httpd -y
[root@server3 ~]# /etc/init.d/httpd start
[root@server3 ~]# cd /var/www/html
[root@server3 html]# vim index.html
server3 

                               

8.
    打开haproxy服务

[root@server1 ~]# /etc/init.d/haproxy start

 

9.在浏览器测试(轮循)

[root@server1 haproxy]# curl 172.25.99.1
server2
[root@server1 haproxy]# curl 172.25.99.1
server3  
[root@server1 haproxy]# curl 172.25.99.1
server2
[root@server1 haproxy]# curl 172.25.99.1
server3

 

firefox

172.25.99.1/admin/stats
  ##监控页面 数据流量 F12显示细节


down一台httpd再次查看

 

 

172.25.99.1/monitoruri
##200ok  --> 正常

 

访问控制

定义用户和密码,以及刷新次数

用户为admin,密码是redhat,刷新次数为5s刷新一次

defaults

stats uri    /admin/stats
stats auth    admin:redhat
stats refresh    5s

/etc/init.d/haproxy restart

 

 

访问黑名单

cd /etc/haproxy

vim haproxy.cfg

43 acl blacklist src 172.25.99.250
44 http-request deny if blacklist


/etc/init.d/haproxy reload    ##重启haproxy服务

 

 

测试:登陆172.25.99.1

为了体现良好的人机交互,

此处需要给server1安装httpd服务,并将端口改为8080(80端口被public占用),编写默认发布目录内容

yum install httpd -y

vim /etc/httpd/conf/httpd.conf 
 136 Listen 8080
vim  /var/www/html/ndex.html

/etc/init.d/httpd start

 

测试:

日志路径

将上面的黑名单删除或者注释掉

vim /etc/rsyslog.conf

去掉UDP注释

 $ModLoad imudp		        ##日志接收插件
 $UDPServerRun 514	        ##日志接收插件使用端口

 

 

 

cat tail /var/log/haproxy

查看日志,5妙一刷新

 

 

haproxy的动静分离

 

 

 

测试:以php结尾将访问php页面

其余默认访问静态页面

 

 

 

 

haproxy读写分离

 38         acl read method HEAD
 39         acl read method GET
 40         acl write method POST
 41         acl write method PUT

 

sserver2:

yum iinstall php -y

[root@server2 html]# cd /var/www/html/upload/       ##此处upload可以新建
[root@server2 upload]# ls
index.php  upload_file.php          ##两个文件的内容在下面可以看到
[root@server2 upload]# chmod 644 *
[root@server2 upload]# mv * ..
[root@server2 upload]# cd ..
[root@server2 html]# chmod 777 upload
[root@server2 html]# ls
index.html  index.php  upload  upload_file.php

index.php文件( 选择图片的静态页面 )

<html>
<body>

<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" /> 
<br />
<input type="submit" name="submit" value="Submit" />
</form>

</body>
</html>

upload_file.php 文件内容(上传图片的动态页面),当前只支持gif、jpeg、pjpeg三种格式

编写,添加png图片格式,可以修改size大小防止上传失败,单位为b

<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Type: " . $_FILES["file"]["type"] . "<br />";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";

 # 上传成功显示的信息(所以上传图片是个动态的过程)
    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";   ##不符合上传条件显示Invalid file
  }
?>

将编写好的upload相关文件传到server3上

[root@server2 html]# scp -rp * server3:/var/www/html/

测试:

上传点击browse,提交

 提交成功

 

在server2默认发布目录查看上传结果

 

server3里没有的

 

 

cgi通用网关接口

fastcgi

http和解析分开

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值