博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HAproxy实现负载均衡及常见配置(日志路径,访问控制,动静分离,读写分离)
阅读量:3921 次
发布时间:2019-05-23

本文共 7175 字,大约阅读时间需要 23 分钟。

知识剖析

  • HAProxy是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于哪些负载特别大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在时下的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同事可以保护你的web服务器不被暴露到网络上。

主机环境:

rhel6.5 selinux and iptables disabled

实验环境:

主机名 IP 服务
server1 172.25.79.1 haproxy
server2 172.25.79.2 apache
server3 172.25.79.3 apache
foundation79 172.25.79.250 用于测试

一、HAproxy实现负载均衡配置过程

1.解压haproxy压缩包

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

2.安装源码编译软件,源码编译haproxy软件

[root@server1 ~]# yum install rpm-build -y##安装需要的安装包,否则会显示编译失败[root@server1 ~]# yum install pcre-devel -y[root@server1 ~]# yum install gcc -y  [root@server1 ~]# rpmbuild -tb haproxy-1.7.3.tar.gz [root@server1 ~]# cd /root/rpmbuild/RPMS/x86_64/[root@server1 x86_64]# lshaproxy-1.7.3-1.x86_64.rpm[root@server1 x86_64]# rpm -ivh haproxy-1.7.3-1.x86_64.rpm
  1. 建立haproxy用户和组。利用linux对haporxy用户的访问控制实现对haporxy服务的控制
[root@server1 ~]# groupadd -g 200 haproxy[root@server1 ~]# useradd -u 200 -g 200  -M haproxy   ##-M参数表示不自动建立用户的登陆目录[root@server1 ~]# id haproxyuid=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.cfgglobal      # 全局定义         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         daemondefaults   # 默认条件         mode            http               #默认使用 http 的 7 层模式 tcp: 4 层         log             global         option          httplog         option          dontlognull         monitor-uri     /monitoruri         maxconn         8000         timeout client  30s         stats uri       /admin/stats         option prefer-last-server         retries         2         option redispatch         timeout connect 5s         timeout server  5s# The public 'www' address in the DMZfrontend 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.79.2:80 check inter 1000 # 后端服务器server2 server statsrv2 172.25.79.3:80 check inter 1000 # 后端服务器server3
  1. 然后在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.htmlserver2                           [root@server3 ~]# yum install httpd -y[root@server3 ~]# /etc/init.d/httpd start[root@server3 ~]# cd /var/www/html[root@server3 html]# vim index.htmlserver3
  1. 打开haproxy服务
[root@server1 ~]# /etc/init.d/haproxy start
  1. 在浏览器测试(轮循)
[root@server1 haproxy]# curl 172.25.79.1server2[root@server1 haproxy]# curl 172.25.79.1server3  [root@server1 haproxy]# curl 172.25.79.1server2[root@server1 haproxy]# curl 172.25.79.1server3
  • 在浏览器输入http://172.25.79.1/monitoruri(查看)
    在这里插入图片描述
  • 在浏览器输入http://172.25.79.1/admin/stats(看其stats状态页)
    在这里插入图片描述
  • 定义用户和密码,以及刷新次数
  • 用户为admin,密码是westos,刷新次数为5s刷新一次
    在这里插入图片描述
  • 重启服务
[root@server1 haproxy]# /etc/init.d/haproxy restart
  • 测试:刷新页面显示输入密码,然后会看到页面5秒就会更新一次
    在这里插入图片描述

二、基于TCP和HTTP的应用程序代理

  • 创建指定日志存放目录
    1.修改日志服务配置文件从而修改日志存储位置
[root@server1 haproxy]# vim /etc/rsyslog.conf ##打开13,14行的注释  13 $ModLoad imudp             14 $UDPServerRun 514##添加日志存储位置 63 local0.*                   /var/log/haproxy.log##重启日志服务[root@server1 haproxy]# /etc/init.d/rsyslog restart
  • 测试:
    在/var/log/haproxy.log中国查看到日志内容,且5s更新一次(刚才设置过刷新时间为5s)
    在这里插入图片描述
  • 访问控制,加黑名单
  1. 编辑配置文件
[root@server1 examples]# cd /etc/haproxy/[root@server1 haproxy]# vim haproxy.cfg
  • 添加47-49行内容
  • 49行内容为:错误重定向,将403报错给客户不太友好,这里更改配置文件将错误重定向到本机的apache服务默认发布目录里的写入内容,记得将httpd的端口改为8080避免和haproxy服务冲突;
    在这里插入图片描述
  1. 重启haproxy服务
[root@server1 haproxy]# /etc/init.d/haproxy reload
  1. 此处需要给server1安装httpd服务,并将端口改为8080,编写默认发布目录内容
[root@server1 haproxy]# yum install httpd -y[root@server1 haproxy]# vim /etc/httpd/conf/httpd.conf  136 Listen 8080[root@server1 haproxy]# cd /var/www/html/[root@server1 html]# vim index.html您已被拉黑...[root@server1 html]# /etc/init.d/httpd start
  1. 测试:
  • 物理机浏览器输入:172.25.79.1
    显示:
    在这里插入图片描述
  • 其他主机可以正常访问
  • 动态页面和静态页面的分离:
  1. server3安装php,编辑动态页面 完成后restart httpd服务
[root@server3 html]# yum install php -y[root@server3 html]# pwd/var/www/html[root@server3 html]# vim index.php
[root@server3 html]# /etc/init.d/httpd restart
  1. 编辑配置文件,如果访问以.php结尾的动态界面,实际访问的主机为server3;静态页面访问server2(默认访问server2)
[root@server1 haproxy]# vim haproxy.cfg

在这里插入图片描述

  1. 重启服务
[root@server1 haproxy]# /etc/init.d/haproxy reload
  1. 测试
  • 浏览器访问http://172.25.79.1

    则默认访问的是静态页面(server2)
    在这里插入图片描述

  • 浏览器访问http://172.25.19.1/index.php

    显示php页面
    在这里插入图片描述

  • 读写分离:

  1. server1编辑配置文件,如果有写入操作,访问动态server3主机
[root@server1 haproxy]# vim haproxy.cfg ##写参数 50         acl write method POST 51         acl write metnod PUT#读参数 50         acl read method GET 51         acl read metnod HEAD 51         use_backend   static if write       ##如果写,则默认访问static(server2),即写入到server2中 52  53         default_backend dynamic
  1. 在server3中的httpd默认发布目录,放进去index.php(选择图片的静态页面)和upload_file.php(上传图片的动态页面),存放上传图片的目录upload目录。
[root@server2 html]# cd /var/www/html/upload/       ##此处upload可以新建[root@server2 upload]# lsindex.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]# lsindex.html  index.php  upload  upload_file.php
  • index.php 文件内容 ( 选择图片的静态页面 )
  • upload_file.php 文件内容(上传图片的动态页面)
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"; }?>
  1. 修改上传的大小限制
[root@server2 html]# vim upload_file.php   5 && ($_FILES["file"]["size"] < 2000000))   ##修改为2000000
  1. 将编写好的upload相关文件传到server3上
[root@server2 html]# scp -rp upload upload_file.php index.php root@172.25.19.3:/var/www/html/
  1. 在server2上安装php,并重启httpd
[root@server2 html]# yum install php -y  [root@server2 html]# /etc/init.d/httpd restart
  1. 测试:浏览器输入:
  • 显示以下界面,点击Browse…
    在这里插入图片描述
  • 上传一个图片
    在这里插入图片描述
  • 上传成功显示如下
    在这里插入图片描述
  • 可以看到上传的图片上传到了server2上
    在这里插入图片描述
  • 而server3上没有
    在这里插入图片描述

转载地址:http://jghrn.baihongyu.com/

你可能感兴趣的文章
一文掌握JavaBean技术__JavaWeb
查看>>
洛谷P1271 【深基9.例1】选举学生会_C++描述
查看>>
操作INI文件的读写类
查看>>
vs2012编译的程序在XP下运行提示无法定位输入点XXXXX到kernel32.dll
查看>>
vs2012 编译jsoncpp和使用jsoncpp lib出现的问题
查看>>
关于jsoncpp内部排序的问题
查看>>
VC编译选项/MT/MTd/MD/MDd说明
查看>>
使用WinINet获取网页源代码
查看>>
VS提示内存泄漏(Detected memory leaks)的解决方法
查看>>
json_value.asm: No such file or directory
查看>>
VS2010 c++编写的程序在别人的机子运行不了,缺少mfc100.dll, xxx100d.dll等的解决方法
查看>>
Ansi、Unicode、UTF-8字符串之间的转换和写入文本文件
查看>>
utf-8与utf-8(无BOM)的区别
查看>>
把一个int()或者byte(字节)以二进制的形式打印出来
查看>>
从windows同步文件到linux
查看>>
SSH tunnel tips
查看>>
数据库索引的作用和优点缺点
查看>>
printf()用法
查看>>
c++ 启动exe(启动别的exe程序)
查看>>
Dynamic Forking of Win32 EXE
查看>>