一、安装php服务
(1)、php和php-fpm原理
Nginx 接收到 php 动态请求会传给 php-fpm 处理,php-fpm 调用 pool 中的子进程来处理动态请求。
1、php软件包括php-fpm和php处理两个模块。
2、php-fpm是 FastCGI 的实现,并提供了进程管理的功能。进程包含 master 进程和 worker 进程两种进程。master 进程只有一个,负责监听端口,接收来自 Web Server 的请求,而 worker 进程则一般有多个(具体数量根据实际需要配置),每个进程内部都嵌入了一个 PHP 解释器,是 PHP 代码真正执行的地方。
(2)、安装过程
1、下载为网址php.net,获取php软件,获取php软件
2、解压文件
[root@ck1 ~] yum install bzip2
[root@ck1 ~] tar jxf php-7.4.12.tar.bz2
[root@ck1 ~] cd php-7.4.12/
3、安装模块及依赖性文件
编译文件的时候,一般用下载文件-devel,devel指的是开发软件包,根据提醒下载依赖性文件即可
[root@ck1 php-7.4.12] yum install systemd-devel -y
[root@ck1 php-7.4.12] yum install libxml2-devel -y
[root@ck1 php-7.4.12] yum install sqlite-devel -y
[root@ck1 php-7.4.12] yum install libcurl-devel -y
[root@ck1 php-7.4.12] yum install libpng-devel -y
[root@ck1 ~] yum install -y oniguruma-6.8.2-1.el7.x86_64.rpm oniguruma-devel-6.8.2-1.el7.x86_64.rpm 图1、解决依赖性
图1
4、./configure确认文件模块,make执行编译,make install复制文件
[root@ck1 php-7.4.12] cd php-7.4.12/
[root@ck1 php-7.4.12] ./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
[root@ck1 php-7.4.12] make
[root@ck1 php-7.4.12] make install
5、修改配置文件
[root@ck1 php] cd /usr/local/php/etc/
[root@ck1 etc] cp php-fpm.conf.default php-fpm.conf 拷贝php-fpm配置文件
[root@ck1 etc] vim php-fpm.conf 图1,打开php-fpm进程
[root@ck1 php-fpm.d] cd /usr/local/php/etc/php-fpm.d
[root@ck1 php-fpm.d] cp www.conf.default www.conf
图1、打开注释
6、修改时区,修改权限,添加system启动服务
[root@ck1 etc] cd ~/php-7.4.12/
[root@ck1 php-7.4.12] cp php.ini-production /usr/local/php/etc/php.ini 复制生产的环境到执行目录
[root@ck1 php-7.4.12] cd /usr/local/php/etc/
[root@ck1 etc] vim php-ini 图1、修改时区
[root@ck1 fpm] cd /root/php-7.4.12/sapi/fpm
[root@ck1 fpm] cp php-fpm.service /usr/lib/systemd/system
[root@ck1 fpm] cd /usr/lib/systemd/system
[root@ck1 system] vim php-fpm.service 图2、修改权限
[root@ck1 system] systemctl daemon-reload
[root@ck1 system] systemctl start php-fpm.service
图1、修改时区
图2、修改权限,注释掉
成功开启php-fpm的9000端口、监听ngingx对php的请求。
二、nginx连接php
1、更改配置文件
[root@ck1 conf] cd /usr/local/nginx/conf
[root@ck1 conf] vim nginx.conf 图1
[root@ck1 conf] nginx -s reload
图1、取消注释
2、书写测试页
[root@ck1 html] cd /usr/local/nginx/html
[root@ck1 html] vim index.php
//
<?php
phpinfo()
?>
[root@ck1 html] nginx -s reload 刷新服务
3、访问测试
三、构建传统nginx+php+memcache
(1)简介
传统意义上的工作模式:客户端 -> nginx ->php.fpm -> php ->Memcache
这样静态界面就通过nginx区调度,遇到动态页面就先找nginx,再到php服务,php服务查看缓存文件里是否存在,不存在则进行则进行处理,最后在返还给nginx。
(2)连接php和memcache
1、获取安装包、解压安装包
[root@ck1 ~] cd ~
[root@ck1 ~] tar zxf memcache-4.0.5.2.tgz
2、更改配置文件
使用alias命令,添加php的启动位置
[root@ck1 bin] cd
[root@ck1 ~] vim .bash_profile
[root@ck1 ~] source .bash_profile 图1
3、下载软件,查看php的完整性
[root@ck1 memcache-4.0.5.2] cd /root/memcache-4.0.5.2
[root@ck1 memcache-4.0.5.2] yum install autoconf -y
[root@ck1 memcache-4.0.5.2] phpize 图1、查看完整性
图1、完整的情况应该显示为这个样子
4、进行编译三部曲,将memcache模块加入到php
[root@ck1 memcache-4.0.5.2] ./configure --enable-memcache
[root@ck1 memcache-4.0.5.2] make
[root@ck1 memcache-4.0.5.2] make install
5、在php里添加memcache模块
[root@ck1 memcache-4.0.5.2] vim /usr/local/php/etc/php.ini 图1、php中添加memcache模块
[root@ck1 memcache-4.0.5.2] systemctl reload php-fpm.service
[root@ck1 memcache-4.0.5.2] php - m | grep memcache 图、查看memcache模块
图1、添加cache模块
图2、查看php的cache模块,添加成功
6、拷贝php的发布样本目录到nginx的发布目录
[root@ck1 memcache-4.0.5.2] cp example.php memcache.php /usr/local/nginx/html/
7、下载memcached软件,启用memcached服务
这个是memcached连接模块
[root@ck1 html] yum install -y memcached
[root@ck1 html] systemctl start memcached
此时已经能够成功访问到exampl.php的样本例子
8、修改配置文件对缓存的网站进行加密
[root@ck1 html] cd /usr/local/nginx/html
[root@ck1 html] vim memcache.php
访问172.25.42.100/memcache.php需要登陆,查看到监控界面
(3)访问压力测试
压力测试
-c10 代表同时并发10个请求,-n1000代表发送1000次请求,这里代表十次请求全部同一时间发送
1、对index.php直接访问时
[root@ck1 ~] ab -c10 -n 1000 http://172.25.42.10/index.php
2、访问带有缓存的example.php页面时
[root@ck1 ~] ab -c10 -n 1000 http://172.25.42.10/exampl.php
查看监控界面可以查看到缓存的命中率
四、构建高速缓存ngixn ->memcache
(1)简介
现在构建新性的访问流程:client -> nginx -> memcache
这样直接从nginx访问到缓存memcache,查看是否具有缓存,没有缓存再走php处理过程。减少了php的处理过程,加快了速率。
(2)设置openresty里的nginx和memcahe连接
1、获取openrestry软件包,进行高速处理的软件.其包括nginx软件
2、解压,进行编译三部曲
[root@ck1 ~] tar zxf openresty-1.19.3.1.tar.gz
[root@ck1 ~] cd openresty-1.19.3.1/
[root@ck1 openresty-1.19.3.1] ./configure
[root@ck1 openresty-1.19.3.1] make && make install
3、拷贝文件
为方便设置php部分的文件,直接拷贝以前nginx的配置文件到openresty下的配置文件下
[root@ck1 openresty-1.19.3.1] cp /usr/local/nginx/conf/nginx.conf /usr/local/openresty/nginx/conf/
cp: overwrite '/usr/local/openresty/nginx/conf/nginx.conf'? y 进行覆盖
[root@ck1 conf] cp /usr/local/nginx/html/index.php /usr/local/openresty/nginx/html/ 拷贝发布目录
4、修改配置文件,添加缓存模块
[root@ck1 conf] nginx -s stop 先暂停之前的nginx服务
[root@ck1 conf] vim /usr/local/openresty/nginx/conf/nginx.conf 修改配置文件
设置缓存的具体配置,中文是解释,需要删除
在php服务里面设置访问缓存的策略。
5、检测绝对路径下的语法,启用服务
[root@ck1 conf] /usr/local/openresty/nginx/sbin/nginx -t 检测语法
[root@ck1 conf] /usr/local/openresty/nginx/sbin/nginx 启动
[root@ck1 conf] /usr/local/openresty/nginx/sbin/nginx -s reload 重新加载配置文件
(3)压力测试
测试此时用高速缓存建立的系统
[root@ck1 conf] ab -c10 -n 5000 http://172.25.42.100/example.php
发现高速缓存速度更快
五、设置nginx监控
对nginx的访问及其缓存设置监控
1、获取安装包
2、解压获取依赖性文件
[root@ck1 ~] tar zxf goaccess-1.4.tar.gz
[root@ck1 goaccess-1.4] yum install -y ncurses-devel
[root@ck1 ~] yum install GeoIP-devel-1.5.0-13.el7.x86_64.rpm -y
3、编译、安装
[root@ck1 goaccess-1.4] ./configure --enable-utf8 --enable-geoip=legacy
[root@ck1 goaccess-1.4] make && make install
查看到二进制文件
4、进行监控
监控的是nginx的数据
[root@ck1 goaccess-1.4] cd /usr/local/nginx/logs/ 须在日志目录下进行监控
[root@ck1 logs] goaccess access.log -o /usr/local/nginx/html/report.html --log-format=COMBINED --real-time-html &
5、需要关闭oponrestry下的nginx,重启最原始的nginx
5、查看数据
6、访问测试
[root@ck1 logs]# ab -c10 -n 5000 http://172.25.42.10/index.html
查看到实时的变化
六、nginx+tomcat运行jsp网页
Tomcat 是由 Apache 开发的一个 Servlet 容器,实现了对Servlet 和 JSP(java) 的支持。连接tomcat加memcache,实现java的高速缓存。通过nginx反向代理实现均衡调度。
ck1作为nginx端口,本实验利用ck2作为tomcat端口
(1)安装启用tomcat,实现nginx+tomcat
ck2主机中配置
1、获取安装包
2、解压、安装
[root@ck2 ~] systemctl disable --now firewalld.service 关闭防火墙
[root@ck2 ~] rpm -ivh jdk-8u121-linux-x64.rpm 部署java环境
[root@ck2 ~] tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local/ 指定解压路径
[root@ck2 /mnt] cd /usr/local/
[root@ck2 /usr/local] ln -s apache-tomcat-7.0.37/ tomcat
[root@ck2 /usr/local] cd tomcat/
[root@ck2 /usr/local/tomcat] bin/startup.sh 调用脚本
[root@ck2 ~] netstat -antlp
3、查看到java的端口
访问ck2主机的8080端口发现tomcat开启
ck1主机中配置
4、ck1的nginx服务指定tomcat服务器为ck2
[root@ck1 ~] vim /usr/local/nginx/conf/nginx.conf
[root@ck1 ~] nginx -s reload
访问ck1(172.25.42.100/index.jsp),成功查看到网页
实际上访问ck1,通过ngixn代理,由ck2代理的服务器提供的界面
(2)测试java页面
ck2主机中
1、在tomcat的发布目录获取test.jsp文件
2、访问ck1主机,被调度到了ck2主机提供的测试界面
实现了反向代理
3、提交测试数据,查看日志
cat /usr/local/tomcat/logs/catalina.out
查看日志
在ck2主机查看到网页上提交的界面
七、nginx+tomcat+memcache实现反向代理,双机热备,高速缓存
利用反向代理机制,利用ck1的nginx服务作为代理端,ck2和ck3作为服务端实现均衡调度。缓存部分,ck2和ck3的tomcat的高速缓存地址互相为对方主机,这样就保证了双机热备。
(1)实现均衡调度
上面的实验已经实现了ck2作为服务端,现在将ck1作为代理端,ck2、ck3作为服务端实现均衡调度
1、ck2服务端将安装包传给ck1,ck3主机
[root@ck2 ~] scp /usr/local/tomcat/webapps/ROOT/test.jsp 172.25.42.100:/usr/local/tomcat/webapps/ROOT 传递java测试包给ck1
[root@ck2 ~] scp /usr/local/tomcat/webapps/ROOT/test.jsp 172.25.42.210:/usr/local/tomcat/webapps/ROOT 传递java测试包给ck3
[root@ck2 ~] scp apache-tomcat-7.0.37.tar.gz jdk-8u121-linux-x64.rpm 172.25.42.100:~
[root@ck2 ~] scp apache-tomcat-7.0.37.tar.gz jdk-8u121-linux-x64.rpm 172.25.42.210:~
2、ck1,ck3主机都进行如下操作
rpm -ivh jdk-8u121-linux-x64.rpm
tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local 指定解压路径
4、ck1代理端设置均衡负载
[root@ck1 /usr/local/nginx/conf] vim nginx.conf 图1、图2
[root@ck1 /usr/local/nginx/conf] nginx -t nginx
[root@ck1 /usr/local/nginx/conf] nginx -s reload
图1、设置反向代理的服务器
将ck2,ck3设置为服务器
因为有健康检测,所以也实现了双机热备
图2、设置反向代理模块
(2)测试反向代理
模拟企业环境真实环境,其中一个tomcat挂掉
ck3启动tomcat
/usr/local/tomcat/bin/startup.sh
关闭ck2的tomcat
/usr/local/tomcat/bin/shutdown.sh
因为反向代理且具有健康检测,故提供服务的主机实现了从ck2转移到ck3,完成双机热备服务
(3)设置memcache缓存
可以知道反向代理和健康检测可以实现服务器不会挂掉,但是当切换服务的主机的时候,会因为缓存的地址不同而丢失我们的提交的数据。故将服务器的缓存互相设置在对方主机上,如图1所示。这样当ck2的缓存存储在ck3的主机上,ck3的缓存在ck2的主机上。
第一种情况:ck2的tomcat挂掉之后,健康检测启动,ck3的tomcat启用,启用ck2的设置在ck3的memcache,这样数据就不会丢失。
第二种情况:当ck3主机上的memcache挂掉之后,ck2会将数据书写到本机ck2的memcache上,数据依旧不会丢失
图1、tomcat和memcache缓存的框架图
即ck1为做为代理端。ck2作服务端,ck2为n1节点,存储节点是ck3主机的n2;ck3作为服务端,为n2节点,存储节点是ck2的n1节点
ck2、ck3主机都进行相同操作
1、修改配置文件
yum install memcached -y
systemctl start memcached.service
vim /usr/local/tomcat/conf/context.xml
ck2主机
ck3主机
2、获取需要的jar包
cd /usr/local/tomcat/lib/
ls
3、删除老版本的jar包,启用新版本
cd /usr/local/tomcat
rm -fr memcached-session-manager-tc6-1.6.3.jar
cd /usr/local/tomcat/
bin/shutdown.sh 关闭tomcat
bin/startup.sh 重启tomcat
cat /usr/local/tomcat/logs/catalina.out 图1,图2
图1、ck1的日志
图1、ck2的日志
测试1:查看基本数据
1、访问172.25.42.100/test.jar
可以看到此时ck2提供tomcat服务,并由n2节点即ck3主机提供memcache服务
2、在网页界面输出数据
查看ck2的日志,记录了我们输入的数据
3、ck2/3都安装Telnet,该协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式
yum install -y telnet
telnet localhost 11211
get ID 6E7AF76903869FADBBE47A41554FF8FD-n2
因为储存在n2节点(ck3主机)上,所以ck3主机能查看到数据,ck2主机查看不到数据
ck2
ck3
测试2:挂掉tomcat
目前的由ck2提供给tomcat,关闭掉ck2的tomcat观察实验结果
[root@ck2 ~] /usr/local/tomcat/bin/shutdown.sh
提交数据前的状态
提交数据后的状态
可以发现tomcat切换到了ck3,节点不变,数据缓存依然在
测试3:挂掉memcache
1、先开启ck2的tomcat,重新提交数据,恢复全部功能
[root@ck2 ~] /usr/local/tomcat/bin/startup.sh
目前的状态
2、关闭memcahe
目前的memcache是在ck3上,关闭ck上的memcached服务,重新提交数据
[root@ck3 ~] systemctl stop memcached
提交数据前
提交数据后
切换了memcached到ck2节点,并且提交的数据依然还在,没有丢失