一、PHP源码编译
从服务器获取php源码编译压缩包  解压  安装PHP配置所需的依赖性软件  最后两个onigurma需要去服务器获取,镜像软件包没有自带   devel指的是开发软件包  开始配置,–prefix选项指定配置安装的路径,安装后可执行文件放到/usr/local/php目录  开始编译  开始安装  进入安装后的php目录; 复制一个默认的配置文件,并命名为php-fpm.conf  打开注释, 启用fpm管理器(使用systemd方式进行管控)  www.conf文件在php-fpm.d目录下,是php-fpm进程服务的扩展配置文件;  可以看到文件中设置的用户和用户组  pm.start_servers:动态方式下的起始php-fpm进程数量  拷贝系统推荐的php.ini设置参数到安装目录下,php.ini是php运行核心配置文件  修改设置参数的时区  拷贝解压源码编译包目录中php-fpm.service的到系统systemd下,此时可以通过systemctl来控制php; daemon-reload: 重新加载服务配置文件(如果新安装了一个服务,归属于 systemctl 管理,当新服务的服务程序配置文件生效,需重新加载); PHP启动报错  查看原因,是由于权限的问题  修改php-fpm启动文件  修改权限,注释掉这一行; ProtectSystem=false :默认php-fpm启动时只读挂载/usr目录  再次重新启动,查看端口 
二、nginx结合php-fpm
修改nginx的配置文件  打开php; 注释掉 fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; 修改 include fastcgi.conf;  Nginx (只能处理静态数据) 与 php-fpm 通信过程是通过 nginx 的 fastcgi 模块来处理的,即 fastcgi 模块将来自客户端的关于 php 文件的请求转发给 php-fpm 来处理。既然是转发请求,那么必须要遵循一定的协议,也就是 fastcgi.conf 所规定的协议了。  刷新服务后,书写php测试页   测试访问 
三、php添加memcache功能模块
传统缓存策略:当客户端要访问的是静态数据,就直接通过nginx区调度;当客户端要访问的是动态数据,就先找nginx,再到php服务,php服务先检测相应的缓存数据是否存在,如果不存在,就连接数据库,得到数据,并把查询结果序列化后保存到文件中,最后再返回给nginx  从服务器获取memcache安装压缩包,进行解压  phpize:作用是检测php的环境,在特定的目录生成相应的configure文件,这样执行make install之后,生成的.so文件才会自动加载到php扩展目录下面  更改配置文件,修改PATH环境变量; 在Linux安装一些软件通常要添加路径环境变量PATH,PATH环境变量通俗的讲就是把程序的路径"备案"到系统中,这样执行这些程序时就不需要输入完整路径,直接在bash输入程序名就可以执行。比如常用的ls命令就是添加好了环境变量才可以直接执行ls  添加php的启动位置  使文件生效; 执行phpize,提示缺少autoconf   再次执行phpize 可以看到生成了 configure; 将memcache模块加入到php  开始编译  安装; 查看php模块,发现没有memcache; 修改php.ini主配置文件  添加memcache模块  重新加载php服务  再次查看插件,可以看到memcache已经加入php  网页上也可以看到  将memcache目录中的两个案例,复制到nginx发布目录一份   下载memcached软件(memcached是一套分布式的高速缓存系统)  启动,查看memcached相关信息 此时已经能够成功访问到exampl.php的样本例子  修改nginx默认发布目录里面的memcache.php  修改memcache登录密码; 修改本地端口  测试访问  需要输入账号密码  此时可以看到监控界面  进行压力测试  当不使用缓存时,在并发量大的时候,会产成很多错误请求  访问带有缓存的example.php页面时  在并发量大的时候也没有错误请求  查看监控界面可以看到缓存的命中率 
四、构建nginx高速缓存
高效缓存策略: 客户端直接从nginx访问到缓存memcache,查看是否具有缓存,没有缓存再走php处理过程,减少了php的处理过程,加快了速率。 也就是说, nginx把php返回的动态数据在memcache存储一份,这样可以提高缓存策略  从服务器获取openrestry软件包(进行高速处理的软件),用来替换nginx,来与memcahe连接; 直接进行配置  可以看到默认安装在/usr/local/openresty/nginx  开始编译和安装  为方便设置php部分的文件,直接拷贝以前nginx的配置文件到openresty下的配置文件  关闭之前的nginx服务  拷贝之前nginx默认发布目录下的index.html到openrestry的nginx默认发布  修改配置文件,将以下模块注释掉   openresty软件还没下载配置证书模块  启动新的nginx服务  网页可以访问到  继续修改配置文件,加入新的 upstream节点; keepalive 512:表示保持512个不立即关闭的连接,用于提升性能  internal; //表示只接受内部访问 set $ memc_key $ query_string; //使用内置的$query_string来作为key set $memc_exptime 300; //表示缓存失效时间  在php服务里面设置访问缓存的策略;
当所请求的uri以“.php”结尾时,首先到memcache中查询有没有以$ uri$ args为key的数据,如果有则直接返回; 否则,执行location的逻辑,如果返回的http状态码为200,则在输出前以 $ uri$args为key,将输入结果存入memcache  刷新服务  压力测试  发现高速缓存速度更快(快了大概6倍)  传统缓存策略的速度 
五、goaccess 日志可视化
可以对nginx的访问及其缓存设置监控; 先关闭nginx服务  然后从服务器获取安装包  配置  提示缺少依赖性  安装依赖性软件  再次配置,显示缺少ncursesw  继续安装依赖性软件  再次配置  编译  安装  进入到nginx的日志目录 执行启动goaccess,并打入后台  重启最原始的nginx  测试访问,可以看到数据  客户端进行压力测试   可以查看到实时的变化  以下是详细信息 
六、构建nginx+tomcat+memcache
1、Tomcat 服务器是一种轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。可以认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。 2、当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。目前Tomcat最新版本为10.0.5。
nginx连接tomcat加memcache,可以实现java的高速缓存; server2添加一个0网段的ip,然后从服务器上获取所需安装包,首先安装jdk(java开发的环境)   解压tomcat源码编译压缩包到指定路径; 创建一个软链接,方便使用  webapps/ROOT/ 是tomcat的默认根发布目录, index.html是它的默认发布页面  启动tomcat ,可以看到8080java端口已经打开  网页访问成功  修改nginx配置文件  加入名为tomcat 的 upstream节点  在监听localhost的server里面加入,如果访问172.25.31.1/*.jsp那么就到tomcat负载均衡器(由server2提供服务)  刷新服务  网页访问测试  server2在服务器上获取一个以.jsp结尾的文件,当用户访问test.jsp可以提交请求 网页访问测试   查看server2日志  接下来对server1/2/3进行部署(tomcat+memcache结合jsp交叉存储),实现基于cookie的负载均衡; server1 配置nginx反向代理和负载均衡,server2 server3交叉存储;
server1将tomcat和jdk安装包传给server2/3  server3安装jdk  解压tomcat  将解压目录移动到tomcat目录,启动tomcat  server3获取server2的test.jsp测试文件  server2先停止tomcat服务  修改server1的配置文件,将server3加入负载均衡器中; 使用 sticky 方式,静态锁定一个ip对应一个服务器,除非session被清除后才变化  刷新服务  客户端进行访问测试,输入用户名和密码  由于server2的tomcat服务已经关闭,因此由server3来提供服务   
可以看到网页第一行server info 之前是server2,当客户端切换或者tomcat关闭时,session ID 也会随之发生变化,这样刷新网页,之前的数据就会丢失; 解决方法:tomcat结合memcached 交叉存储session!
server2/3安装memcache  server2/3开启memcached服务(开启的端口是11211)   接着配置server2/3的context.xml文件  以下设定表示:server2默认将数据缓存到n2节点(server3),只有当n2节点故障时,才存储到自身节点  配置server3的context.xml文件  以下设定表示:server3默认将数据缓存到n1节点(server2),只有当n1节点故障时,才存储到自身节点  server2/3切到 lib 目录下, Tomcat的lib目录主要用来存放tomcat运行需要加载的jar包; 从服务器获取配置所需的.jar包   将1.6.3版本的.jar包删除; 先停止tomcat服务  然后开启tomcat服务  查看server2日志 INFO处显示server2已经部署完成  同样的,开始部署server3,将server2 lib 目录下的 jar 包传给server3  server3将1.6.3版本的.jar包删除; 先停止tomcat服务,然后开启服务  INFO处显示server3已经部署完成  网页访问测试(此时由server3提供服务,因此数据存储在server2上,也就是n1节点)   查看server3日志  server2/3安装Telnet,该协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式   get ID ; 可以模糊看到缓存的客户端数据  当server 3 tomcat服务停止后  客户端访问测试  点击提交时,server info会变成server2,但session ID 没有发生变化,数据仍然存储在server2上  server2仍然可以模糊看到缓存的新提交的客户端数据  此时如果停止server2的 memcached服务  当客户端访问时 
由于server2的memcached服务被关闭,因此ID发生变化,此时数据存储在server3上,也就是n2节点)  server3也安装telnet  客户端访问测试  server3输入 get ID ; 依然可以模糊看到之前缓存的客户端数据  将server3的tomcat启动  将server2的memcached服务开启; 然后关闭server2  客户端访问测试  点击提交之后,server info 此时变为server3,但ID依然不变,之前提交的数据也都不会消失
|