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缓存
编写一个测试页
测试完成已生效
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
stats refresh 30s #统计页面自动刷新时间
stats enable 开启状态页
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
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: 23Last-Modified: Mon, 31 Oct 2016 12:37:02 GMTETag: "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
评论列表(1条)
总结的很好,架构的思路清晰,给出了详细的操作过程和解释,请继续保持,加油!!!