程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 基於TCP的Haproxy代理,TCPHaproxy代理

基於TCP的Haproxy代理,TCPHaproxy代理

編輯:MySQL綜合教程

基於TCP的Haproxy代理,TCPHaproxy代理


     HaProxy提供高可用性、負載均衡以及基於TCP和HTTP應用的代理,支持虛擬主機,它是免費、快速並且可靠的一種解決方案。應用到Haproxy主要是因為他免費,並且基於TCP和HTTP的應用代理。

  先介紹一下Haproxy的應用場景,一個是TCP代理,這邊也是我項目中應用的,另一個是HTTP代理,我就簡單介紹一下。基於Tcp協議的Haproxy代理應用場景:在VPC網絡環境下,虛機A的數據庫不能被外界網絡訪問到,只能被在同一內網環境下的虛機B訪問,這時候可以通過在虛機B上搭建Haproxy環境,通過Haproxy代理實現外部虛機C對虛機A數據庫的訪問;這裡我項目中實際運用到的場景是這樣的,在公有雲上創建RDS實例,會有VPC網絡和Classic網絡,在選擇VPC網絡創建RDS後,在進行數據同步時,會對該RDS數據庫進行數據同步,這時候由於RDS的數據庫在VPC網絡環境下,外網是不能直接訪問這個RDS數據庫。這時候我們采用的是用一個ECS雲服務器上搭建一個Haproxy代理,公網通過haproxy代理訪問這個RDS數據庫,這樣就解決了VPC網絡的訪問問題;

  基於HTTP協議的Haproxy代理應用場景:用戶訪問網站域名時,通過我們設置的Haproxy代理,HTTP請求到後端配置的web服務器上,獲得後方服務器返回的內容後重新封裝,響應給客戶端;就不啰嗦了,直接來干貨,應用haproxy代理訪問後端mysql數據庫(這裡不一定是mysql數據庫)。

(一)Haproxy下載、安裝:網上的資源都要積分,所以直接在yum上找免費資源。

yum install -y haproxy
rpm -qi haproxy
rpm -ql haproxy

(二)配置haproxy.cfg文件(重點)

cd /etc/haproxy
vim haproxy.cfg
#配置的haproxy.cfg文件
global
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon
    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
        log     global
        log 127.0.0.1 local3
        mode    http
        option httplog
        option  dontlognull
        retries 10
        option redispatch
        maxconn         2000
        timeout http-request    10s                  
        timeout queue           1m                   
        timeout connect         10s                  
        timeout client          1m                   
        timeout server          1m                   
        timeout http-keep-alive 10s                  
        timeout check           10s                  

#後端mysql配置,訪問虛機地址+端口號可以訪問後端的mysql,例如:192.168.108.133:7306可以訪問140的mysql數據庫
listen  mysql
        bind 0.0.0.0:7306
        mode tcp
        balance roundrobin
        server mysql1 192.168.108.140:3306

#haproxy監聽端口(可去掉),訪問虛機地址+端口號+/stats可以看到,例如:192.168.108.133:1080/stats
listen stats
        bind 0.0.0.0:1080
        mode http
        option httplog
        maxconn 10
        stats refresh 30s
        stats uri /stats
        stats realm XingCloud\ Haproxy
        stats auth admin:admin #用這個賬號登錄,可以自己設置
        stats auth Frank:Frank
        stats hide-version
        stats admin if TRUE

(三)創建日志文件/var/log/haproxy/haproxy.log

cd /var/log
mkdir haproxy
cd haproxy
touch haproxy.log
chmod a+w haproxy.log

(四)開啟rsyslog的haproxy的日志記錄功能

vim /etc/rsyslog.cnf --修改rsyslog.cfg文件
    $ModLoad imudp  
    $UDPServerRun 514 
    將這兩行前的#去掉。
    在local7.*                                                /var/log/boot.log之後添加如下內容
    # Save haproxy log  
    local2.*                       /var/log/haproxy/haproxy.log
vim /etc/sysconfig/rsyslog --修改rsylog文件
SYSLOGD_OPTIONS=""  改為  SYSLOGD_OPTIONS="-r -m 2 -c 2" 

(五)重啟日志和haproxy服務

systemctl restart rsyslog
systemctl restart haproxy

(六)haproxy相關命令

killall haproxy --停止haproxy
ps -ef |grep haproxy |grep -v grep --查看haproxy的運行狀態(這裡直接可以通過配置的監聽頁面也可以看到192.168.108.133:1080/stats)
netstat -plantu | grep 7306 --查看端口7306

(七)測試

 1.輸入網址http://192.168.108.133:1080/stats可以查看Haproxy的監考頁面,出現這個頁面也說明你haproxy配置成功了。

2.haproxy代理訪問後端的mysql數據庫,這裡我用的工具是Navicat。這裡7306連接的就是192.168.108.140:3306數據庫,這裡用的用戶名和密碼是140數據庫的用戶名和密碼。有疑問的同學可以在140上新建個數據庫,通過7306這個端口訪問數據庫也可以看見剛新建的數據庫。

  結束語:Haproxy功能還是挺強大的,基於Haproxy代理的web應用,還有一個強大的負載均衡這邊都沒有用到,因為項目比較緊急也沒時間去深入了解,下次有機會自己搭幾個web服務器去測試使用。這裡一直遇到一個很棘手的問題,就是測試連接後端mysql數據庫的時候,一直報Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts',最後解決的是查看140服務器上的3306端口一直有個連接占用著,並且沒有連接成功,最後只能重啟140的mysql數據庫就好使了。這個問題現在沒有辦法復現,所以這裡就不分析具體的錯誤原因了。這裡主要就是Haproxy簡單的應用,如果有不對或者疑問大家都可以積極指出。

  

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved