目录
3、php更改模块——以php添加memcache功能模块为例
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上存着。