haproxy之tcp

最近在弄關於tcp的代理,發現haproxy口碑挺好的,一查發現淘寶網都在使用,想來性能會讓我非常滿意(馬上開始打臉)。
haproxy主要用於tcp和http兩種模式的代理(health模式正在被放棄)
http這塊我不打算在本文描述,有nginx使用經驗的會想爲什麼不使用nginx呢,這點我不想做什麼結論,開心就好。
一、haproxy的安裝(烏班圖下)

apt-get install haproxy

(如果沒有發現安裝包請更新源 apt-get update 後再安裝)
其配置文件默認爲

/etc/haproxy/haproxy.cfg

二、全局配置
在此配置開始前,先配置系統日誌輸出,不然沒法看haproxy的日誌

vi /etc/rsyslog.conf

在文件最底部加入以下代碼

local0.*    /var/log/haproxy.log

尋找文件中此部分代碼,去掉 module 與 input 前的#

# provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="514")

# provides TCP syslog reception
module(load="imtcp")
input(type="imtcp" port="514")

重啓rsyslog

/etc/init.d/rsyslog restart

=======================
完成後開始進入haproxy的配置環節
打開haproxy的配置文件

vi /etc/haproxy/haproxy.cfg

以下是一個正常的haproxy代理tcp的配置文件

lobal
    log 127.0.0.1 local0 info
    log /dev/log	local0
    log /dev/log	local1 notice
    chroot /var/lib/haproxy  #chroot運行路徑
    stats socket /run/haproxy/admin.sock mode 660 level admin
    stats timeout 1000  #超時 默認超時設置爲10秒 該值必須傳入毫秒或以{us,ms,s,m,h,d}之間的時間單位爲後綴
    stats maxconn 100  #連接數 默認情況下,統計套接字限制爲10個併發連接
    user haproxy
    group haproxy
    daemon  #以後臺形式運行harpoxy
    nbproc 1 #設置進程數量
    debug   #haproxy調試級別,建議只在開啓單進程的時候調試

defaults
    mode tcp #默認負載均衡模式爲tcp
    log	global #日誌定義
    timeout connect 3000 #定義haproxy將客戶端請求轉發至後端服務器所等待的超時時長
    timeout client  3000 #客戶端非活動狀態的超時時長
    timeout server  3000 #客戶端與服務器端建立連接後,等待服務器端的超時時長
    timeout check   1000 #健康狀態監測時的超時時間,過短會誤判,過長資源消耗
    retries 3   # 定義連接後端服務器的失敗重連次數
    option  redispatch  #當與上游服務器的會話失敗(服務器故障或其他原因)時,把會話重新分發到其他健康的服務器上,當原來故障的服務器恢復時,會話又被定向到已恢復的服務器上。還可以用”retries”關鍵字來設定在判定會話失敗時的嘗試連接的次數
    option  dontlognull  #設置日誌中不記錄空連接
    option tcplog #啓用日誌記錄tcp請求
    option abortonclose    #當服務器負載很高的時候,自動結束掉當前隊列處理比較久的連接
    maxconn 2000 #每個server最大的連接數

listen stats
    mode http
    bind *:8080
    option httplog #啓用日誌記錄HTTP請求,默認haproxy日誌記錄是不記錄HTTP請求
    stats enable # 啓用狀態統計報告
    stats refresh 30s # 統計頁面自動刷新時間
    stats hide-version # 隱藏統計頁面上HAProxy的版本信息
    stats show-node
    stats auth admin:liucheng92813? # 設置統計頁面用戶名和密碼設置
    stats uri  /haproxy?stats  #定義統計頁面的URL,默認爲/haproxy?stats
    stats admin if TRUE    #如果認證通過就做管理功能,可以管理後端的服務器
    stats realm “LOGIN”   #登陸頁面提示信息
#瀏覽器訪問 http://localhost:8080/haproxy?stats 即可看到控制面板

listen ss-in12029   #將輸入與輸出配置在一起
    bind *:12029
    balance roundrobin #基於權重進行的輪叫算法,在服務器的性能分佈經較均勻時這是一種最公平的,最合量的算法
    server server1       127.0.0.1:14029  check inter 1000 rise 2 fall 3 weight 4
    server server2    127.0.0.1:15029  check inter 1000 rise 2 fall 3 weight 6
    #check 表示啓用對此後端服務器執行健康檢查
    #inter 設置健康狀態檢查的時間間隔,單位爲毫秒
    #rise  設置人故障狀態轉換至正常狀態需要成功檢查的次數,如 rise 2:表示2次檢查正確就認爲此服務器可用。
    #fall  設置後端服務器從正常狀態轉換爲不可用狀態需要檢查的次數,如 fall 3表示3 次檢查失敗就認爲此服務器不可用
    #weight 設置後端真實服務器的權重,默認爲1,最大值爲256,設置爲0表示不參與負載均衡。


frontend ss-in12030 #配置輸入
    bind *:12030
    option tcplog
    default_backend ss-out12030
backend ss-out12030 #配置輸出
    balance roundrobin
    server 1       127.0.0.1:14030  check inter 1000 rise 2 fall 3 weight 4
    server 2    127.0.0.1:15030  check inter 1000 rise 2 fall 3 weight 4

附上重啓腳本

#!/usr/bin/env bash
WORK="/etc/haproxy"
CONFIG_NAME="haproxy.cfg"
# 重置配置文件
kill -s 9 `ps -aux | grep haproxy | awk '{ if($11=="haproxy") { print $2}}'`
haproxy -f ${WORK}/${CONFIG_NAME}
echo "haproxy 啓動完成"
# ps -ef | grep haproxy

三、潛在問題
1、haproxy 會自動計算 ulimit-n 值,儘管設置了liunx內核的tcp參數,在 haproxy.cfg 中顯示配置 ulimit-n 值後貌似沒有生效,引起了一些數據傳輸的問題,加重了延遲,可能還需要配置一些其他的東西做調整,如何調整尚不明確。
2、haproxy 在tcp模式下,官方文檔不推薦使用多實例運行
歡迎關注我的個人公衆號

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章