Haproxy和Tengine的編譯安裝(實現Haproxy代理轉發Tengine的http請求)

目錄

實驗環境及要求
實驗一
1.1:準備NFS
1.2:準備Tengine
1.2.1:編譯安裝Tengine
1.2.2:掛載NFS
1.2.3:配置Tengine站點
1.2.4:客戶端訪問測試
實驗二
2.1:準備Haproxy
2.1.1:編譯安裝Hapoxy
2.1.2:根據代理轉發要求,定義Haproxy配置文件
2.1.3:啟動Haproxy
2.2:準備測試靜態資源
2.3:客戶端訪問測試

實驗環境及要求

image-20200617155512032.png

實驗一:

  1. 192.168.43.73和192.168.43.74編譯安裝Tengine,均可以代理站點api.yqc.com:9001;
  2. 192.168.43.75配置NFS存儲,供73和74共享靜態資源。

實驗二:

  1. 192.168.43.219為Haproxy,為后端兩臺Tengine提供七層代理(api.yqc.com:9001);
  2. 192.168.43.73和192.168.43.74為Tengine服務器,經Haproxy代理轉發后,73負責響應路徑為/a的請求,74負責響應路徑為/b的請求。

實驗一

1.1:準備NFS

在192168.43.75上安裝nfs,并進行相應配置:

~]# yum install nfs-utils -y

~]# mkdir /data/tengine -p

~]# vim /etc/exports
/data/tengine *(rw,no_root_squash)

~]# systemctl start nfs
~]# systemctl enable nfs

1.2:準備Tengine

1.2.1:編譯安裝Tengine

tengine是基于nginx開發的,官網下載地址:http://tengine.taobao.org/download.html

2.png

這里使用Tengine-2.3.0,在192.168.43.73和74上分別編譯安裝Tengine:

執行下方命令準備編譯基礎環境:

~]# yum install -y vim lrzsz tree screen psmisc lsof tcpdump wget ntpdate gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel net-tools iotop bc zip unzip zlib-devel bash-completion nfs-utils automake libxml2 libxml2-devel libxslt libxslt-devel perl perl-ExtUtils-Embed

下載解壓tengine:

~]# cd /usr/local/src
src]# wget http://tengine.taobao.org/download/tengine-2.3.0.tar.gz
src]# tar zxvf tengine-2.3.0.tar.gz
src]# cd tengine-2.3.0/

進行編譯安裝:

#進行編譯
tengine-2.3.0]# ./configure --prefix=/usr/local/tengine --user=tengine --group=tengine --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module --with-http_perl_module

#安裝
tengine-2.3.0]# make && make install

添加tengine用戶:

~]# useradd tengine -s /sbin/nologin -u 2001

創建nginx命令軟鏈接:

~]# ln -sv /usr/local/tengine/sbin/nginx /usr/bin/nginx

驗證:

~]# nginx -v
Tengine version: Tengine/2.3.0 (nginx/1.15.9)

~]# nginx
~]# ps -ef | grep nginx
root      19949      1  0 12:10 ?        00:00:00 nginx: master process nginx
tengine   19950  19949  0 12:10 ?        00:00:00 nginx: worker process

~]# lsof -i:80
COMMAND   PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   19949    root    6u  IPv4  58815      0t0  TCP *:http (LISTEN)
nginx   19950 tengine    6u  IPv4  58815      0t0  TCP *:http (LISTEN)

1.2.2:掛載NFS

為兩臺Tengine服務器分別安裝nfs,用于掛載NFS存儲:

~]# yum install nfs-utils -y

~]# showmount -e 192.168.43.75
Export list for 192.168.43.75:
/data/tengine *

掛載NFS存儲:

~]# mkdir /data/tengine -p
~]# mount -t nfs 192.168.43.75:/data/tengine/ /data/tengine/
~]# df -TH
192.168.43.75:/data/tengine nfs4       52G  1.4G   50G   3% /data/tengine

配置開機掛載:

~]# vim /etc/fstab
192.168.43.75:/data/tengine /data/tengine nfs defaults,_netdev 0 0
#加上_netdev參數后,啟動系統掛載分區時,會有一個超時時間,避免了無法訪問網絡存儲而一直卡在掛載那里無法啟動系統。

驗證掛載參數:

~]# umount /data/tengine
~]# mount -a
~]# df -TH
192.168.43.75:/data/tengine nfs4       52G  1.4G   50G   3% /data/tengine

1.2.3:配置Tengine站點

此為模仿api調用,這里配置tengine監聽在9001端口,server_name為api.yqc.com。

在兩臺Tengine上都進行如下配置:

~]# cd /usr/local/tengine/
tengine]# mkdir conf.d
tengine]# vim conf/nginx.conf
……
http {
    include       /usr/local/tengine/conf.d/*.conf;
    ……
}

tengine]# vim conf.d/api_yqc.conf
server {
    listen 9001;
    server_name api.yqc.com;
    location / {
        root /data/tengine;
    }
}

~]# nginx -t
~]# nginx -s reload

~]# vim /data/tengine/index.html
page api.yqc.com:9001

1.2.4:客戶端訪問測試

~]# vim /etc/hosts
192.168.43.73   api.yqc.com

~]# curl api.yqc.com:9001
page api.yqc.com:9001

~]# vim /etc/hosts
192.168.43.74   api.yqc.com

~]# curl api.yqc.com:9001
page api.yqc.com:9001

實驗二

2.1:準備Haproxy

2.1.1:編譯安裝Hapoxy

192.168.43.219上操作

安裝基礎依賴包:

~]# yum install gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl  openssl-devel systemd-devel net-tools vim iotop bc  zip unzip zlib-devel lrzsz tree screen lsof tcpdump wget ntpdate -y

編譯安裝haproxy-1.8.20:

~]# cd /usr/local/src/
src]# ll haproxy-1.8.20.tar.gz 
-rw-r--r--. 1 root root 2083917 Jun 17 17:00 haproxy-1.8.20.tar.gz

src]# tar zxvf haproxy-1.8.20.tar.gz
src]# cd haproxy-1.8.20/

#編譯
haproxy-1.8.20]# make  ARCH=x86_64 TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1  USE_CPU_AFFINITY=1  PREFIX=/usr/local/haproxy

#USE_CPU_AFFINITY=1為開啟haproxy進程與CPU核心綁定
#USE_SYSTEMD=1為支持使用-Ws參數(systemd-aware master-worker 模式)啟動Haproxy,從而實現單主進程多子進程運行模式。

#安裝
haproxy-1.8.20]# make install PREFIX=/usr/local/haproxy

haproxy-1.8.20]# cp haproxy  /usr/sbin/

準備啟動腳本文件:

~]# vim /lib/systemd/system/haproxy.service
[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target

[Service]
ExecStartPre=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf -c -q
ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf -p /run/haproxy.pid
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target

驗證版本:

~]# haproxy -v
HA-Proxy version 1.8.20 2019/04/25
Copyright 2000-2019 Willy Tarreau <willy@haproxy.org>

2.1.2:根據代理轉發要求,定義Haproxy配置文件

實驗要求192.168.43.73負責響應路徑為/a的請求,192.168.43.74負責響應路徑為/b的請求,這里通過Haproxy的ACL中的path_beg,來匹配請求URL的開頭,實現不同路徑的請求調度。

~]# mkdir /etc/haproxy/conf -p
~]# vim /etc/haproxy/haproxy.cfg 
global
maxconn 100000
chroot /usr/local/haproxy
#stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
uid 99
gid 99
daemon
nbproc 2
cpu-map 1 0
cpu-map 2 1
pidfile /usr/local/haproxy/run/haproxy.pid
log 127.0.0.1 local3 info

defaults
option http-keep-alive
option  forwardfor
maxconn 100000
mode http
timeout connect 300000ms
timeout client  300000ms
timeout server  300000ms

listen api
  bind 192.168.43.219:9001
  mode http
  acl a_request path_beg -i /a
  use_backend a_server if a_request
  acl b_request path_beg -i /b
  use_backend b_server if b_request

backend a_server
  server a1 192.168.43.73:9001 weight 1 check port 9001 inter 3s fall 3 rise 5

backend b_server
  server b1 192.168.43.74:9001 weight 1 check port 9001 inter 3s fall 3 rise 5

2.1.3:啟動Haproxy

~]# systemctl daemon-reload
~]# systemctl start haproxy
~]# systemctl enable haproxy
~]# ps -ef | grep haproxy
root      37810      1  0 17:10 ?        00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf -p /run/haproxy.pid
nobody    37813  37810  0 17:10 ?        00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf -p /run/haproxy.pid
nobody    37814  37810  0 17:10 ?        00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf -p /run/haproxy.pid

2.2:準備測試靜態資源

準備/a和/b路徑的靜態資源,以驗證配置結果(因為NFS是共享的,無法從訪問結果上直觀看出到底是哪臺Tengine響應了請求,所以這里先把NFS的分區卸載,在兩臺Tengine本地分別創建/a和/b的訪問頁面):

192.168.43.73:

~]# umount /data/tengine 
~]# mkdir /data/tengine/a
~]# vim /data/tengine/a/index.html
a page(192.168.43.73)

192.168.43.74:

~]# umount /data/tengine 
~]# mkdir /data/tengine/b
~]# vim /data/tengine/b/index.html
b page(192.168.43.74)

2.3:客戶端訪問測試

~]# vim /etc/hosts
192.168.43.219  api.yqc.com

~]# curl api.yqc.com:9001/a/index.html
a page(192.168.43.73)
~]# curl api.yqc.com:9001/b/index.html
b page(192.168.43.74)
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,333評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,491評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,263評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,946評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,708評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,409評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,939評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,774評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,641評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,872評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,650評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373