本文由ilanniweb提供友情贊助,首發於爛泥行天下
在前幾篇文章中,我們介紹了haproxy的配置參數,而且配置例子都是http協議(7層應用)的。
這篇文章,開始介紹haproxy的4層TCP應用。
想要獲得更多的文章,可以關注我微信ilanniweb。
一、業務要求
現在我們有兩個要求,這兩個要求的協議都是通過tcp協議的。
1.1 haproxy代理ssh
為了安全起見,要求所有業務服務器都關閉公網的連接,只開放haproxy所在的服務器,並且其他業務服務器的ssh連接通過haproxy來實現。
實際業務,訪問192.168.5.171的8098端口就是訪問192.168.5.174的ssh端口。
1.2 haproxy代理mysql
為了安全起見,要求mysql數據庫的連接只能通過內網IP,但是因為使用的是雲數據庫,所以如果公司內部要連接數據庫的話要通過haproxy來實現。
實際業務,訪問192.168.5.171的8099端口就是訪問192.168.7.7的3306端口。
二、配置haproxy
因為是haproxy的7層和4層混合使用,所以在defaults中,我們不定義haproxy的運行模式。
注意:有關http模式的相關配置參數不要出現在default中。
有關業務要求的TCP 4層應用,我們的haproxy配置如下:
listen 8099
bind 0.0.0.0:8099
mode tcp
server 174_22 192.168.5.174:22 maxconn 1024 weight 5 check inter 2000 rise 2 fall 3
listen 8098
bind 0.0.0.0:8098
mode tcp
server 77_3306 192.168.7.7:3306 maxconn 1024 weight 5 check inter 2000 rise 2 fall 3
整個haproxy的配置文件如下:
grep -vE "^#|^$" haproxy.cfg
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
maxconn 4096
uid 1005
gid 1005
daemon
defaults
log global
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen admin_stats
bind 192.168.5.171:1080
mode http
option httplog
maxconn 10
stats refresh 30s
stats uri /stats
stats auth admin:admin
stats hide-version
frontend weblb
bind *:80
acl is_dg hdr_beg(host) dg.test.com
mode http
acl is_ilanni hdr_beg(host) ilanni.test.com
acl is_171 hdr_beg(host) 192.168.5.171
acl is_ip src 192.168.5.140
acl is_port dst_port 8090
use_backend acl if is_171 is_ip
use_backend mui_acl if is_171 is_ip is_port
use_backend dgserver if is_dg
use_backend ilanni if is_ilanni
use_backend 171server if is_171
default_backend backend_default
backend dgserver
balance source
mode http
server web1 192.168.5.171:8080 maxconn 1024 weight 3 check inter 2000 rise 2 fall 3
server web2 192.168.5.174:8080 maxconn 1024 weight 3 check inter 2000 rise 2 fall 3
server web3 192.168.5.178:8080 maxconn 1024 weight 3 check inter 2000 rise 2 fall 3
backend 171server
balance roundrobin
mode http
server dg1 192.168.5.174:80 check
server dg2 192.168.5.178:80 check
backend ilanni
server web1 www.yuanbaopu.com:80 weight 3 check inter 2000 rise 2 fall 3
mode http
backend acl
balance source
mode http
server web1 www.ilanni.com:80 maxconn 1024 weight 3 check inter 2000 rise 2 fall 3
backend mui_acl
balance source
mode http
server web1 192.168.5.178:80 maxconn 1024 weight 3 check inter 2000 rise 2 fall 3
backend backend_default
server web1 192.168.5.178:8080 weight 3 check inter 2000 rise 2 fall 3
mode http
listen 8090
bind 0.0.0.0:8090
mode http
balance roundrobin
server web1 192.168.5.174:8090 maxconn 1024 weight 5 check inter 2000 rise 2 fall 3
server web2 192.168.5.178:8090 maxconn 1024 weight 3 check inter 2000 rise 2 fall 3
listen 8099
bind 0.0.0.0:8099
mode tcp
server 174_22 192.168.5.174:22 maxconn 1024 weight 5 check inter 2000 rise 2 fall 3
listen 8098
bind 0.0.0.0:8098
mode tcp
server 77_3306 192.168.7.7:3306 maxconn 1024 weight 5 check inter 2000 rise 2 fall 3
三、驗證要求
haproxy配置完畢后,我們來驗證haproxy的配置是否正確,如下:
3.1 驗證haproxy代理ssh
現在我們來驗證haproxy代理ssh,在Linux客戶端上使用如下命令:
ssh -p8099 wangxy@192.168.5.171
通過上圖,我們可以很明顯的看出haproxy成功的代理了192.168.5.174的ssh端口。
3.2 驗證haproxy代理mysql
現在我們來驗證haproxy代理mysql,在Linux客戶端上使用如下命令:
mysql -P8098 -h192.168.5.171 -uroot –p
通過上圖,我們可以很明顯的看出haproxy成功的代理了192.168.7.7的3306端口(也即是mysql)。