haproxy 新手上路

apache、nginx之类的反向代理(转发)功能,通常只能用于http协议,其它协议就不好使了(注:nginx据说商业版的,支持tcp协议了)。

haproxy可以弥补这方面的不足,haproxy支持http/tcp多种协议,可以当做rpc(thrift/gRPC/avro)框架前端的负载均衡转发中间件,下面介绍基本使用:

以下环境均为mac OSX。

一、安装

brew install haproxy 

默认安装的是1.6.0版本,注:没安装 brew的,请先访问http://brew.sh/ 安装

安装后的路径为:

/usr/local/Cellar/haproxy/1.6.0

或者,也可以直接上官网http://www.haproxy.org/#down 下载

安装完成后,输入

haproxy -version 如果能看到类似下面的输出:

HA-Proxy version 1.6.0 2015/10/13 Copyright 2000-2015 Willy Tarreau <willy@haproxy.org>

表示安装成功

二、http转发配置

随便找个目录(比如:~/work/cfg/),创建haproxy.cfg文件(文件名随意),参考内容如下:

global
    daemon
    maxconn 256

defaults
    mode http
    timeout connect 5000ms
    timeout client 50000ms
    timeout server 50000ms

listen http-in
    bind *:9000
    server server1 127.0.0.1:8081 maxconn 32

主要是最后三行,表示将本机9000端口的http访问,转发到127.0.0.1:8081端口,即访问: http://127.0.0.1:9000 相当于访问http://127.0.0.1:8081

三、启动

haproxy -f ~/work/cfg/haproxy.cfg -d 

正常的话,会输出下面这些:

Available polling systems : kqueue : pref=300, test result OK poll : pref=200, test result OK select : pref=150, test result OK Total: 3 (3 usable), will use kqueue. Using kqueue() as the polling mechanism.

此时,访问http://localhost:9000/ 应该有结果 ,同时终端会有相关的信息输出

注:如果启动时,提示bind某端口失败之类的,先检查端口是否被占用

命令 lsof -i tcp:port  (port替换成端口号,比如9000)可以查看该端口被什么程序占用,并显示pid,方便kill进程

如果端口也未占用,尝试换成一个高一些的端口,我在mac本机尝试时,刚开始使用80或81端口,始终起不来,用上述命令查端口占用,也没被占用,换成一个高位端口后,才正常启动,不知道是不是个别现象。

四、http负载均衡示例

global
    daemon
    maxconn 256

defaults
    mode http
    stats enable
    stats uri /haproxy-stats
    stats refresh 10s
    monitor-uri /haproxy-test
    balance roundrobin
    option httpclose
    option forwardfor
    timeout connect 5000ms
    timeout client 50000ms
    timeout server 50000ms

listen my-web-cluster1
    bind *:9000
    server server1 127.0.0.1:80
    server server2 192.168.1.14:80

上面的配置表示,访问http://localhost:9000/时,会转发到127.0.0.1:80或192.168.1.14:80中的一台

另外,访问 http://localhost:9000/haproxy-stats 还能看到一个统计页面, http://localhost:9000/haproxy-test 用于测试haproxy工作是否正常

五、tcp负载均衡配置示例

 1 global
 2     daemon
 3     nbproc 1
 4     pidfile /Users/yjmyzz/work/pid/haproxy.pid
 5 
 6 defaults
 7     mode tcp
 8     retries 3
 9     option redispatch
10     option abortonclose
11     maxconn 4096
12     timeout connect 5000ms
13     timeout client 30000ms
14     timeout server 30000ms
15     log 127.0.0.1 local0 notice err
16 
17 listen thrift-cluster
18     bind *:33210
19     mode tcp
20     balance roundrobin
21     server server1 localhost:33208
22     server server2 localhost:33209

注意下:8,9这二行,这表示如果某个节点挂了,重试3次以后,会转发到其它节点,即单点故障迁移

参考文章:

http://cbonte.github.io/haproxy-dconv/configuration-1.6.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏yukong的小专栏

基于SpringCloud Finchley.SR1 、Spring Oauth2 SpringBoot 2.x、 vue、element-ui 微服务基础脚手架

github 地址 跪求大家star panda微服务工程地址 panda-admin前台工程地址

5913
来自专栏测试驿栈

JMeter(十四)-自动生成测试报告

1:在你的脚本文件路径下,执行cmd命令:jmeter -n -t test.jmx -l result.jtl -e -o /tmp/ResultReport...

2094
来自专栏程序猿DD

SpringCloud实战小贴士:随机端口

太久没有更新,一时不知道该从哪儿继续,索性就从一个小技巧开始吧。 在之前的《Spring Cloud构建微服务架构》系列博文中,我们经常会需要启动多个实例的情况...

2279
来自专栏后端技术探索

nginx实现内容重定向的两种方式:rewrite和反向代理

当访问test.cc/uri,如果uri资源在项目中不存在,就会重定向 http://www.yuhaiwei.net/blog/Api_element 网页。

781
来自专栏积累沉淀

干货--安装eclipse-hadoop-plugin插件及HDFS API编程两个遇到的重要错误的解决

在Windows的eclipse上写hdfs的API程序,都会遇到两个错误,在网上查了很多资料,都没有解决的办法,经过了很多时间的研究,终于把这个问题解决了 错...

3009
来自专栏Porschev[钟慰]的专栏

Windows Server 2008 R2 配置AD(Active Directory)域控制器

配置环境 Windows版本:Windows Server 2008 R2 Enterprise                      S...

5205
来自专栏Play & Scala 技术分享

PlayScala 2.5.x - 关闭X-Forwarded-For解析

2814
来自专栏散尽浮华

Centos下添加静态路由(临时和永久有效)的操作记录

公司IDC机房服务器上部署了一套外网LB环境,默认配置的是外网ip的路由地址,由于要和其他内网机器通信,所以需要配置内网ip的路由地址。整个操作过程,记录如下,...

2209
来自专栏云计算教程系列

如何在Ubuntu 14.04上优化Tomcat安装

Tomcat是Java Servlet和JavaServer Pages技术的流行实现。它由Apache Software Foundation根据流行的Apa...

570
来自专栏守望轩

Visual Studio 2008 每日提示(二十九)

#291、启动时没有用户代码发出警告 原文链接:What warning message is suppressed by the Warn If No Us...

3905

扫码关注云+社区

领取腾讯云代金券