目录
一、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依然不变,之前提交的数据也都不会消失