使用HaProxy实现Thrift服务端的负载均衡

来源:互联网 发布:mac os sierra壁纸 编辑:程序博客网 时间:2024/06/01 08:59


1.测试环境

操作系统:2台windows(Linux原理相同)

Haproxy工具:实现tcp负载均衡,轮训分配给2个Thrift Server提供服务

Thrift服务端:2个Thrift Server(提供一样的服务,多个Server类似)

Thrift客户端:没有Haproxy时是TCP直接连接Thrift-Server;有了Haproxy以后,TCP连接Haproxy的监听端口即可,由Haproxy来分配给Thrift-Server,客户端不用知道有哪些Thrift-Server


备注:

a.由于在生产中使用的 windows Server,比较坑,没有keepalived工具,如果Haproxy部署的机器宕机了,会造成服务不可用,所以想了个比较简单的替代方法:

在两台机器上,部署两个一样的Haproxy程序;

在客户端连接Haproxy时,哪一个Haproxy程序能够连接成功就连接哪个,并写配置文件,下次这一个Haproxy程序作为首次连接程序;(并发量不高,应该够用了,但是Haproxy故障不能收到通知,还是用keepalived好,可以收到故障邮件通知)


2.windows下安装Haproxy工具

官网下载:没有翻墙的同学打不开

csdn下载:http://download.csdn.net/tag/haproxy

下载后直接解压即可:



3.Haproxy配置文件修改

###########全局配置#########global        daemon        nbproc 1        pidfile /var/run/haproxy.pid########默认配置############defaults        mode http               #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK        retries 2               #两次连接失败就认为是服务器不可用,也可以通过后面设置        option redispatch       #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器        option abortonclose     #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接        maxconn 4096            #默认的最大连接数        timeout connect 5000ms  #连接超时        timeout client 30000ms  #客户端超时        timeout server 30000ms  #服务器超时        #timeout check 2000      #=心跳检测超时        log 127.0.0.1 local0 err #[err warning info debug]########统计页面配置########listen admin_stats        bind 0.0.0.0:1080               #监听端口        mode http                       #http的7层模式        option httplog                  #采用http日志格式        #log 127.0.0.1 local0 err        maxconn 10        stats refresh 30s               #统计页面自动刷新时间        stats uri /stats                #统计页面url        stats realm XingCloud\ Haproxy  #统计页面密码框上提示文本        stats auth admin:admin          #统计页面用户名和密码设置        stats hide-version              #隐藏统计页面上HAProxy的版本信息########testThrift配置#################listen ThriftServer    bind 0.0.0.0:8888    balance roundrobin    mode tcp     option tcplog    option tcp-check#maxconn 4086    log 127.0.0.1 local2 debug    server ThriftServer1 127.0.0.1:9090   check    server ThriftServer2 192.168.62.167:9090    check########frontend配置##############
对配置文件的说明:

a.统计页面配置:Haproxy提供了一个html页面用来查看监听运行状态及日志,可输入地址访问:

http://localhost:1080/stats

b.testThrift配置:

bind 0.0.0.0:1080  #监听端口———Thrift客户端连接此IP和端口

server ThriftServer2 192.168.62.167:9090   check————Haproxy做负载均衡的Thrift服务端IP及端口


4.启动Haproxy

haproxy.exe -f haproxy.cfg -d


5.启动ThriftSerer



6.启动Thrift客户端

Thrift客户端连接Haproxy监听端口

public const string SERVERIP = "127.0.0.1";        public static int SERVERPORT = 8888;        public static int TIMEOUT = 5000;                public void startClient()        {            TTransport transport = null;            try            {                transport = new TSocket(SERVERIP, SERVERPORT, TIMEOUT);                //协议要和服务端一致                TProtocol protocol = new TBinaryProtocol(transport);                MysqlService.Client client = new MysqlService.Client(protocol);                transport.Open();                EquipNavTreeNode user = new EquipNavTreeNode();                user.Description = "liqb";                               var listuser2 = client.getUser(1);                Console.WriteLine("getUser success");            }            catch (Exception e)            {                Console.WriteLine(e.StackTrace);            }            finally            {                if (null != transport)                {                    //close                    transport.Close();                }            }        }

7.Thrift-Server轮询

来自客户端的请求被Haproxy转给了2个Thrift服务端。(本例HaProxy用的roundrobin负载均衡算法)



8.查看Haproxy运行状态

输入地址:http://localhost:1080/stats  用户名密码:admin





0 0