LAMP架构之3——PHP源码编译及使用

目录

一、PHP源码编译

1、下载并编译php

2、配置php

 3、php更改模块——以php添加memcache功能模块为例

4、memcache的传统缓存策略

5、memcache的高速缓存策略——缓存前置

6、tomcat结合memcache(java)

本章总结:


LAMP架构=Linux + Apach/nginx + Mysql/pgsql + Php/java/python/golang/c/c++/shell

一、PHP源码编译

PHP: Hypertext Preprocessorhttps://www.php.net/

注意:由于yum库里本身包含php,所以当我们使用源码编译php时,系统中不要有任何php的版本,否则会导致版本错乱,影响使用。

1、下载并编译php

(1)php的下载步骤如上所示

(2)解压(bz2文件需要安装<bzip2>软件才能解压)

 (3)检查依赖性

/configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx  --with-curl --with-iconv --with-mhash --with-zlib --with-openssl --enable-mysqlnd --with-mysqli --with-pdo-mysql --disable-debug --enable-sockets --enable-soap --enable-inline-optimization --enable-xml --enable-ftp --enable-gd --enable-exif --enable-mbstring  --enable-bcmath --with-fpm-systemd

 注意:检查依赖性时,有的可以在通过yum search 找到,找不到的话,可以通过阿里云找到。

阿里云官网:

阿里巴巴开源镜像站-阿里云官网开发者社区_云计算社区提供全面,高效和稳定的系统镜像、应用软件下载、域名解析和时间同步服务https://developer.aliyun.com/packageSearch?word=oniguruma-devel以<oniguruma-devel>依赖包为例。可以查询到所有相关的依赖包。

 (4)安装<make>+<make install>

注意:一般来说先make后make install分开执行。以下命令可以直接执行两步(只有当第一步无报错时才会执行下一步)

2、配置php

(1)启动php并与nginx绑定

二进制程序——先将php的路径添加到环境变量中,并<source ~/.bash_profile>使更改及时生效。

 配置文件1——etc目录下,通过模板生成php的第一个配置文件

 做如下更改:启用pid

  配置文件2——etc/php-fpm.d/目录下,通过模板生成php的第二个配置文件

这个文件不用更改,在编译php时里边的参数都已经设置好。

配置文件3——生成php的主配置文件

注意:这个文件名写错了,文件名应该是<php.ini>,这里写错将会导致php无法正常使用。

这里只用更改个时区

 配置文件4——php的systemd可控制脚本

更改配置文件中的这个参数,注释掉!!!否则将导致php无法向那些目录中写入。

 (2)启动php

上一步中已经将php添加到systemd中了,所以这里可以通过systemctl启动。

(3)测试

可以通过整合nginx来测试php——进入nginx的配置文件</usr/local/nginx/conf/nginx.conf>,做如下更改:表示的意思是,当访问的页面是以php结尾时,自动跳转到9000端口。

 然后在nginx的默认发布目录下,创建一个<index.php>的文件

在浏览器中打开测试:测试成功

也可以通过命令行<php -m>查看php加载的所有模块

 3、php更改模块——以php添加memcache功能模块为例

 (1)下载memcache模块的压缩包

(2)编译

在php的附加模块中,解压后并没有<configure>的选项,因此需要先在解压后的目录中执行<phpsize>。执行完毕后,可以看到目录下已经出现了configure的选项。

检查依赖性

安装

检查完依赖性后,会生成一个Makefile文件。然后在此目录下执行<make>命令。

 make后直接<make install>。这个目录就是新生成的模块的位置。

(3)添加配置以识别memcache模块

但是模块加载完成后,php并不能直接识别,还需要更改php的配置文件<php.ini>。更改方法如下:

在<php.ini>中的“动态扩展模块”中添加memcache

重新载入php的配置:可以看到,php已经添加上这个模块了。

 在浏览器中查看,也查到了memcache。

 (4)测试php

 将php解压目录中的两个文件复制到nginx的发布目录中。

测试1——memcache.php

编辑memcache.php文件

这个语句是查看memecache服务的命中率

 然后安装memcache服务,并启用

yum install -y memcached            #安装memcached
systemctl start memcached            #启动memcached服务

 查看服务状态,出现emecached服务,证明已经配置成功

 测试:

在网页中访问此php文件,登录后可以看到如下界面。证明配置已经成功。

测试2——example.php

这个文件不用改,表示通过本机的11211端口,向memcache中写数据。

测试:

在浏览器中测试,多访问(刷新)几次查看memcache的命中率

命中率可视化图的作用——下一步将以压力测试为例。

4、memcache的传统缓存策略

在不使用memcache缓存时,1000个请求里边会有94个请求是失败的。意味着php的处理性能不够导致的。

在使用memcache缓存时,1000个请求里边没有任何报错。

5、memcache的高速缓存策略——缓存前置

实现功能需要安装一个软件包:openrestyOpenResty® - Official Sitehttp://openresty.org/en/这个网站是openresty官网。本次所用文件为官网版本。

(1)下载并编译

检验依赖性时使用默认配置就可以。

然后安装:<make && make install>

(2)启动openresty

注意:由于openresty也是监听80端口的,所以在开启服务前需要先停止之前的nginx,都则80端口被nginx占用, openresty会启动失败。 

 关闭nginx,显示已经没有程序占用80端口了。

(3)配置openresty

安装完成后进入openresty目录下,可以看到里边有nginx目录,配置文件等和nginx一模一样。所以接下来就要更改openresty目录下的nginx配置文件了。(注意:千万确定好路径,不要回到之前安装的nginx目录下更改配置)

 更改配置如下:

 (3)启动openresty下的nginx

注意:这里不能直接用nginx命令启动nginx,因为nginx命令默认启动的是之前安装的。所以要启动openresty下的nginx,就需要用绝对路径</usr/local/openresty/nginx/sbin/nginx>

(4)更改新装的nginx下的发布目录

发布目录的文件从原版本的nginx的发布目录下复制。意味着新版本和旧版本相比,除了加入openresty的高速缓存外,访问端其他没有任何变化。

 (5)测试

都成功了。

但是耗时太久,可以通过增加每秒的并发量提升效率。因此要在在nginx中启用缓存。

(6)可以做如下更改:

先启用一个缓冲池

 再建立一个缓存

更改完成后,重新启动服务

(7)再次测试

可以看到,启动nginx高速缓存后的,不仅无报错,且速度比之前的普通缓存快的多了。

 用没有加入缓存配置的index.php界面测试。

虽然界面本身并没有缓存加速,但是由于nginx启用了缓存,所以访问速度也会变快。 

6、tomcat结合memcache(java)

由于之前大部分配置都在原有的nginx上,所以需要先把openresty下的nginx停掉,切换回之前的nginx。

(1)实验环境:

关闭server2和server3的apache,并在server2中安装<apache-tomcat-7.0.37.tar.gz>和<jdk-8u121-linux-x64.rpm>。所有的java应用都必须运行在jdk环境中,以提供jvm。

这里先安装rpm包,然后将tomcat压缩包进行解压。解压到</usr/local>目录下,为了方便后续实验,将这个<apache-tomacat>子目录创建一个软连接。

(2)启动tomcat

直接执行当前目录的</bin/startup.sh>启动tomcat

 查看端口信息,8080表示jtomcat已启动 

(2)更改server1的nginx配置

在server1的nginx中定义一个负载均衡器tomcat,第二张图表示访问所有以<.jsp>结尾的时候,都调度给tomcat均衡器。

(3)测试

在网页中测试<172.25.254.2:8080>,通过8080端口访问,默认打开tomcat的默认界面。

访问server1的<172.25.254.1/index.jsp>默认页面,显示tomcat的详情页 

出现以上问题的原因是:nginx和tomcat的默认发布目录不一样,因此最好做个重定向,访问<.jsp>的时候直接重定向到后端的tomcat上。

(4)改进办法

在server2和server3的tomcat的发布目录中新建一个测试页面

tomcat的默认发布目录:</usr/local/tomcat/webapps/ROOT>

在这个目录下,编写一个.jsp的测试文件<test.jsp>

(5)再次测试

访问<172.25.254.1.jsp>页面会自动负载均衡到172.25.254.2:8080的tomcat上。由于浏览器是基于cookie的,所以短时间内都会访问在一个服务器上

新的问题:当server2挂掉后,用户在访问的时候会由server3接管,但是在server2中的数据并不会同步到server3中。

 查看server2的日志</usr/local/tomcat/logs/catalina.out>,因为server2挂掉了,所以用户在server2中提交的数据就会丢失。

 (6)解决不同上述情况中不同RS上的数据共享问题——交叉存储

也就是说,在任何一个RS服务器挂掉以后,其他RS服务器接管后,也应该有之前挂掉服务器上的数据。本实验用到server2和server3两个节点,下述步骤两台机器同样的操作。

Tomcat-1 (T1) 将 session 存储在 memcached-2 (T2)上。只有当 M2 不可用时,T1 才将 session 存 储在 memcached-1 上(M1 是 T1 failoverNode)。使用这种配置的好处是,当 T1 和 M1 同时崩 溃时也不会丢失 session 会话,避免单点故障。

关闭server2和server3的tomcat后</usr/local/tomcat/bin/shutdown.sh>,才能进行下一步操作。

先更改server2的配置文件。文件路径及文件名如下:

 划线第一行参数表示:memcache的缓存默认存放在<1272.25.254.2>和<172.25.254.3>两个节点上。划线第二行参数表示:当前服务器挂掉后,寻找n1节点(也就是自己)。

注意:这是在server2上设置的,在server3的设置“n2”刚好和server2的配置对应,其他不变。

 由于上述语法中用到了很多类,所以需要在lib中有对应的“jar”包。所有的jar包应该放在tomcat的依赖目录下</usr/local/tomcat/lib>

然后,由于server2节点用到了memchche,所以这上边也要安装memecache,并启动。

yum install -y memcached
systemctl start memcached

 检查端口<11211>已启用,证明memcache已成功安装。

查看日志,喜显示memcache已正常启动。

划线部分表示,默认找另一个节点,当默认节点出现故障时找自己

(7)交叉存储的测试

测试1:

在浏览器中访问之前的测试页面,随机调度到了server3上

 关闭server3的tomcat

调度到了server2上

 查看server2的日志,之前在server3上的信息已经同步到server2上了

测试2: 

安装telnet,以查看memcache的内存中的数据信息

yum install -y telnet

通过查看tomcat的事件ID,浏览器中在server2中存储的内容可以在server3中查询到(server2中查不到)

 模拟故障1:

当server2的tomcat突然死机时,在浏览器中在次提交数据。

测试表明,客户端在察觉不出异常的情况下,server2挂掉后,server3接管server2的数据。而且ID没有发生变化。这意味着,server出现故障后,srever3从原有的memcache取到了原有的信息。

模拟故障2:

当server2的memcache故障后,且server3的tomcat也出现故障。 

在浏览器中提交数据,发现即使调度到server2上了,之前的数据也并没有丢失。这是因为server2的memcache挂掉后,它会自动将数据保存在server3的memcache上,也就是说server2用的是server3的memcache。

模拟故障3:

server2的tomcat和memcache都故障了,server3没问题时

浏览器中测试,会自动调度到server3中,而且刷新页面,原有数据不会丢失。 

模拟故障4:

在模拟故障3中,server2的tomcat和memcache都坏掉了,浏览器中使用的是server3的tomcat和memcache。server3在模拟故障3的基础上,先开启server2的memcache,再停掉server3的memcache(这就创建好了交叉的环境)。

在浏览器中刷新网页,可以看到tomcat的“ID/数据存储位置”已经转移到了n1节点上(server2)。

本章总结:

1、阿里云:

阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区阿里巴巴开源镜像站,免费提供Linux镜像下载服务,拥有Ubuntu、CentOS、Deepin、MongoDB、Apache、Maven、Composer等多种开源软件镜像源,此外还提供域名解析DNS、网络授时NTP等服务,致力于为互联网用户提供全面,高效和稳定的基础服务。https://developer.aliyun.com/mirror/?spm=a2c6h.12883283.0.0.5f1f4307BB6BSY2、交叉存储时,tomcat的存储ID的莫位显示n几就表示数据在哪个节点的memcache上存着。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值