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