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阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335