新架构第6天

Q1、编译安装tengine,openresty

1、安装依赖包,下载源码包
[root@centos7 ~]# yum install gcc pcre-devel openssl-devel zlib-devel perl-ExtUtils-Embed git -y
[root@centos7 ~]# cd /usr/local/src/
[root@centos7 src]# wget wget http://tengine.taobao.org/download/tengine-2.1.2.tar.gz
[root@centos7 src]# git clone https://github.com/openresty/echo-nginx-module.git

2、编译安装
[root@centos7 src]# tar xf tengine-2.1.2.tar.gz 
[root@centos7 src]# cd tengine-2.1.2/
[root@centos7 tengine-2.1.2]# useradd -s /sbin/nologin -r nginx
[root@centos7 tengine-2.1.2]# ./configure --prefix=/apps/nginx --user=nginx --group=nginx --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-http_concat_module --add-module=/usr/local/src/echo-nginx-module
[root@centos7 tengine-2.1.2]# make && make install

3、查看编译后的nginx及加载模块
[root@centos7 tengine-2.1.2]# /apps/nginx/sbin/nginx -V
Tengine version: Tengine/2.1.2 (nginx/1.6.2)
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 
TLS SNI support enabled
configure arguments: --prefix=/apps/nginx --user=nginx --group=nginx --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-http_concat_module --add-module=/usr/local/src/echo-nginx-module
loaded modules:
    ...
    ngx_http_concat_module (static)
    ...
    ngx_http_echo_module (static)

Q2、搭建基于LNMP的WordPress站点

1、准备好源码包
[root@Centos7 ~]# cd /usr/local/src/
[root@Centos7 src]# ls -lh
total 82M
-rw-r--r-- 1 root root   69M Dec  6  2019 mariadb-10.2.25.tar.gz
-rw-r--r-- 1 root root 1009K Apr 28 17:02 nginx-1.16.1.tar.gz
-rw-r--r-- 1 root root   12M Mar  7 22:26 php-7.3.15.tar.xz

2、编译mariadb-10.2.25
[root@Centos7 src]# mkdir /data/mysql
[root@Centos7 src]# useradd -r -s /sbin/nologin -d /data/mysql mysql
[root@Centos7 src]# chown mysql.mysql /data/mysql
#安装依赖
[root@Centos7 src]# yum install bison bison-devel zlib-devel libcurl-devel libarchive-devel boost-devel gcc gcc-c++ cmake ncurses-devel gnutls-devel libxml2-devel openssl-devel libevent-devel libaio-devel libdb-cxx-devel -y
#编译
[root@Centos7 ~]$ tar xf mariadb-10.2.25.tar.gz
[root@Centos7 ~]$ cd mariadb-10.2.25/
[root@Centos7 mariadb-10.2.25]$ cmake . -DCMAKE_INSTALL_PREFIX=/apps/mysql \
-DMYSQL_DATADIR=/data/mysql/ \
-DSYSCONFDIR=/etc/ \
-DMYSQL_USER=mysql \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITHOUT_MROONGA_STORAGE_ENGINE=1 \
-DWITH_DEBUG=0 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8_general_ci
[root@Centos7 mariadb-10.2.25]$ make && make install
[root@Centos7 mariadb-10.2.25]$ chown mysql.mysql /apps/mysql
#编译后一些准备工作
[root@Centos7 mariadb-10.2.25]#  echo 'PATH=/apps/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
[root@Centos7 mariadb-10.2.25]# . /etc/profile.d/mysql.sh
[root@Centos7 mariadb-10.2.25]# cd /apps/mysql/
[root@Centos7 mysql]# cp support-files/my-huge.cnf /etc/my.cnf
[root@Centos7 mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[root@Centos7 mysql]# vim /etc/my.cnf
[client]
default-character-set=utf8mb4
[mysqld]
character_set_server=utf8mb4
[root@Centos7 mysql]# scripts/mysql_install_db --datadir=/data/mysql/ --user=mysql

3、编译php-fpm
[root@Centos7 src]# yum install libxml2-devel bzip2-devel libmcrypt-devel gcc openssl-devel -y
[root@Centos7 src]# tar xf php-7.3.15.tar.xz 
[root@Centos7 src]# cd php-7.3.15/
[root@Centos7 php-7.3.15]# ./configure --prefix=/apps/php \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-openssl \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr \
--with-config-file-path=/etc \
--with-config-file-scan-dir=/etc/php.d \
--enable-mbstring \
--enable-xml \
--enable-sockets \
--enable-fpm \
--enable-maintainer-zts \
--disable-fileinfo
[root@Centos7 php-7.3.15]# make && make install

#准备配置文件
[root@Centos7 php-7.3.15]# cp php.ini-production /etc/php.ini
[root@Centos7 php-7.3.15]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@Centos7 php-7.3.15]# chmod +x /etc/init.d/php-fpm 
[root@Centos7 php-7.3.15]# cp /apps/php/etc/php-fpm.conf.default /apps/php/etc/php-fpm.conf
[root@Centos7 php-7.3.15]# cp /apps/php/etc/php-fpm.d/www.conf.default /apps/php/etc/php-fpm.d/www.conf
[root@Centos7 php-7.3.15]# vim /apps/php/etc/php-fpm.d/www.conf
user = nginx         
group = nginx
listen = /var/run/php7-fpm.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

4、编译nginx
[root@Centos7 src]# yum install git gcc pcre-devel openssl-devel zlib-devel perl-ExtUtils-Embed -y
[root@Centos7 src]# tar xf nginx-1.16.1.tar.gz 
[root@Centos7 src]# git clone https://github.com/openresty/echo-nginx-module.git
[root@Centos7 src]# cd nginx-1.16.1/
[root@Centos7 nginx-1.16.1]# groupadd -r nginx
[root@Centos7 nginx-1.16.1]# useradd -r -g nginx -s /sbin/nologin nginx
[root@Centos7 nginx-1.16.1]# ./configure \
--prefix=/apps/nginx \
--user=nginx --group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-http_perl_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module \
--add-module=/usr/local/src/echo-nginx-module
[root@Centos7 nginx-1.16.1]# make && make install
[root@Centos7 nginx-1.16.1]# ln -sv /apps/nginx/sbin/nginx /usr/sbin/

#安装wordpress
1、配置nginx支持fastcgi
[root@Centos7 ~]# cd /apps/nginx/
[root@Centos7 nginx]# vim conf/nginx.conf
http {
    ...
    sendfile        on;
    tcp_nopush     on;
    tcp_nodelay on;
    keepalive_timeout  65;    
    include "/apps/nginx/conf.d/*.conf";
    ...
}
[root@Centos7 nginx]# mkdir conf.d
[root@Centos7 nginx]# vim conf.d/www.conf
server_tokens off;
server {
    listen 80;
    server_name www.x.com;
    root /data/php;
    index index.php index.html;
    access_log logs/x.com.access.log;

    location ~* \.php$ {
        fastcgi_pass unix:/var/run/php7-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

2、创建mysql用户
[root@Centos7 ~]# service mysqld start
[root@Centos7 ~]# mysql -e 'create database wordpress;grant all on wordpress.* to wpuser@"192.168.37.%" identified by "centos";flush privileges;'

3、安装wordpress网站
[root@Centos7 ~]# mkdir /data/php
[root@Centos7 ~]# tar -xf wordpress-5.4.1-zh_CN.tar.gz -C /data/php
[root@Centos7 ~]# cd /data/php/wordpress/
[root@Centos7 wordpress]# cp wp-config-sample.php wp-config.php
[root@Centos7 wordpress]# vim wp-config.php
define( 'DB_NAME', 'wordpress' );
define( 'DB_USER', 'wpuser' );
define( 'DB_PASSWORD', 'centos' );
define( 'DB_HOST', '192.168.37.87' );
[root@Centos7 wordpress]# mkdir wp-content/uploads
[root@Centos7 wordpress]# cp * ../
[root@Centos7 ~]# chown -R nginx.nginx /data/php/

4、服务启动
[root@Centos7 ~]# service php-fpm start
[root@Centos7 ~]# nginx

#客户端测试
http://192.168.37.87/

Q3、详解haproxy的几种算法实现原理,应用场景。

  1. 静态调度算法

    • 静态算法:按照事先定义好的规则轮询公平调度,不关心后端服务器的当前负载、链接数和相应速度等,且无法实时修改权重,只能重启后生效。
      • static-rr:基于权重的轮询调度,不支持权重的运行时调整及后端服务器慢启动,其后端主机数量没有限制
      • first:根据服务器在列表中的位置,自上而下进行调度,但是其只会当第一台服务器的连接数达到上限,新请求才会分配给下一台服务,因此会忽略服务器的权重设置。
  2. 动态调度算法

    • 动态算法:基于后端服务器 状态进行调度适当调整,比如优先调度至当前负载较低的服务器,且权重可以在haproxy运行时动态调整无需重启。
      • roundrobin(默认):基于权重的轮询动态调度算法,支持权重的运行时调整,不等于lvs 的rr,支持慢启动即新加的服务器会逐渐增加转发数,每个后端backend中最多支持4095个server,此为默认调度算法, server 权重设置 weight
      • leastconn: 加权的最少连接的动态,支持权重的运行时调整和慢启动,即当前后端服务器连接最少的优先调度,比较适合长连接的场景使用,比如MySQL等场景。
  3. source调度算法

    • source:源地址hash,基于用户源地址hash并将请求转发到后端服务器,默认为静态即取模方式,但是可以通过hash-type支持的选项更改,后续同一个源地址请求将被转发至同一个后端web服务器,比较适用于session保持/缓存业务等场景。
      • consistent:一致性哈希,该hash是动态的,支持在线调整权重,支持慢启动,优点在于当服务器的总权重发生变化时,对调度结果影响是局部的,不会引起大的变动。

      • map-based:取模法,基于服务器权重的hash数组取模,该hash是静态的即不支持在线调整权重,不支持慢启动,其对后端服务器调度均衡,缺点是当服务器的总权重发生变化时,即有服务器上线或下线,都会因权重发生变化而导致调度结果整体改变, hash(o) mod n 。

  4. uri调度算法

    • uri:基于对用户请求的uri做hash并将请求转发到后端指定服务器

      map-based:取模法

      consistent:一致性哈希

      uri: uniform resource identifier,统一资源标识符,是一个用于标识某一互联网资源名称的字符串

  5. url_param调度算法

    • 对用户请求的url中的<params>部分中的参数name作hash计算,并由服务器总权重相除以后派发至某挑出的服务器;通常用于追踪用户,以确保来自同一个用户的请求始终发往同一个Backend Server
      假设url = http://www.magedu.com/foo/bar/index.php?k1=v1&k2=v2
      则:
      host = "www.magedu.com"
      url_param = "k1=v1&k2=v2"
  6. hdr算法

    • hdr(<name>):针对用户每个http头部(header)请求中的指定信息做hash, 此处由<name>指定的http首部将会被取出并做hash计算, 然后由服务器总权重相除以后派发至某挑出的服务器, 假如无有效的值,则会被轮询调度
  7. rdp-cookie算法

    • rdp-cookie对远程桌面的负载,使用cookie保持会话,应用于windows远程桌面,很少使用。
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342