第十八周作业

1.LNMP架构添加Memcached支持,并验证其缓存结果

Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像视频文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。

Memcached是以守护程序(监听)方式运行于一个或多个服务器中,随时会接收客户端连接和操作。

配置:

Nginx, PHP-FPM和MariaDB安装在此忽略。


(1) memcached安装

yum -y install memcached


(2) 启动memcached

memcached -d -m 1024 -u memcache


(3)连接并测试

telnet 192.168.31.11 11211

第十八周作业


(3) 安装PHP的memcached的扩展

php连接memcached服务的模块有两个,php-pecl-memcache和php-pecl-memcached.若要安装php-pecl-memcached需要依赖libmemcached程序包,可以提供相应操作查看memcached的工具。在这里为方便演示就直接使用php-pecl-memcache扩展模块。

yum -y install php-pecl-memcache


(4) 测试PHP是否已支持Memcached

启动nginx 和php-fpm 

service nginx start 

service php-fpm start

编辑配置页  vim index.php

<?php

phpinfo();

?>

第十八周作业


(5) 测试memcached缓存

编写一个测试页

 vim  memcache.php
<?php
$mem = new Memcache;
$mem->connect(“127.0.0.1”, 11211) or die(“Could not connect”);
$version = $mem->getVersion();
echo “Server’s version: “.$version.”<br/>\n”;
$mem->set(‘hellokey’, ‘Hello World’, 0, 600) or die(“Failed to save data at the memcached server”);
echo “Store data in the cache (data will expire in 600 seconds)<br/>\n”;
$get_result = $mem->get(‘hellokey’);
echo “$get_result is from memcached server.”;
?>

第十八周作业

第十八周作业

测试完成已生效



2.HAProxy实现端口转发

用HAProxy作为负载均衡器,实现把前端请求调度到后端,前端监听80端口,转发至后端的8000端口,并会对访问资源进行判断实现不同的访问内容转发至相对应的服务器

第十八周作业

HAPROXY:  192.168.31.233

RS1:           192.168.31.26

RS2:           192.168.31.23


配置如下

RS1  RS2  安装apache 页面 修改端口为8000

在RS1 /var/www/html目录下建立一个 .php文件

在RS2 /var/www/html目录下建立一个 .html文件

分别测试访问

第十八周作业第十八周作业



yum -y install haproxy

# vim /etc/haproxy/haproxy.cfg

# this config needs haproxy-1.1.28 or haproxy-1.2.1
global
     log 127.0.0.1  local0   #日志输出配置,所有日志都记录在本机,通过local0输出
     log 127.0.0.1 local1 notice           
     #log loghost  local0 info 
     maxconn 65535                       #最大连接数
     chroot/usr/local/               针对haproxy安全性的,确保该目录下没任何文件, 任何人对该目录没写的权限,默认目录就ok     #改变当前工作目录
     pidfile /var/run/haproxy.pid
     uid haproxy                         #所属用户
     gid haproxy                         #所属组
     daemon                              #以后台形式运行haproxy
defaults
  log global
  mode http
  #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
  option dontlognull
  option httplog
  retries 3                        #两次连接失败就认为是服务器不可用
  option redispatch 
  #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
  option abortonclose
  #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
  maxconn 65535                     #默认的最大连接数
#timeout http-keep-alive 10s         #设置http-keep-alive的超时时间
# timeout queue 1m                   #一个请求在队列里的超时时间
  contimeout                5000     #连接超时
  clitimeout                50000    #客户端超时
  srvtimeout                50000    #服务器超时
  timeout check 5s                   #心跳检测超时

  stats refresh 30s                  #统计页面自动刷新时间   

  stats enable                         开启状态页

  stats uri /stats                  #统计页面url    可以自己定义  
  stats realm XXX-Haproxy    #统计页面密码框上提示文本
  stats auth admin:haproxy          #统计页面用户名和密码设置  

  stats hide-version                 #隐藏统计页面上HAProxy的版本信息

  stats admin  if   TRUE           认证成功启动管理接口



backend dynamic
  balance roundrobin

  server web1 192.168.31.26:8000 check


backend   static
  balance roundrobin

  server web2 192.168.31.23:8000 check


frontend www
  bind *:80 
    acl url_dynamic  path_end   -i .php        #path_end做字符串匹配  -i 不区分大小写  

    use_backend      dynamic    if  url_dynamic           use_backend 使用后端主机 ,条件符合条件才调用      


   default_backend static                        # 默认请求转入后端静态服务器


启动haproxy

systemctl start haproxy.service


查看HAProxy的状态页

第十八周作业


测试负载均衡效果

第十八周作业

                                                                                                  第十八周作业

HAProxy 实现了把用户来自80端口的请求转发至后端8000端口上



3.阐述varnish的功能及应用场景,并通过实际案例调试、配置、测试过程

Web缓存是指一个Web资源(html,js,css,images…)存在于Web服务器和客户端(浏览器),缓存会根据进来的请求报文做出响应,后缓存一份到本地的缓存中;当下一个请求到来的时候,如果是相同的URL,缓存会根据缓存机制决定是直接使用从缓存中响应访问请求还是向后端服务器再次发送请求,取决于缓存是否过期及其请求的内容是否发生改变。有效的缓存能减少后端主机的压力,实现快速响应用户的请求,提高用户体验。

varnish就是一种实现上述web缓存功能(通常针对于静态资源提供页面缓存)的一款开源工具,通常它也被称为http或web加速器,同时它也可以做为http反向代理工具,实现负载均衡和动静分离的功能。此外,据官网介绍,Varnish的设计不仅仅是定位于反向代理服务器,根据使用方式的不同,Varnish可扮演的角色也丰富多样,其它可实现的功能如下:

1)WEB应用防火墙;
2)DDoS攻击防护;
3)网站防盗链;
4)负载均衡;
5)integration point;
6)单点登录网关;
7)认证和认证授权;
8)后端主机快速修复;
9)HTTP路由

但在实际生产环境中varnish更多是在HAProxy、Nginx等七层负载均衡器后充当静态资源缓存的反向代理,下图是一个简化的varnish应用场景,主要用来实现静态资源缓存和动静分离

第十八周作业

1.部署web服务

######在192.168.31.26上配置动态web服务######,这里我用apache
~]# yum -y install gd php-gd gd-devel php-xml php-common php-mbstring php-ldap php-pear php-xmlrpc php-imap    php php-mysql 
######在192.168.31.23上配置静态web服务######
~]# yum install nginx -y
~]# mkdir -p /data/www
~]# vim /etc/nginx/nginx.conf
location / {
                root    /data/www;
                index   index.html index.htm;
        }
~]# systemctl start nginx.service

2.部署mariadb服务器

~]# yum install mariadb-server -y
~]# vim /etc/my.cnf
[mysqld]
...
innodb_file_per_table = ON
skip_name_resolve = ON

~]# systemctl start mariadb.service
~]# mysql
> grant all on *.* to root@'192.168.31.%' identified by 'magedu';
> flush privileges;

3.部署varnish

~]# yum install varnish -y
######将varnish的监听端口设置为80######
~]# vim /etc/varnish/varnish.params
VARNISH_LISTEN_PORT=80            
######配置varnish参数文件######
~]# vim /etc/varnish/default.vcl
######设置默认的后端静态服务器ip和端口######
backend default {
    .host = "192.168.31.23";
    .port = "80";
######配置健康状态监测######
    .probe = {
        .url = "/";
        .interval = 2s;
        .window = 5;
        .threshold = 4;
    }

}
######配置后端动态web服务器######
backend appsrv {
    .host = "192.168.31.26";
    .port = "80";
######配置健康状态监测######
    .probe = {
        .url = "/";
        .interval = 2s;
        .window = 5;
        .threshold = 4;
    }

}
######定义Purge-ACL控制######
acl purgers {
    "127.0.0.1";
    "192.168.31.0"/24;
}
######定义purge操作######
sub vcl_purge {
    return(synth(200,"Purged"));
}

sub vcl_recv {
######动静分离######
        if (req.url ~ "(?i)\.php$") {
             set req.backend_hint = appsrv;
         } else {
             set req.backend_hint = default;
         }
######如果请求方法为PURGE,且客户端IP满足acl,则执行purge操作,否则返回405页面并提示######
        if (req.method == "PURGE") {                
             if (!client.ip ~ purgers) {
                 return(synth(405,"Purging not allowed for" + client.ip));
                 return(purge);
             }
         }
}
######记录缓存命中状态######
sub vcl_deliver {
        if (obj.hits>0) {
              set resp.http.X-Cache="HIT";
    } else {
              set resp.http.X-Cache="MISS";
    }
}
######启动服务使配置生效######
~]# systemctl start varnish.service

4.创建探测页

######在192.168.31.26上创建动态探测页######
~]# vim /data/www/index.php <?php
        $conn = mysql_connect('192.168.31.72','root','magedu');
        if ($conn)
                echo "Dynamic webserver to Mariadb is OK!";
        else
                echo "Failure";
?>
######在192.168.31.23上创建静态探测页######
~]# vim /data/www/index.html
<h1>I'm Static Server!</h1>

5.varnish缓存效果测试

######在varnish CLI命令接口下创建并启用vcl######
~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082
######加载默认vcl配置文件,并命名为test1######
varnish> vcl.load test1 default.vcl 
200        
VCL compiled.
######激活test1######
varnish> vcl.use test1
200        
VCL 'test1' now active
######通过健康状态监测可以看到后端服务器都正常######
varnish> backend.list
200        
Backend name                   Refs   Admin      Probe
default(192.168.31.23,,80)      2      probe      Healthy 5/5
appsrv(192.168.31.26,,80)       2      probe      Healthy 5/5

######第一次访问静态页面,MISS######
~]# curl -I 192.168.31.233/index.html
HTTP/1.1 200 OK
Server: nginx/1.10.2
Date: Thu, 6 Jul 2017 22:18:03 GMT
Content-Type: text/html
Content-Length: 23
Last-Modified: Mon, 31 Oct 2016 12:37:02 GMT
ETag: "58173aee-e74"
X-Varnish: 2 Age: 0 Via: 1.1 varnish-v4 X-Cache: MISS Connection: keep-alive ######第二次访问静态页面,HIT!###### [root@dbserver ~]# curl -I 192.168.31.233/index.html HTTP/1.1 200 OK Server: nginx/1.10.2 Date: Thu, 6 Jul 2017 22:18:09 GMT Content-Type: text/html Content-Length: 23 Last-Modified: Mon, 31 Oct 2016 12:37:02 GMT ETag: "594a7cc1-17" X-Varnish: 32770 3 Age: 2 Via: 1.1 varnish-v4 X-Cache: HIT #第二次访问状态为HIT,说明缓存生效 Connection: keep-alive ######第一次访问动态页面,MISS###### ~]# curl -I 192.168.31.233/index.php HTTP/1.1 200 OK Server: nginx/1.10.2 Date: Wed, 5 Jul 2017 21:51:49 GMT Content-Type: text/html X-Powered-By: PHP/5.4.16 X-Varnish: 5 Age: 0 Via: 1.1 varnish-v4 X-Cache: MISS Content-Length: 4 Connection: keep-alive ######第二次访问动态页面,HIT!###### ~]# curl -I 192.168.31.233/index.php HTTP/1.1 200 OK Server: nginx/1.10.2 Date: Wed, 5 Jul 2017 23:11:13 GMT Content-Type: text/html X-Powered-By: PHP/5.4.16 X-Varnish: 32772 6 Age: 2 Via: 1.1 varnish-v4 X-Cache: HIT Content-Length: 4 Connection: keep-alive ######分别访问动静资源均正常,说明动静分离实现成功###### ~]# curl 192.168.31.233/index.html <h1>I‘m Static Server</h1> ~]# curl 192.168.31.233/index.php Dynamic Server to Mariadb is OK!

原创文章,作者:N27_Vicent,如若转载,请注明出处:http://www.178linux.com/79433

(0)
N27_VicentN27_Vicent
上一篇 2017-07-06
下一篇 2017-07-07

相关推荐

  • 初识linux:计算机的组成及功能

    一、描述计算机的组成及功能。 由冯诺伊曼提出计算机体系结构(5大部件)控制器(Controller):是整个计算机的中枢神经,其功能是对程序规定的控制信息进行解释,根据其要求进行控制,调度程序、数据、地址,协调计算机各部分工作及内存与外设的访问等。运算器(Datapath):运算器的功能是对数据进行各种算术运算和逻辑运算,即对数据进行加工处理。 (cpu由控…

    2017-12-03
  • 数据流重导向

    数据流重导向(redirect):就是将某个指令执行后应该要出现在屏幕上的数据,传输到其他的位置。 standard output:标准输出是指指令执行回传正确的讯息。 standard error output : 指令执行失败后,所回传的错误讯息。 1标准输入(stdin):代码为0,使用< <<2标准输出(stdout),代码为1,使…

    Linux干货 2016-08-08
  • grep简述

    grep(Globel Search Regular Expression and Printing out the line) 它能使用正则表达式搜索文本,并把匹配的行打印出来。 grep包括grep、egrep和fgrep。 egrep表示扩展的grep,相比grep支持更多的匹配模式, “grep -E”相当于egrep。 fgrep是fast gre…

    2017-04-06
  • 2016-08-12博客作业

    德摩根定理       在命题逻辑和逻辑代数中,德摩根定律(或称德摩根定理)是关于命题逻辑规律的一对法则。奥古斯塔斯·德摩根首先发现了在命题逻辑中存在着下面这些关系: 非(P 且 Q)=(非 P)或(非 Q) 非(P 或 Q)=(非 P)且(非 Q)     …

    Linux干货 2016-08-15
  • N25 第四周作业

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 2、编辑/etc/group文件,添加组hadoop。 3、手动编辑/etc/passwd文件新增一行,添加用户hadoop,其基本组ID为hadoop组的id号;其家目录为/home/hadoop。 4、复制/etc/sk…

    Linux干货 2017-01-04
  • Linux基础小模块

    1.基础知识小块:shell 由shell程序的自带命令:即为内置命令(builtin) 独立的可执行程序文件、文件名 :即为外部命令  [root@localhost~]#ls      ~用户当前所在目录  #:命令提示符(管理员帐号root)  $:普通用户   &nbsp…

    Linux干货 2016-08-10

评论列表(1条)

  • 马哥教育
    马哥教育 2017-07-13 16:49

    总结的很好,架构的思路清晰,给出了详细的操作过程和解释,请继续保持,加油!!!