1. 程式人生 > >使用HaProxy實現Thrift服務端的負載均衡

使用HaProxy實現Thrift服務端的負載均衡

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工具

官網下載:沒有翻牆的同學打不開

下載後直接解壓即可:


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頁面用來檢視監聽執行狀態及日誌,可輸入地址訪問:

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執行狀態