• 烂泥:高负载均衡学习haproxy之TCP应用


    本文由ilanniweb提供友情赞助,首发于烂泥行天下

    在前几篇文章中,我们介绍了haproxy的配置参数,而且配置例子都是http协议(7层应用)的。

    这篇文章,开始介绍haproxy的4层TCP应用。

    想要获得更多的文章,可以关注我微信ilanniweb。

    clip_image001

    一、业务要求

    现在我们有两个要求,这两个要求的协议都是通过tcp协议的。

    1.1 haproxy代理ssh

    为了安全起见,要求所有业务服务器都关闭公网的连接,只开放haproxy所在的服务器,并且其他业务服务器的ssh连接通过haproxy来实现。

    实际业务,访问192.168.5.171的8098端口就是访问192.168.5.174的ssh端口。

    1.2 haproxy代理mysql

    为了安全起见,要求mysql数据库的连接只能通过内网IP,但是因为使用的是云数据库,所以如果公司内部要连接数据库的话要通过haproxy来实现。

    实际业务,访问192.168.5.171的8099端口就是访问192.168.7.7的3306端口。

    二、配置haproxy

    因为是haproxy的7层和4层混合使用,所以在defaults中,我们不定义haproxy的运行模式。

    注意:有关http模式的相关配置参数不要出现在default中。

    有关业务要求的TCP 4层应用,我们的haproxy配置如下:

    listen 8099

    bind 0.0.0.0:8099

    mode tcp

    server 174_22 192.168.5.174:22 maxconn 1024 weight 5 check inter 2000 rise 2 fall 3

    listen 8098

    bind 0.0.0.0:8098

    mode tcp

    server 77_3306 192.168.7.7:3306 maxconn 1024 weight 5 check inter 2000 rise 2 fall 3

    clip_image002

    整个haproxy的配置文件如下:

    grep -vE "^#|^$" haproxy.cfg

    global

    log 127.0.0.1 local0

    log 127.0.0.1 local1 notice

    maxconn 4096

    uid 1005

    gid 1005

    daemon

    defaults

    log global

    retries 3

    option redispatch

    maxconn 2000

    contimeout 5000

    clitimeout 50000

    srvtimeout 50000

    listen admin_stats

    bind 192.168.5.171:1080

    mode http

    option httplog

    maxconn 10

    stats refresh 30s

    stats uri /stats

    stats auth admin:admin

    stats hide-version

    frontend weblb

    bind *:80

    acl is_dg hdr_beg(host) dg.test.com

    mode http

    acl is_ilanni hdr_beg(host) ilanni.test.com

    acl is_171 hdr_beg(host) 192.168.5.171

    acl is_ip src 192.168.5.140

    acl is_port dst_port 8090

    use_backend acl if is_171 is_ip

    use_backend mui_acl if is_171 is_ip is_port

    use_backend dgserver if is_dg

    use_backend ilanni if is_ilanni

    use_backend 171server if is_171

    default_backend backend_default

    backend dgserver

    balance source

    mode http

    server web1 192.168.5.171:8080 maxconn 1024 weight 3 check inter 2000 rise 2 fall 3

    server web2 192.168.5.174:8080 maxconn 1024 weight 3 check inter 2000 rise 2 fall 3

    server web3 192.168.5.178:8080 maxconn 1024 weight 3 check inter 2000 rise 2 fall 3

    backend 171server

    balance roundrobin

    mode http

    server dg1 192.168.5.174:80 check

    server dg2 192.168.5.178:80 check

    backend ilanni

    server web1 www.yuanbaopu.com:80 weight 3 check inter 2000 rise 2 fall 3

    mode http

    backend acl

    balance source

    mode http

    server web1 www.ilanni.com:80 maxconn 1024 weight 3 check inter 2000 rise 2 fall 3

    backend mui_acl

    balance source

    mode http

    server web1 192.168.5.178:80 maxconn 1024 weight 3 check inter 2000 rise 2 fall 3

    backend backend_default

    server web1 192.168.5.178:8080 weight 3 check inter 2000 rise 2 fall 3

    mode http

    listen 8090

    bind 0.0.0.0:8090

    mode http

    balance roundrobin

    server web1 192.168.5.174:8090 maxconn 1024 weight 5 check inter 2000 rise 2 fall 3

    server web2 192.168.5.178:8090 maxconn 1024 weight 3 check inter 2000 rise 2 fall 3

    listen 8099

    bind 0.0.0.0:8099

    mode tcp

    server 174_22 192.168.5.174:22 maxconn 1024 weight 5 check inter 2000 rise 2 fall 3

    listen 8098

    bind 0.0.0.0:8098

    mode tcp

    server 77_3306 192.168.7.7:3306 maxconn 1024 weight 5 check inter 2000 rise 2 fall 3

    三、验证要求

    haproxy配置完毕后,我们来验证haproxy的配置是否正确,如下:

    3.1 验证haproxy代理ssh

    现在我们来验证haproxy代理ssh,在Linux客户端上使用如下命令:

    ssh -p8099 wangxy@192.168.5.171

    clip_image003

    通过上图,我们可以很明显的看出haproxy成功的代理了192.168.5.174的ssh端口。

    3.2 验证haproxy代理mysql

    现在我们来验证haproxy代理mysql,在Linux客户端上使用如下命令:

    mysql -P8098 -h192.168.5.171 -uroot –p

    clip_image004

    通过上图,我们可以很明显的看出haproxy成功的代理了192.168.7.7的3306端口(也即是mysql)。

  • 相关阅读:
    Android编译系统环境过程初始化分析【转】
    Android内核开发:理解和掌握repo工具【转】
    QQ空间如何设置被删除的好友不能访问空间
    用简单的C语言实现多任务轮流切换(模拟操作系统线程机制)【转】
    可重入函数与不可重入函数【转】
    关于链表中头指针和头结点的理解【转】
    C语言中static的使用方法【转】
    指针与地址的区别【转】
    柔性数组【转】
    void及void指针介绍【转】
  • 原文地址:https://www.cnblogs.com/ilanni/p/4762762.html
Copyright © 2020-2023  润新知