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

时间: 2024-09-20 10:44:47

haproxy 新手上路的相关文章

EAServer 新手上路----JaguarCts开发者必读

server SyBase EnterPrise Application Server新手上路 Sybase EAServer的文章也有一些,很少提及到开发中的一些细节问题.本人从事JaguarCts开发不久,遇到了许多细节问题,想来刚从事JaguarCts开发者也会遇上,以做参考,另则心中还存有许多问题,故撰此文,起抛砖引玉之效,望JaguarCts高手能释疑,深表感谢. 一.系统配置部分:1. 运行环境:WIN2000 SERVER版,SP2补丁,P3850CPU,PB8.0Beta+EAS

PHP新手上路基础教程目录

基础教程 PHP新手上路基础入门教程目录清单,本教程由网页教学网收集整理希望对初学PHP的朋友有所帮助,当您转载时别忘了加上本站的连接,谢谢! PHP新手上路基础简介 为什么要选择PHP 从一个简单的程序来了解PHP PHP入门之数据类型 建设一个简单交互的网站(一) 用include和require进行模块化,从HTML到PHP 建设一个简单交互的网站(二) 计数器 反馈表单 站内搜索引擎 建设一个简单交互的网站(三) 密码验证 建设一个简单交互的网站(四) 文件上传 建设一个简单交互的网站(

归并排序-新手上路,链表学习中,问题是对功能函数不理解,问题已备注,请帮我在问题处写思路,尤其功能函数,谢谢!

问题描述 新手上路,链表学习中,问题是对功能函数不理解,问题已备注,请帮我在问题处写思路,尤其功能函数,谢谢! //第九章章末习题第10题#include//建立a b两链表包含学号成绩,把两个链表合并升序排列输出.求思路!#include#define LEN sizeof(struct student) struct student{ long num; int score; struct student * next; };struct student listalistb;int nsu

[新手上路]为什么同样一个sql文件 导入mysql毫无问题但是导入sql2005各种报语法错误

问题描述 [新手上路]为什么同样一个sql文件 导入mysql毫无问题但是导入sql2005各种报语法错误 DROP TABLE IF EXISTS messages; CREATE TABLE messages (id int(11) NOT NULL AUTO_INCREMENT,saver varchar(255) DEFAULT NULL,savetime varchar(255) DEFAULT NULL,content varchar(255) DEFAULT NULL,recont

安卓加速度传感器-[新手上路]安卓?怎么调用加速度传感器的数据

问题描述 [新手上路]安卓?怎么调用加速度传感器的数据 大神们有没有代码包,或者在哪里可以找到类似的程序源代码想要加速度传感器数据进行处理 解决方案 http://blog.sina.com.cn/s/blog_45e6be0801013mzm.html

新手上路

问题描述 请问下在这论坛上面怎么下载东西我看了半天都没看到需要积分下载还是什么的 解决方案 解决方案二:有下载频道,去下载频道去下.有的需要积分,有的不需要积分.下载积分.解决方案三:先后找到下面图中的2个按钮:http://hi.csdn.net/attachment/201111/9/139605_1320815592s41G.jpg解决方案四:飘过哈·解决方案五:新手上路危险啊.解决方案六: 解决方案七:我们一样,呵呵,互相鼓励,共同进步解决方案八:新手上路了,大家让开点,被被碰着啦!快闪

金牛写卡8 1的用法-金牛读卡 金牛写卡8.1的用法 新手上路 求老师讲解

问题描述 金牛读卡 金牛写卡8.1的用法 新手上路 求老师讲解 金牛写卡8.1的用法 新手上路 求老师讲解

c语言-新手上路,求教一个C语言问题

问题描述 新手上路,求教一个C语言问题 C语言,输出n个学生成绩,并把输出的成绩从大到小排序,求代码...... 解决方案 这个书上有吧..... 解决方案二: 代码还是要自己写.不要这样 解决方案三: c语言中的一个问题关于C语言的一个问题一个C语言问题---------------------- 解决方案四: 就用if语句就行了,把学生成绩定为数组,然后从第一个开始与下一个比较,如果前面的小于后面的就交换,就是冒泡法排序. 解决方案五: ? //依次输入10个学生的成绩 #include?"

本人自学编程新手上路请问我的这个怎么错了

问题描述 本人自学编程新手上路请问我的这个怎么错了 解决方案 目测中英文不区分问题,在编程的时候切记切换为英文状态,而且最后一行应该是:printf("n"); 解决方案二: 第一个for循环中最后一个表达式怎么是1==,这是啥意思啊? 解决方案三: i==应该是i++吧,而且最后一行应该是:printf("n");