设为首页 收藏本站
查看: 2931|回复: 1

[经验分享] HAproxy的负载均衡+日志独立+动静分离+读写分离的配置

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-10-27 09:52:10 | 显示全部楼层 |阅读模式
主机环境   redhat6.5 64位
实验环境   服务端1 ip 172.25.29.2
          服务端2 ip 172.25.29.3  
          管理端1 ip 172.25.29.1
防火墙状态:关闭


1.Haproxy的负载均衡及测试
A)负载均衡的配置
[iyunv@server1 ~]# yum install haproxy -y            #安装haproxy
[iyunv@server1 ~]# vim /etc/haproxy/haproxy.cfg      #进入主配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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        #真正的服务端



[iyunv@server1 ~]# /etc/init.d/haproxy start          #开启haproxy
Starting haproxy:                                          [  OK  ]
B)测试
在测试之前,服务端1和服务端2要安装httpd,开启httpd服务,并且有不同的测试页。
[iyunv@server2 ~]# /etc/init.d/httpd start
Starting httpd:                                            [  OK  ]
[iyunv@server3 ~]# /etc/init.d/httpd start
Starting httpd:                                            [  OK  ]
开始测试:172.25.29.1/status (服务端1和服务端2httpd服务都开启
wKioL1gQZt2i1EP9AAEkXr4Aofw248.jpg
测试:172.25.29.1
wKioL1gQZt7Qt3NNAAAeLdvInX4699.jpg
刷新之后
wKioL1gQZt6AD5cOAAAfed1rt1I657.jpg
当关闭服务端2的httpd服务时:
[iyunv@server3 ~]# /etc/init.d/httpd stop
Starting httpd:                                            [  OK  ]
刷新之后,结果如图:(只有wed1运行,wed2停止)
wKioL1gQZt6xrwraAAEQb_X9_NQ189.jpg
当再关闭服务端1的httpd服务时:
[iyunv@server2 ~]# /etc/init.d/httpd stop
Starting httpd:                                            [  OK  ]
刷新之后,结果如图:(wed1和wed2都停止)
wKiom1gQZt-wjmdfAADreoGq0eY444.jpg
2.Haproxy中将管理和负载均衡分开及测试
A) 将管理和负载均衡分开的配置
管理端要安装httpd,要有测试页,在/etc/httpd/conf/httpd.conf中将端口改成8080,不然会冲突。     
[iyunv@server1 ~]# vim /etc/haproxy/haproxy.cfg #修改主配置文件
1
2
3
4
5
6
7
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



[iyunv@server1 ~]# /etc/init.d/haproxy reload#刷新
Reloading haproxy:
B)测试
开始测试(开启管理端、服务端1、服务端2的httpd服务)
wKioL1gQZuDBH9VPAAFKFtDjGGU274.jpg
访问172.25.29.1时,服务端1和服务端2再刷新前后交替出现。
当停止服务端2的httpd时:
[iyunv@server3 ~]# /etc/init.d/httpd stop
Stopping httpd:                                            [  OK  ] wKioL1gQZuCj5lAFAAFSP4AxtOE980.jpg
访问172.25.29.1时,只有服务端1刷新之后也不变。
再停止服务端1的httpd时:
[iyunv@server2 ~]# /etc/init.d/httpd stop
Stopping httpd:                                            [  OK  ]
wKiom1gQZuCgd0MJAAFKHWAyEks813.jpg
访问172.25.29.1时,出现管理端的测试页
wKiom1gQZuHQTIUlAAAVfl7Hnlc909.jpg
3.Haproxy日志的独立及测试
A)日志独立的配置
[iyunv@server1 ~]# vim /etc/rsyslog.conf  #日志的配置文件
1
2
3
4
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中



[iyunv@server1 ~]# /etc/init.d/rsyslog restart
Shutting down system logger:                               [  OK  ]
Starting system logger:                                    [  OK  ]
B)测试
[iyunv@server1 ~]# tail -f /var/log/haproxy.log   #刚开始没有日志
wKioL1gQZuGxCf2tAAAT_oQbcs4072.jpg
当在浏览器中访问172.25.29.1后出现日志,如图:
wKiom1gQZuGi5c5nAABL6CHCTgA299.jpg

4.Haproxy黑名单及测试
A)黑名单的配置
[iyunv@server1 log]# vim /etc/haproxy/haproxy.cfg
1
2
3
4
5
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)的作用相同



[iyunv@server1 log]# /etc/init.d/haproxy reload      #刷新
Reloading haproxy:
B)测试
开始测试(管理端、服务端1、服务端2的httpd服务全开启)
Ip为172.25.29.250进行测试,刷新不变
wKioL1gQZuHx6B7bAAAX-CjjJ-Q699.jpg
用其他的ip进行测试
wKiom1gQZuPyqHIoAAAeLdvInX4289.jpg
刷新之后
wKioL1gQZuPQ5zgRAAAfed1rt1I437.jpg

5.Haproxy的动静分离及测试
A)动静分离的配置
管理端
[iyunv@server1 log]# vim /etc/haproxy/haproxy.cfg
1
2
3
4
5
6
7
8
9
10
11
12
13
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



[iyunv@server1 log]# /etc/init.d/haproxy reload        #刷新
Reloading haproxy:

在服务端2作一些简单的配置
[iyunv@server3 html]# pwd                              #当前目录
/var/www/html
[iyunv@server3 html]# mkdir images                     #创建images目录
[iyunv@server3 html]# mv osi.gif images/               #将图片移动到images
B)测试
测试  访问172.25.29.1结果:
wKiom1gQZuPwiRy7AAAgvq4nKGk793.jpg
如果访问172.25.29.1/images/osi.gif,结果:
wKioL1gQZumBi_UhAAqisWG9kfE854.jpg

6.Haproxy读写分离及测试
A)读写分离的配置
[iyunv@server1 log]# vim /etc/haproxy/haproxy.cfg
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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



[iyunv@server1 log]# /etc/init.d/haproxy reload
Reloading haproxy:

对服务端1和服务端2安装php及写一些简单的php测试文件
服务端1
[iyunv@server2 html]# yum install php -y            #安装php
[iyunv@server2 html]# pwd#当前目录
/var/www/html
[iyunv@server2 html]# vim index.php                 #上传的测试文件(读)
1
2
3
4
5
6
7
8
9
10
11
12
13
  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>



[iyunv@serve2 html]# /etc/init.d/httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]

服务端2
[iyunv@server2 html]# yum install php -y            #安装php
[iyunv@server3 html]# vim upload_file.php           #存储的测试文件(写)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
  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 ?>



[iyunv@server3 html]# mkdir upload
[iyunv@serve3 html]# chmod 777 upload
[iyunv@server3 html]# /etc/init.d/httpd restart            #重启httpd
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]
B)测试
开始测试 172.25.29.1
wKiom1gQZunzKxa6AAAiXZwW8Z0530.jpg
点Browse上传图片,从php的测试文件里可以看出后缀只能是.gif,.jpeg,.png的文件
wKioL1gQZunw_iIrAAAqWhPeCiA878.jpg
点击Submit后,上传成功,下图是上传信息
wKioL1gQZumBSLU3AABECFI2KSs256.jpg
虽然在服务端1上传了文件,但是存储到了服务端2,实现了读写分离
[iyunv@server3 html]# cd upload
[iyunv@server3 upload]# ls#查看
Screenshot from 2016-10-21 17:38:41.png


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-291905-1-1.html 上篇帖子: Haproxy相关概念解析 下篇帖子: Haproxy URL重写 数据库
累计签到:50 天
连续签到:2 天
发表于 2016-10-28 17:39:15 | 显示全部楼层
之前一直用它做负载均衡,现在学习了很多功能

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表