阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

HAproxy的基本配置(负载均衡+日志独立+动静分离+读写分离)

137次阅读
没有评论

共计 10109 个字符,预计需要花费 26 分钟才能阅读完成。

主机环境  RedHat6.5 64 位

实验环境  服务端 1 ip 172.25.29.2

          服务端 2 ip 172.25.29.3 

          管理端 1 ip 172.25.29.1

防火墙状态:关闭

1.Haproxy 的负载均衡及测试

A)负载均衡的配置

[root@server1 ~]# yum install haproxy -y            #安装 haproxy

[root@server1 ~]# vim /etc/haproxy/haproxy.cfg      #进入主配置文件

  59        stats uri /status                #虚拟目录,后面的全标记,自己添加
 60 ##———————————————————————
 61 ## main frontend which proxys to the backends
 62 ##———————————————————————
 63 #frontend  main *:5000
 64 #    acl url_static      path_beg      -i /static /images /javascript /sty    lesheets
 65 #    acl url_static      path_end      -i .jpg .gif .png .css .js
 66 #
 67 #    use_backend static          if url_static
 68 #    default_backend            app
 69 #
 70 ##———————————————————————
 71 ## static backend for serving up images, stylesheets and such
 72 ##———————————————————————
 73 #backend static
 74 #    balance    roundrobin
 75 #    server      static 127.0.0.1:4331 check
 76 #
 77 ##———————————————————————
 78 ## round robin balancing between the various backends
 79 ##———————————————————————
 80 #backend app
 81 #    balance    roundrobin
 82 #    server  app1 127.0.0.1:5001 check
 83 #    server  app2 127.0.0.1:5002 check
 84 #    server  app3 127.0.0.1:5003 check
 85 #    server  app4 127.0.0.1:5004 check
 86 listen wen *:80                                #添加服务
 87        balance roundrobin# 机制:轮叫
 88        server web1 172.25.29.2:80 check        #真正的服务端
 89        server web2 172.25.29.3:80 check        #真正的服务端

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

Starting haproxy:                                          [OK]

B)测试

在测试之前,服务端 1 和服务端 2 要安装 httpd,开启 httpd 服务,并且有不同的测试页。

[root@server2 ~]# /etc/init.d/httpd start

Starting httpd:                                            [OK]

[root@server3 ~]# /etc/init.d/httpd start

Starting httpd:                                            [OK]

开始测试:172.25.29.1/status (服务端 1 和服务端 2httpd 服务都开启

HAproxy 的基本配置(负载均衡 + 日志独立 + 动静分离 + 读写分离)

测试:172.25.29.1

HAproxy 的基本配置(负载均衡 + 日志独立 + 动静分离 + 读写分离)

刷新之后

HAproxy 的基本配置(负载均衡 + 日志独立 + 动静分离 + 读写分离)

当关闭服务端 2 的 httpd 服务时:

[root@server3 ~]# /etc/init.d/httpd stop

Starting httpd:                                            [OK]

刷新之后,结果如图:(只有 wed1 运行,wed2 停止)

HAproxy 的基本配置(负载均衡 + 日志独立 + 动静分离 + 读写分离)

当再关闭服务端 1 的 httpd 服务时:

[root@server2 ~]# /etc/init.d/httpd stop

Starting httpd:                                            [OK]

刷新之后,结果如图:(wed1 和 wed2 都停止)

HAproxy 的基本配置(负载均衡 + 日志独立 + 动静分离 + 读写分离)

2.Haproxy 中将管理和负载均衡分开及测试

A) 将管理和负载均衡分开的配置

管理端要安装 httpd,要有测试页,在 /etc/httpd/conf/httpd.conf 中将端口改成 8080,不然会冲突。

[root@server1 ~]# vim /etc/haproxy/haproxy.cfg #修改主配置文件

 86 frontend wen *:80
 87        default_backend app
 88 backend app
 89        balance roundrobin
 90        server web1 172.25.29.2:80 check
 91        server web2 172.25.29.3:80 check
 92        server local 127.0.0.1:8080 backup

[root@server1 ~]# /etc/init.d/haproxy reload# 刷新

Reloading haproxy:

B) 测试

开始测试(开启管理端、服务端 1、服务端 2 的 httpd 服务)

HAproxy 的基本配置(负载均衡 + 日志独立 + 动静分离 + 读写分离)

访问 172.25.29.1 时,服务端 1 和服务端 2 再刷新前后交替出现。

当停止服务端 2 的 httpd 时:

[root@server3 ~]# /etc/init.d/httpd stop

Stopping httpd:                                            [OK]

HAproxy 的基本配置(负载均衡 + 日志独立 + 动静分离 + 读写分离)

访问 172.25.29.1 时,只有服务端 1 刷新之后也不变。

再停止服务端 1 的 httpd 时:

[root@server2 ~]# /etc/init.d/httpd stop

Stopping httpd:                                            [OK]

HAproxy 的基本配置(负载均衡 + 日志独立 + 动静分离 + 读写分离)

访问 172.25.29.1 时,出现管理端的测试页

HAproxy 的基本配置(负载均衡 + 日志独立 + 动静分离 + 读写分离)

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2017-03/141614p2.htm

3.Haproxy 日志的独立及测试

 A) 日志独立的配置

[root@server1 ~]# vim /etc/rsyslog.conf #日志的配置文件

 13 $ModLoad imudp                                                             
 14 $UDPServerRun 514                  #开启端口和端口号                     
 42 *.info;mail.none;authpriv.none;cron.none;local2.none      /var/log/ messages    #haproxy 的日志不在 messages 里做记录 
 63 local2.*                                                /var/log/haproxy.log  #将 haproxy 的日志文件单独记录在 haproxy.log 中

[root@server1 ~]# /etc/init.d/rsyslog restart

Shutting down system logger:                              [OK]

Starting system logger:                                    [OK]

B)测试

[root@server1 ~]# tail -f /var/log/haproxy.log  #刚开始没有日志

HAproxy 的基本配置(负载均衡 + 日志独立 + 动静分离 + 读写分离)

当在浏览器中访问 172.25.29.1 后出现日志,如图:

HAproxy 的基本配置(负载均衡 + 日志独立 + 动静分离 + 读写分离)

4.Haproxy 黑名单及测试

 A) 黑名单的配置

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

 86 frontend wen *:80
 87        acl badhost src 172.25.29.250        #禁止 ip(172.25.29.250)的访问
 88        block if badhost                      #如果禁止访问的 ip 进行访问
 89        errorloc 403 http://172.25.29.1:8080  #如果访问,页面中出现的是 http://172.25.29.1:8080 中的信息
          # redirect location  http://172.25.29.1:8080 if badhost  #这句和(88+89)的作用相同

[root@server1 log]# /etc/init.d/haproxy reload      #刷新

Reloading haproxy:

 B) 测试

开始测试 (管理端、服务端 1、服务端 2 的 httpd 服务全开启)

Ip 为 172.25.29.250 进行测试,刷新不变

HAproxy 的基本配置(负载均衡 + 日志独立 + 动静分离 + 读写分离)

用其他的 ip 进行测试

HAproxy 的基本配置(负载均衡 + 日志独立 + 动静分离 + 读写分离)

刷新之后

HAproxy 的基本配置(负载均衡 + 日志独立 + 动静分离 + 读写分离)

5.Haproxy 的动静分离及测试

A)动静分离的配置

管理端

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

 86 frontend wen *:80
 87        acl url_static path_beg -i /images    #定义开始 images
 88        acl url_static path_end -i .gif        #结尾.gif
 89        use_backend app if url_static          #如果是动态,访问 app
 90  default_backend html                        #默认访问 html
 91       
 92 backend html                                  #名字
 93        balance roundrobin
 94        server web1 172.25.29.2:80 check
 95
 96 backend app
 97        balance roundrobin
 98        server web2 172.25.29.3:80 check

[root@server1 log]# /etc/init.d/haproxy reload        #刷新

Reloading haproxy:

在服务端 2 作一些简单的配置

[root@server3 html]# pwd                              #当前目录

/var/www/html

[root@server3 html]# mkdir images                    #创建 images 目录

[root@server3 html]# mv osi.gif images/              #将图片移动到 images

 B)测试

测试  访问 172.25.29.1 结果:

HAproxy 的基本配置(负载均衡 + 日志独立 + 动静分离 + 读写分离)

如果访问 172.25.29.1/images/osi.gif,结果:

HAproxy 的基本配置(负载均衡 + 日志独立 + 动静分离 + 读写分离)

6.Haproxy 读写分离及测试

 A) 读写分离的配置

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

 86 frontend wen *:80
 87        acl read method DET
 88        acl read method HEAD
 89        acl write method PUT
 90        acl write method POST
 91
 92        use_backend app if write        #如果是写,访问 app
 93    default_backend html                #默认访问 htm
 94       
 95 backend html
 96        balance roundrobin
 97        server web1 172.25.29.2:80 check
 98
 99 backend app
100        balance roundrobin
101        server web2 172.25.29.3:80 check

[root@server1 log]# /etc/init.d/haproxy reload

Reloading haproxy:

对服务端 1 和服务端 2 安装 php 及写一些简单的 php 测试文件

服务端 1

[root@server2 html]# yum install php -y            #安装 php

[root@server2 html]# pwd# 当前目录

/var/www/html

[root@server2 html]# vim index.php                #上传的测试文件(读)

  1 <html>
  2 <body>
  3
  4 <form action=”upload_file.php” method=”post”
  5 enctype=”multipart/form-data”>
  6 <label for=”file”>Filename:</label>
  7 <input type=”file” name=”file” id=”file” />
  8 <br />
  9 <input type=”submit” name=”submit” value=”Submit” />
 10 </form>
 11
 12 </body>
 13 </html>

[root@serve2 html]# /etc/init.d/httpd restart

Stopping httpd:                                            [OK]

Starting httpd:                                            [OK]

服务端 2

[root@server2 html]# yum install php -y            #安装 php

[root@server3 html]# vim upload_file.php          #存储的测试文件(写)

  1 <?php
  2 if ((($_FILES[“file”][“type”] == “image/gif”)
  3 || ($_FILES[“file”][“type”] == “image/jpeg”)
  4 || ($_FILES[“file”][“type”] == “image/png”))
  5 && ($_FILES[“file”][“size”] < 2000000))
  6  {
  7  if ($_FILES[“file”][“error”] > 0)
  8    {
  9    echo “Return Code: ” . $_FILES[“file”][“error”] . “<br />”;
 10    }
 11  else
 12    {
 13    echo “Upload: ” . $_FILES[“file”][“name”] . “<br />”;
 14    echo “Type: ” . $_FILES[“file”][“type”] . “<br />”;
 15    echo “Size: ” . ($_FILES[“file”][“size”] / 1024) . ” Kb<br />”;
 16    echo “Temp file: ” . $_FILES[“file”][“tmp_name”] . “<br />”;
 17
 18    if (file_exists(“upload/” . $_FILES[“file”][“name”]))
 19      {
 20      echo $_FILES[“file”][“name”] . ” already exists. “;
 21      }
 22    else
 23      {
 24      move_uploaded_file($_FILES[“file”][“tmp_name”],
 25      “upload/” . $_FILES[“file”][“name”]);
 26      echo “Stored in: ” . “upload/” . $_FILES[“file”][“name”];
 27      }
 28    }
 29  }
 30 else
 31  {
 32  echo “Invalid file”;
 33  }
 34 ?>

[root@server3 html]# mkdir upload

[root@serve3 html]# chmod 777 upload

[root@server3 html]# /etc/init.d/httpd restart            #重启 httpd

Stopping httpd:                                            [OK]

Starting httpd:                                            [OK]

B) 测试

开始测试 172.25.29.1

HAproxy 的基本配置(负载均衡 + 日志独立 + 动静分离 + 读写分离)

点 Browse 上传图片,从 php 的测试文件里可以看出后缀只能是.gif,.jpeg,.png 的文件

HAproxy 的基本配置(负载均衡 + 日志独立 + 动静分离 + 读写分离)

点击 Submit 后,上传成功,下图是上传信息

HAproxy 的基本配置(负载均衡 + 日志独立 + 动静分离 + 读写分离)

虽然在服务端 1 上传了文件,但是存储到了服务端 2,实现了读写分离

[root@server3 html]# cd upload

[root@server3 upload]# ls# 查看

Screenshot from 2016-10-21 17:38:41

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-03/141614.htm

主机环境  RedHat6.5 64 位

实验环境  服务端 1 ip 172.25.29.2

          服务端 2 ip 172.25.29.3 

          管理端 1 ip 172.25.29.1

防火墙状态:关闭

1.Haproxy 的负载均衡及测试

A)负载均衡的配置

[root@server1 ~]# yum install haproxy -y            #安装 haproxy

[root@server1 ~]# vim /etc/haproxy/haproxy.cfg      #进入主配置文件

  59        stats uri /status                #虚拟目录,后面的全标记,自己添加
 60 ##———————————————————————
 61 ## main frontend which proxys to the backends
 62 ##———————————————————————
 63 #frontend  main *:5000
 64 #    acl url_static      path_beg      -i /static /images /javascript /sty    lesheets
 65 #    acl url_static      path_end      -i .jpg .gif .png .css .js
 66 #
 67 #    use_backend static          if url_static
 68 #    default_backend            app
 69 #
 70 ##———————————————————————
 71 ## static backend for serving up images, stylesheets and such
 72 ##———————————————————————
 73 #backend static
 74 #    balance    roundrobin
 75 #    server      static 127.0.0.1:4331 check
 76 #
 77 ##———————————————————————
 78 ## round robin balancing between the various backends
 79 ##———————————————————————
 80 #backend app
 81 #    balance    roundrobin
 82 #    server  app1 127.0.0.1:5001 check
 83 #    server  app2 127.0.0.1:5002 check
 84 #    server  app3 127.0.0.1:5003 check
 85 #    server  app4 127.0.0.1:5004 check
 86 listen wen *:80                                #添加服务
 87        balance roundrobin# 机制:轮叫
 88        server web1 172.25.29.2:80 check        #真正的服务端
 89        server web2 172.25.29.3:80 check        #真正的服务端

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

Starting haproxy:                                          [OK]

B)测试

在测试之前,服务端 1 和服务端 2 要安装 httpd,开启 httpd 服务,并且有不同的测试页。

[root@server2 ~]# /etc/init.d/httpd start

Starting httpd:                                            [OK]

[root@server3 ~]# /etc/init.d/httpd start

Starting httpd:                                            [OK]

开始测试:172.25.29.1/status (服务端 1 和服务端 2httpd 服务都开启

HAproxy 的基本配置(负载均衡 + 日志独立 + 动静分离 + 读写分离)

测试:172.25.29.1

HAproxy 的基本配置(负载均衡 + 日志独立 + 动静分离 + 读写分离)

刷新之后

HAproxy 的基本配置(负载均衡 + 日志独立 + 动静分离 + 读写分离)

当关闭服务端 2 的 httpd 服务时:

[root@server3 ~]# /etc/init.d/httpd stop

Starting httpd:                                            [OK]

刷新之后,结果如图:(只有 wed1 运行,wed2 停止)

HAproxy 的基本配置(负载均衡 + 日志独立 + 动静分离 + 读写分离)

当再关闭服务端 1 的 httpd 服务时:

[root@server2 ~]# /etc/init.d/httpd stop

Starting httpd:                                            [OK]

刷新之后,结果如图:(wed1 和 wed2 都停止)

HAproxy 的基本配置(负载均衡 + 日志独立 + 动静分离 + 读写分离)

2.Haproxy 中将管理和负载均衡分开及测试

A) 将管理和负载均衡分开的配置

管理端要安装 httpd,要有测试页,在 /etc/httpd/conf/httpd.conf 中将端口改成 8080,不然会冲突。

[root@server1 ~]# vim /etc/haproxy/haproxy.cfg #修改主配置文件

 86 frontend wen *:80
 87        default_backend app
 88 backend app
 89        balance roundrobin
 90        server web1 172.25.29.2:80 check
 91        server web2 172.25.29.3:80 check
 92        server local 127.0.0.1:8080 backup

[root@server1 ~]# /etc/init.d/haproxy reload# 刷新

Reloading haproxy:

B) 测试

开始测试(开启管理端、服务端 1、服务端 2 的 httpd 服务)

HAproxy 的基本配置(负载均衡 + 日志独立 + 动静分离 + 读写分离)

访问 172.25.29.1 时,服务端 1 和服务端 2 再刷新前后交替出现。

当停止服务端 2 的 httpd 时:

[root@server3 ~]# /etc/init.d/httpd stop

Stopping httpd:                                            [OK]

HAproxy 的基本配置(负载均衡 + 日志独立 + 动静分离 + 读写分离)

访问 172.25.29.1 时,只有服务端 1 刷新之后也不变。

再停止服务端 1 的 httpd 时:

[root@server2 ~]# /etc/init.d/httpd stop

Stopping httpd:                                            [OK]

HAproxy 的基本配置(负载均衡 + 日志独立 + 动静分离 + 读写分离)

访问 172.25.29.1 时,出现管理端的测试页

HAproxy 的基本配置(负载均衡 + 日志独立 + 动静分离 + 读写分离)

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2017-03/141614p2.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计10109字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中