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

原创 2016年08月30日 14:52:47


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





基于ZooKeeper和Thrift构建动态RPC调用

说明:这次的博客是自己在复旦大学一个课程的小作业。有修改、调整一、基本功能  实现服务端向ZooKeeper集群注册自己提供的服务,并且把自己的IP地址和服务端口创建到具体的服务目录下。客户端向Zoo...
  • likewindy
  • likewindy
  • 2016年05月09日 12:44
  • 8510

中间件服务器架构:Keepalived+HaProxy+Thrift

目录: 1.原理图 2.CentOS 6.5下安装Haproxy 3.CentOS 6.5下安装Keepalived 4.windows下启动ThriftServer(Linux同理) 5.wind...
  • ceasadan
  • ceasadan
  • 2016年09月01日 16:20
  • 899

基于zookeeper、连接池实现的Thrift服务负载均衡和服务发现

转载自:http://blog.csdn.net/zhu_tianwei/article/details/44115667 对于Thrift服务化的改造,主要是客户端,可以从如下几个方面进行:   ...
  • zero__007
  • zero__007
  • 2017年03月31日 18:51
  • 1628

基于Thrift的高可用RPC开源项目

1. HARPC是什么HARPC(High Availability RPC)是基于Thrift的跨语言、高可用的RPC框架。具备高性能、高可用、轻量级等特点,在百分点科技内部服务中广泛使用。 开源...
  • qfdai2
  • qfdai2
  • 2015年10月17日 13:16
  • 1236

Thrift+Haproxy负载均衡

应用需求项目时间使用中,后台存在4个使用thrift创建的A、B、C、D四个相同的Rpc服务,另外两个相同的服务E、F需要请求Rpc服务获取服务结果,在实际应用中E、F两个服务的请求需要随机的发送到四...
  • zldeng_scir
  • zldeng_scir
  • 2016年06月21日 20:17
  • 2886

thrift 客户端 ,负载均衡 连接池

thrift 客户端 负载均衡 https://github.com/yikangfeng/thrift-protocol-client https://github.com/cyfonly/Th...
  • fei33423
  • fei33423
  • 2017年05月17日 23:05
  • 285

由浅入深了解Thrift(三)——Thrift server端的几种工作模式分析

http://blog.csdn.net/houjixin/article/details/42779915 五、  Thrift服务器端几种工作模式分析与总结 Thrift为...
  • sunmenggmail
  • sunmenggmail
  • 2015年07月09日 16:05
  • 12632

基于zookeeper、连接池、Failover/LoadBalance等改造Thrift 服务化

对于Thrift服务化的改造,主要是客户端,可以从如下几个方面进行: 1.服务端的服务注册,客户端自动发现,无需手工修改配置,这里我们使用zookeeper,但由于zookeeper本身提供的客户端使...
  • tianwei7518
  • tianwei7518
  • 2015年03月08日 10:01
  • 14841

中间件服务器架构:Keepalived+HaProxy+Thrift

目录: 1.原理图 2.CentOS 6.5下安装Haproxy 3.CentOS 6.5下安装Keepalived 4.windows下启动ThriftServer(Linux同理) 5.wind...
  • ceasadan
  • ceasadan
  • 2016年09月01日 16:20
  • 899

基于zookeeper、连接池实现的Thrift服务负载均衡和服务发现

转载自:http://blog.csdn.net/zhu_tianwei/article/details/44115667 对于Thrift服务化的改造,主要是客户端,可以从如下几个方面进行:   ...
  • zero__007
  • zero__007
  • 2017年03月31日 18:51
  • 1628
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用HaProxy实现Thrift服务端的负载均衡
举报原因:
原因补充:

(最多只允许输入30个字)