如上图所示,在 192.168.1.0/24 这个网段的客户端想要访问在 172.20.0.0/20 网段内的服务器,所有的通信又不想暴露在互联网上,因此可以在这两个网段内分别都放一台 Haproxy 服务器,并将两台 Haproxy 直连,10.94.0.7310.94.0.72 互通,然后做两次代理即可。

Haproxy1 应该监听在 192.168.1.105 上以供 192.168.1.0/24 网段内的主机访问,然后指定源地址 10.94.0.73 将请求指向后端服务器 Haproxy2 的 10.94.0.72

Haproxy1 的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
global
daemon
user nobody
group nobody
nbproc 1
maxconn 300000 defaults
maxconn 300000
timeout client 30s
timeout server 30s
timeout connect 8s
mode tcp
source 10.94.0.73 listen http
bind 192.168.1.105:80
server http 10.94.0.72:80 listen mysql
bind 192.168.1.105:3306
server mysql 10.94.0.72:3306

Haproxy2 应该监听在 10.94.0.72 以供 Haproxy1 的 10.94.0.73 来请求,然后指定源地址 172.20.0.254 将 Web 请求指向后端服务器 172.20.15.15:80,将 MySQL 请求指向后端服务器 172.20.11.154:3306

Haproxy2 的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
global
daemon
user nobody
group nobody
nbproc 1
maxconn 300000 defaults
maxconn 300000
timeout client 30s
timeout server 30s
timeout connect 8s
mode tcp
source 172.20.0.254 listen http
bind 10.94.0.72:80
server http 172.20.15.15:80 listen mysql
bind 10.94.0.72:3306
server mysql 172.20.11.154:3306

Web 负载均衡

如图所示,客户端访问 192.168.127.130 时,要把请求分发到 192.168.127.131:80192.168.127.132:80 这两台服务器上。这是一个最简单的负载均衡结构图,实现起来比较简单。

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
35
36
37
38
global
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4096
user nobody
group nobody
daemon stats socket /var/lib/haproxy/stats defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000 frontend web_proxy
bind 192.168.127.130:80
default_backend webservers backend webservers
balance roundrobin
mode http
server web1 192.168.127.131:80 maxconn 1024 weight 3 check inter 2000 rise 2 fall 3
server web2 192.168.127.132:80 maxconn 1024 weight 5 check inter 2000 rise 2 fall 3

配置说明

  • Global settings :这是第一部分的配置,全局配置;对Haproxy进程自身属性的设定
  • proxys:对代理的设定,通常有4部分组成
    • defaults:提供默认配置
    • frontend:前端配置
    • backend:后端配置
    • listen:从某种意义上讲可以认为是将 frontend 和 backend 整合到一块的

ACL 匹配

如图所示,要求
1、如果客户端的 IP 是 192.168.127.110,访问 192.168.127.130 时,要把请求分发到 Web Server3 上,即 192.168.127.133

2、客户端访问 192.168.127.130 时,要把请求分发到 192.168.127.131192.168.127.132192.168.127. 大专栏  Haproxy的应用133 这三台服务器上。同时还要求客户端每一次访问,都跳转到不同的服务器上。

3、如果客户端访问的不是 192.168.127.130 而是 192.168.127.129 时,要把请求全部分发到 Web Server1 上,即 192.168.127.131

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
35
36
37
38
39
40
41
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
maxconn 4096
uid 1005
gid 1005
daemon defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000 frontend WebLB
bind *:80
acl from_110 src 192.168.127.110
acl to_129 hdr_beg(host) 192.168.127.129
acl to_130 hdr_beg(host) 192.168.127.130
use_backend from_to if from_110 to_130
use_backend 3round if to_130
default_backend backend_default backend from_to
balance source
server web3 192.168.127.133:80 maxconn 1024 weight 3 check inter 2000 rise 2 fall 3 backend 3round
balance roundrobin
server web1 192.168.127.131:80 maxconn 1024 weight 3 check inter 2000 rise 2 fall 3
server web2 192.168.127.132:80 maxconn 1024 weight 3 check inter 2000 rise 2 fall 3
server web3 192.168.127.133:80 maxconn 1024 weight 3 check inter 2000 rise 2 fall 3 backend backend_default
server web1 192.168.127.131:80 maxconn 1024 weight 3 check inter 2000 rise 2 fall 3

状态监控

在其他的配置完成后,做一个全局配置区段,用来监控 Haproxy 服务器的状态。

1
2
3
4
5
6
7
8
9
10
listen Haproxy_Status                   # 关联前端和后端定义一个完整的代理          
mode http # 设置代理协议
bind 0.0.0.0:1080 # 绑定相应的端口
stats enable # 开启 Haproxy 统计状态
stats refresh 10s # 统计页面自动刷新时间间隔
stats uri /status # 访问的url
stats realm Haproxy Statistics # 统计页面认证时提示内容信息
stats auth admin:admin # 设置登录用户和密码
stats admin if TRUE # 如果认证通过,则就可以打开 status
stats hide-version # 隐藏代理服务器版本

配置好之后,重启服务访问 http://192.168.127.130:1080/status 即可看到状态信息。

记录日志

自己记录日志

1
local2.*                       /var/log/haproxy.log

交给日志服务器记录日志

配置 /etc/haproxy/haproxy.cfg

1
log         127.0.0.1 local2

开启 rsyslog 记录 haproxy 日志功能,编辑 /etc/rsyslog.conf 找到如下配置项并去掉配开头的的注释

1
2
3
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

添加如下内容

1
2
# Save haproxy log 
local2.* /var/log/haproxy.log

配置 /etc/sysconfig/rsyslog

1
2
3
4
5
# Options for rsyslogd
# Syslogd options are deprecated since rsyslog v3.
# If you want to use them, switch to compatibility mode 2 by "-c 2"
# See rsyslogd(8) for more details
SYSLOGD_OPTIONS="-r -m 0"

相关解释说明:

  • -r:  打开接受外来日志消息的功能,其监控514 UDP端口;
  • -x: 关闭自动解析对方日志服务器的FQDN信息,这能避免DNS不完整所带来的麻烦;
  • -m: 修改syslog的内部mark消息写入间隔时间(0为关闭),例如240为每隔240分钟写入一次”–MARK–”信息;
  • -h: 默认情况下,syslog不会发送从远端接受过来的消息到其他主机,而使用该选项,则把该开关打开,所有接受到的信息都可根据syslog.conf中定义的@主机转发过去.

重启服务查看日志

1
systemctl restart rsyslog haproxy

Haproxy的应用的更多相关文章

  1. [笔记]HAproxy reload config file with uninterrupt session

    HAProxy is a high performance load balancer. It is very light-weight, and free, making it a great op ...

  2. [原]HAproxy 代理技术原理探究

    HAproxy 技术分享 简介 HAProxy是一款提供高可用性.负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件 Features 1.免费 2.能够做到4层以上代理 3.高性能 ...

  3. 利用HAProxy代理SQL Server的AlwaysOn辅助副本

    利用HAProxy代理SQL Server的AlwaysOn辅助副本 公司最近数据库升级到SQL Server2014 ,并部署了alwayson高可用集群 机房内有三套程序需要读取数据库 第一套:主 ...

  4. Mysql的Haproxy反向代理和负载均衡

    HaProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.应用到Haproxy主要是因为他免费,并且基于TCP和HTTP的应用代理. ...

  5. HAProxy介绍

    简单说明 HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需 ...

  6. 对比Haproxy和Nginx负载均衡效果

    为了对比Hproxy和Nginx负载均衡的效果,分别在测试机上(以下实验都是在单机上测试的,即负载机器和后端机器都在一台机器上)做了这两个负载均衡环境,并各自抓包分析.下面说下这两种负载均衡环境下抓包 ...

  7. haproxy windows环境使用

    haproxy下载:http://pan.baidu.com/s/1miEvQUc 测试环境说明: ip地址 作用 开放端口 备注 nbproc 1 daemon defaults mode tcp ...

  8. haproxy利用ACL规则封禁自定义IP地址拒绝访问

    现在有一个需求就是在发版的时候希望除公司IP外的外网访问服务的时候都是拒绝访问的 现在利用haproxy 的acl规则作出限制 errorfile       403 /etc/haproxy/err ...

  9. HAProxy的日志配置以及ACL规则实现负载均衡

    HAProxy配置日志策略 默认情况下,HAProxy是没有配置日志的在centos6.3下默认管理日志的是rsyslog,可以实现UDP日志的接收,将日志写入文件,写入数据库先检测rsyslog是否 ...

  10. HAproxy的安装与配置讲解

    1,安装 官网下载 http://www.haproxy.org/#down cd /usr/local/src/ wget http://www.haproxy.org/download/1.4/s ...

随机推荐

  1. [Algo] 175. Decompress String II

    Given a string in compressed form, decompress it to the original string. The adjacent repeated chara ...

  2. set theory

    set theory Apart from classical logic, we assume the usual informal concept of sets. The reader (onl ...

  3. 程序员计算器HEX、EDC、OCT等等的意思

    binary 二进制 对应的是 BINoctal 八进制的  ----   OCThexadecimal 十六进制的  --- HEXdecimal 十进制的  -- DEC

  4. Cesium 生成terrain地形数据----CTB方式及步骤

    背景:项目前端使用Cesium,地形服务一直使用外网的,常常因为翻墙访问的问题,导致地形数据取不到,进而导致地球不能加载,故决定搭建自己的地形服务,彻底解决这个问题.博文包含以下几个过程: 下载原始地 ...

  5. 关于TensorFlow2的tf.function()和AutoGraph的一些问题解决

    在使用TensorFlow的AutoGraph的时候出现了一些问题,特此记录 AutoGraph did not convert this function. Try decorating it di ...

  6. 方格取数(多线程dp,深搜)

    https://www.luogu.org/problem/P1004 题目描述 设有N×N的方格图(N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0.如下图所示(见样例): 某 ...

  7. 基于Wiki的知识共享平台模型架构

    一.引言 当今的全球化知识经济社会中呈现出信息泛滥和知识更新周期短的现象,知识管理逐渐成为现代企业管理中不容忽视的一环.虚拟企业是基于共识目标而组成的动态协作组织,成员参与的流动性与各成员之间地域分布 ...

  8. 基础篇九:模块介绍(--with-http_stub_status_module)

    下面--with 即为编译安装的模块 下面我们来介绍--with-http_stub_status_module此模块 vim  /etc/nginx/conf.d/default.conf 然后检查 ...

  9. 不同SQL数据库之间表数据的实时同步-发布与订阅

    https://blog.csdn.net/rand_muse/article/details/81326879 上述文章中,如果是实时同步,选择  事务发布即可 在快照代理 那里,不需要勾选  运行 ...

  10. Python练习四-浅拷贝&深拷贝

    一.数字.字符串不论是浅拷贝.深拷贝都是指向一个地址. a = 1 b = "abc" print (id(a)) print (id(b)) a1 = a b1 = b prin ...