Linux企业运维——nginx+php、tomcat+memcache交叉存放、goaccess日志可视化

php是什么?

PHP,全称 Hypertext Preprocessor ,中文翻译“超文本预处理器”。

在这里插入图片描述PHP是一种被广泛应用的开源通用脚本语言,尤其适用于 Web 开发。
拥有快速,灵活,实用的特点,PHP能做任何事,包括你的个人博客甚至是全球性的大型站点系统。

php能干什么?

那么问题来了,php能干什么?

PHP能直接嵌入HTML语言中,与HTML混编。PHP开发的目的主要是允许 web 开发人员快速编写动态生成的 web 页面,但 PHP 的用途远不只于此。

PHP还包含了命令列执行接口(command line interface),和产生图形使用者接口(GUI)程式。

总结就是:PHP能干任何事!!!

为什么选择php

1、PHP开源免费,没有任何收费的项目。你可以随便修改他的内核然后用于自己的商业项目。
2.、PHP拥有丰富的开发组件
3、社区成熟,85%以上的问题能在社区找到相应的解决思路。
4、PHP学习成本低、见效快
5、开源库丰富,基本所有类型均有开源产品
6、PHP7.0基本不输任何一门语言——这是重点!!!
7、与数据库mysql近乎完美的支持

介绍完php,以下分享php的下载安装及配置应用的步骤

1.PHP源码编译

(1)php下载

http://www.php.net/ ##官方下载地址

在这里插入图片描述
这里我直接到主机中拿到软件包并解压
tar jxf php-7.4.12.tar.bz2
如若解压失败,查看报错提示是否没有解压.bz2压缩包的插件,安装bzip2即可
在这里插入图片描述

(2)软件编译

./configure 配置
make 编译
make install 安装
编译三部曲

./configure --prefix=/usr/local/lnmp/php --with-config-file-path=/usr/local/lnmp/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

安装配置时按照提示缺少什么安装包,安装即可
如果不确定配置是否成功,
可以输入:
echo $?
进行查看,输出为0则成功

yum install -y systemd-devel
yum install -y libxml2-devel
yum install -y sqlite-devel
yum install -y libcurl-devel
yum install libpng-devel -y
yum install oniguruma-devel -y
我的主机大致缺少这些安装包,每个人不同,根据报错提示下载安装即可

在这里插入图片描述配置成功,编译安装
make 编译成功
在这里插入图片描述make install 安装完成
在这里插入图片描述

2.php-fpm文件的配置

拷贝配置php-fpm.conf和www.conf两个文件

注释:
php-fpm
php-fpm是一个实现了Fastcgi的程序,他的管理对象是php-cgi
php-cgi
php-cgi只是个CGI程序,他自己本身只能解析请求,返回结果,不会进程管理
CGI
CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者
Fastcgi
Fastcgi是用来提高CGI程序性能的(标准的CGI对每个请求都会执行这些步骤,Fastcgi会先启一个master,解析配置文件,初始化执行环境,然后再启动多个worker。当请求过来时,master会传递给一个worker,然后立即可以接受下一个请求。这样就避免了重复的劳动,效率自然是高)

#fastcgi是一个协议,php-fpm实现了这个协议

cd /usr/local/lnmp/php/etc/  
cp php-fpm.conf.default php-fpm.conf  #拷贝文件
vim php.fpm.conf   #编辑配置文件
cd php-fpm.d/
cp www.conf.default www.conf

在 php.fpm.conf 文件中,取消这一行的注释
在这里插入图片描述拷贝php.ini配置文件

cd /root/php-7.4.12/
cp php.ini-production /usr/local/lnmp/php/etc/php.ini  #拷贝到指定路径
cd /usr/local/lnmp/php/etc
vim php.ini   #编辑文件,更改时区为亚洲上海

在这里插入图片描述

配置php-fpm.service 添加service服务

cd /root/php-7.4.12/sapi/fpm
cp php-fpm.service /usr/lib/systemd/system  #将php服务文件放置到指定目录下
cd /usr/lib/systemd/system
ls
vim php-fpm.service  
\\\
#ProtectSystem=full    #注释这一行
\\\
systemctl daemon-reload  #重载服务
systemctl start php-fpm.service  #开启

在这里插入图片描述

3.nginx+php-fpm

(1)修改nginx的配置文件

vim /usr/local/nginx/conf/nginx.conf
取消php服务的这几行注释,并且注释其中fastcgi_param这一行,最后的fastcgi文件改为fastcgi.conf

在这里插入图片描述

在这里插入图片描述
编写一个php发布文件,重启nginx

cd /usr/local/nginx/html/
vim index.php
///
<?php
phpinfo()
?>
///
nginx -s reload

在真机浏览器访问server1可以看到php页面
在这里插入图片描述

(2)添加环境变量

cd /usr/local/lnmp/php/bin/
pwd			##/usr/local/lnmp/php/bin
cd
vim .bash_profile	##在.bash_profile文件添加文件路径
///
PATH=$PATH:$HOME/bin:/usr/local/lnmp/php/bin
///
source .bash_profile 		##使其生效
which php					##/usr/local/lnmp/php/bin/php
which phpize				##/usr/local/lnmp/php/bin/phpize
echo $PATH

在这里插入图片描述

4.在php中添加memcache模块

(1)软件下载

下载 memcache-4.0.5.2.tgz 压缩包
解压 tar zxf memcache-4.0.5.2.tgz

(2)软件安装

切换环境到memcache-4.0.5.2目录中
执行phpize
在这里插入图片描述下载依赖性软件
再次执行phpize

yum install autoconf -y
yum install automake.noarch -y
phpize			##扩展成功

在这里插入图片描述
对memcache进行源码编译,configure–make–make install 三步曲

./configure --enable-debug
make
make install

编辑php.ini ,然后重启服务,执行php -m可以看到memcache

cd /usr/local/lnmp/php/etc/
ls
vim php.ini 
php -m | grep memcache	  ##出现memcache表示添加成功
systemctl reload php-fpm.service 
php -m	  ##测试php服务是否正常,可以看到memcache

vim php.ini
在这里插入图片描述
在这里插入图片描述

(3)构建nginx高速缓存,添加memcache功能模块

使用memc-nginx模块构建高效透明的缓存机制。
如果需要做到高速缓存,nginx可以跳过php直接向memcache存储,但是只能做静态存储 ,如果需要动态存储,还是要调用php,通过php调用到数据后下一次nginx就可以直接从memcache那里取,效率大大提高。因此高速缓存时两种策略在同时进行。

在这里插入图片描述
安装memcached,并开启服务,查看端口

yum install -y memcached
systemctl start memcached.service
netstat -antlp					##11211端口
cat /etc/sysconfig/memcached	##11211端口

在这里插入图片描述
cat /etc/sysconfig/memcached
在这里插入图片描述
切换环境到memcache目录下,拷贝文件并编译,最后重启服务

cd /root/memcache-4.0.5.2/
ls
cp example.php /usr/local/nginx/html/
cp memcache.php /usr/local/nginx/html/
cd /usr/local/nginx/html/
ls
vim memcache.php
///
define('ADMIN_PASSWORD','westos');      // Admin Password				##设定密码
$MEMCACHE_SERVERS[] = '172.25.7.1:11211'; // add more as an array				
#$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array		##注释这一行
///
nginx -s reload				##重启nginx
systemctl start php-fpm.service	##开启服务
systemctl start memcached.service  ##开启服务

vim memcache.php 如图:
在这里插入图片描述

在真迹浏览器测试,访问172.25.7.1/example.php
在这里插入图片描述

此时服务配置成功,访问172.25.7.1/memcache.php
登陆用户名:memcache
登陆密码:westos

在这里插入图片描述在这里插入图片描述
此时我们可以看到,当前的信息处理率不能达到百分百,需要进行优化。

在真机中执行压力测试命令,对其进行优化

ab -c20 -n 1000 http://172.25.7.1/example.php

在这里插入图片描述
刷新页面,可以看到经真机的压力测试,信息处理率达到百分百

在这里插入图片描述

5.配置php加载模块openresty

基于openresty(构建高效透明的缓存机制) 访问,能将缓存放在nginx中,速度更快

注意: nginx -s stop ## 先停止nginx

下载模块

官方下载地址:https://openresty.org/cn/

下载之后解压,编译安装

tar zxf openresty-1.19.3.1.tar.gz  
cd openresty-1.19.3.1/
./configure --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio
make
make install

配置模块文件信息

编辑openresty中nginx的配置文件,拷贝配置文件,重启模块

注意路径!!!

切换到指定目录下
cd /usr/local/openresty/nginx.conf
vim nginx.conf
///
user  nginx;
worker_processes  auto;

events {
    worker_connections  65535;
}

#取消php这几行的注释,只注释其中一行
        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            #fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi.conf;
        }
///
cd ..
cd html/
cp /usr/local/nginx/html/example.php .		#拷贝配置文件
cp /usr/local/nginx/html/index.php .   #拷贝
/usr/local/openresty/nginx/sbin/nginx  #启动
/usr/local/openresty/nginx/sbin/nginx -t  #检测语法
/usr/local/openresty/nginx/sbin/nginx -s reload

在这里插入图片描述在这里插入图片描述
真机浏览器访问:
在这里插入图片描述

此时在真机中压力测试
在这里插入图片描述
进一步配置,感受速度的变化

cd /usr/local/openresty/nginx/conf
vim nginx.conf
///
http {
        upstream memcache {
        server 127.0.0.1:11211;
        keepalive 512;					##保持512个不立即关闭的连接用于提升性能
        }

    include       mime.types;
    default_type  application/octet-stream;

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        location /memc {
        internal;						##表示只接受内部访问
        memc_connect_timeout 100ms;
        memc_send_timeout 100ms;
        memc_read_timeout 100ms;
        set $memc_key $query_string;	##使用内置的$query_string来作为key
        set $memc_exptime 300;			##表示缓存失效时间
        memc_pass memcache;
        }
///
/usr/local/openresty/nginx/sbin/nginx -t
/usr/local/openresty/nginx/sbin/nginx -s reload

vim /usr/local/openresty/nginx/conf/nginx.conf

在这里插入图片描述在这里插入图片描述
在真机中再次进行压力测试
ab -c10 -n 5000 http://172.25.7.1/example.php
ab -c10 -n 5000 http://172.25.24.1/index.php

在这里插入图片描述在这里插入图片描述

##可以对比出速度变快且传输量大幅度提升

tomcat结合memcache实现session交叉存放

什么是session?
session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中。

为了对数据的保存更加牢靠,我们选择交叉存放session的方法,即将访问tomcat1上的数据存放在memcache2中,将访问tomcat2上的数据存放在memcache1中,这样存放,当某个tomcat服务断了之后,访问它的客户session并不会消失,而是存放在了对立的memcache,如果存放session的memcache坏了,那么它的数据会立即切换到另一个memcached中…

tomcat下载地址:https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/src/master/

在server2和server3主机中操作:
下载apache-tomcat-7.0.37.tar.gz和 jdk-8u121-linux-x64.rpm安装包

在server2中:///
tar zxf apache-tomcat-7.0.37.tar.gz  #解压
rpm -ivh  jdk-8u121-linux-x64.rpm  #安装rpm包
mv apache-tomcat-7.0.37 /usr/local/ #移动目录到指定路径下
cd /usr/local/
ln -s apache-tomcat-7.0.37/ tomcat  #方便起见建立tomcat软连接
cd /usr/local/tomcat/webapps/ROOT/
lftp 172.25.254.250  #连接服务器下载文件 
cd /pub/docs/lamp
get test.jsp    #下载一个.jsp文件,用于后面测试
cd /usr/local/tomcat/bin
ls    #bin目录中有启动和停止tomcat的脚本
./startup.sh  #启动tomcat
\\\
在server3中可以不必下载,直接从server2中scp传输即可
相同的操作,最终启动tomcat 

配置server1主机中的nginx.conf配置文件
vim /usr/local/nginx/conf/nginx.conf
利用sticky模块,将server2,server3的8080端口写入

在这里插入图片描述
在这里插入图片描述

nginx -t 
nginx -s reload

此时可以在浏览器中访问172.25.7.1/test.jsp
可以看到如下:
在这里插入图片描述
server2中,配置tomcat
交叉存储,所以我们的两台tomcat(server2、server3)分别对应的是memcache (n2、n1)

cd /usr/local/tomcat/conf
vim context.xml
\\\
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.7.2:11211,n2:172.25.7.3:11211"
failoverNodes="n1"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
\\\

正常运行的情况下server2中的tomcat往n2中储存,server3中的tomcat往n1中储存,如下图,在server2中的储存策略 failoverNodes=“n1” 当交叉存储失败时server2与n1连接
在这里插入图片描述

cd /usr/local/tomcat/lib下

lftp 172.25.254.250
cd /pub/docs/lamp/jar
mget *      #下载所有tomcat所匹配的jar包
exit
ls
rm -fr memcached-session-manager-tc6-1.6.3.jar    #删除6版本的memcache
cd /usr/local/tomcat/bin
./startup.sh    #启动

在这里插入图片描述在这里插入图片描述

重新启动tomcat,再在浏览器中访问
此时可以看到
在这里插入图片描述
此时浏览器显示的是server3中的tomcat2,由于我们用的是sticky模块,即当server3中的tomcat2宕掉时,server2中的tomcat1会接手
这里我们可以停掉serve3中的tomcat

/usr/local/tomcat/bin/shutdown.sh   #关闭tomcat2

在这里插入图片描述

server3中 配置tomcat,与server2一样配置

cd /usr/local/tomcat/conf
vim context.xml
\\\
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.7.2:11211,n2:172.25.7.3:11211"
failoverNodes="n2"         ##此处当存储失败时访问n2设备
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
\\\

cd /usr/local/tomcat/lib下

lftp 172.25.254.250
cd /pub/docs/lamp/jar
mget *
exit
ls
rm -fr memcached-session-manager-tc6-1.6.3.jar    #删除6版本的memcache
cd /usr/local/tomcat/bin
./startup.sh

在server2、server3中都下载telnet.x86_64
yum install telnet.x86_64 -y

此时可以在浏览器中输入几组名字密码
用tenet指令在对应的tomcat上查看
此处访问到的是server3的tomcat,默认储存在了n1中,n1的memcache是server2中的设备,故应该在server2中才能查看到我们输入的两组数据
在这里插入图片描述

#这里我们分别在servre2 server3中输入指令进行查看
telnet localhost 11211
get 76227198A7AD4E5BB850EE59580FCC5E-n1    #此处的id号是浏览器中显示的

在这里插入图片描述

在这里插入图片描述结果只有在server2中才可以查看到结果

那么这样的交叉存储如果n1的memcache在我们存储过程中突然坏掉或者被关掉会怎么样呢

这里我们将server2中的memcache停掉

systemctl stop memcache.service

继续在浏览器中输入一组数据

在这里插入图片描述

浏览器中server3的设备自动变换为了n2,此时我们可以看到,当server3交叉存储失败的时候将会存储在自己主机中的n2,memcache中
此时的信息我们应该在server3中的memcache访问
在这里插入图片描述
成功查到新输入的数据
这就是nginx+tomcat+memcache实现session交叉存放的原理!

goaccess日志可视化

下载地址: http://tar.goaccess.io/goaccess-1.4.tar.gz

安装:
这里我直接获取本地资源

lftp 172.25.254.250
cd pub/docs/lamp
get goaccess-1.4.tar.gz\
tar zxf goaccess-1.4.tar.gz   #解压
./configure --enable-utf8 --enable-geoip=legacy   #安装测试
测试缺少两个插件,需要安装
lftp 172.25.254.250
cd pub/docs/lamp
get GeoIP-devel-1.5.0-13.el7.x86_64.rpm  
exit
rpm -ivh  GeoIP-devel-1.5.0-13.el7.x86_64.rpm 
yum install ncurses-devel.x86_64    ##安装这两个缺少的插件
重新configure
make 
make install

在这里插入图片描述

可视化日志监控

cd /usr/local/nginx/logs
ls
goaccess access.log -o /usr/local/nginx/html/report.html --log-format=COMBINED --real-time-html   ##监控access.log日志

在这里插入图片描述

浏览器访问172.25.7.1/report.html 可以看到可视化日志
在这里插入图片描述

可以在真机中压力测试,增加请求量

ab -c10 -n 1000 http://172.25.7.1/index.html    #增加1000访问

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值