前面的章节中我们使用源码编译安装了php,mysql.并与nginx结合使用!!
这篇文章主要讲解了:
nginx结合php中的memcache模块构建高效透明的缓存机制。
tomcat结合memcache进行session的交叉存储备份。
goaccess日志可视化。
nginx + memcache的高效缓存机制:
需要下载
memcache-4.0.5.2.tgz
openresty-1.19.3.1.tar.gz
vim .bash_profile
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin:/usr/local/php/bin/
source .bash_profile
tar zxf memcache-4.0.5.2.tgz
cd memcache-4.0.5.2/
phpize #php内置脚本安装memcache,生成cofigure
yum install -y autoconf
phpize
安装之后,configure出现!
然后开始源码编译三部曲:
./configure
make
make install
vim /usr/local/php/etc/php.ini
extension=memcache
systemctl restart php-fpm.service
php -m |grep memcache
cd memcache-4.0.5.2/
ls
cp example.php memcache.php /usr/local/nginx/html/
cd /usr/local/nginx/html/
ls
访问 172.25.1.1/example.php即可查看变化
vim memcache.php
22 define('ADMIN_USERNAME','memcache'); // Admin Username
23 define('ADMIN_PASSWORD','westos'); // Admin Password
注释掉29行
28 $MEMCACHE_SERVERS[] = 'localhost:11211'; // add more as an array
29 #$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array
yum install memcached -y
systemctl start memcached
netstat -antlp | grep 11211
访问172.25.1.1/memcache.php 输入用户名和密码(刚才设置的!)
systemctl stop nginx.service
源码编译安装openresty
三部曲:但是这里需要gmake
tar zxf openresty-1.19.3.1.tar.gz
cd openresty-1.19.3.1/
./configure
gmake
gmake install
/usr/local/openresty/nginx/sbin/nginx -v #开启openresty里的nginx
/usr/local/openresty/nginx/sbin/nginx
拷贝默认发布目录
cd /usr/local/openresty/nginx/html/
cp /usr/local/nginx/html/*.php .
进行压力测试:
ab -c10 -n 1000 http://172.25.1.1/index.php
失败的次数74次,每秒处理请求1370次:
修改配置文件
需要做三处修改
cd /usr/local/openresty/nginx/conf
vim nginx.conf #使其和之前nginx一样可以编译php
upstream memcache {
server 127.0.0.1:11211;
keepalive 512; ##保持512个不立即关闭的连接用于提升性能
}
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;
}
location ~ \.php$ {
set $key $uri$args;
srcache_fetch GET /memc $key;
srcache_store PUT /memc $key; #看ppt解释
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi.conf;
}
注:
修改之后,需要开启服务的:
这里记得进入openresty下的nginx目录中开启nginx要用**./nginx**
如果直接输入nginx是之前设置的全局变量/usr/local/nginx/sbin/nginx开启的服务
而不是openresty开启的nginx!!!
因为本人一开始一直没有找到错误原因,最后就是这个问题!!!
ps ax | grep nginx
如果有nginx的进程,先kill掉
cd /usr/local/openresty/nginx/sbin
./nginx -t
./nginx
然后再进行压力测试:
ab -c10 -n 1000 http://172.25.1.1/index.php
错误次数变为0,每秒处理次数也变为4770!!质的提升!!
三台虚拟机
server1 配置反向代理和负载均衡
server2 server3交叉存储
需要软件及其版本:
jdk-8u121-linux-x64.rpm
apache-tomcat-7.0.37.tar.gz
对于server2停掉httpd服务!
systemctl stop httpd
yum install jdk-8u121-linux-x64.rpm -y #下载对应版本jdk
tar zxf apache-tomcat-8.5.24.tar.gz -C /usr/local/
cd /usr/local/
mv apache-tomcat-8.5.24/ tomcat #修改名称 方便操作
ls
cd tomcat/
ls
bin/startup.sh 开启tomcat脚本
netstat -antlp 查看8080端口已打开
8080端口已经开启:
cd webapps/ROOT/ #tomcat默认发布目录
ls
cp ~/test.jsp . 将测试文件拷贝过来
测试完成后将文件拷贝到server3
server3操作与server2相同
zai tomcat目录中开启tomcat
bin/startup.sh
在server1中:
vim nginx.conf
upstream tomcat {
sticky; #静态锁定一个ip对应一个服务器,除非session被清除后才变化。
server 172.25.4.2:8080;
server 172.25.4.3:8080;
}
location ~ \.jsp$ {
proxy_pass http://tomcat;
}
nginx -t检测语法
会发现有报错,因为配置文件写了sticky,而本身在编译的时候没有加参数:
重新编译nginx
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/root/nginx-goodies-nginx-sticky-module-ng-08a395c66e42
因为没有nginx-goodies-nginx-sticky-module-ng-08a395c66e42也会报错!
所以下载 解压它!
继续编译,成功之后只做make,不make install!!!
再次 nginx -t
nginx -s reload
可以看到网页第一行server info 712.25.1.2
输入name和key,当客户端切换时,session也会随之消失
当把server2 shutdown之后
就会自动切换为server3:
server info 172.25.1.3:如下图所示:
解决方法:
tomcat结合memcached 交叉存储session!
在真机上:拷贝/jar下面的所有文件到server3上
scp jar/* root@172.25.1.3:/usr/local/tomcat/lib/
bin/shutdown.sh #关闭tomcat
cd /usr/local/tomcat/
安装memcached
yum install -y memcached
systemctl start memcached.service #端口11211
netstat -antlp #查看端口
vim /usr/local/tomcat/conf/context.xml
server2中添加内容如下:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.1.2:11211,n2:172.25.1.3:11211"
failoverNodes="n1"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.1.2:11211,n2:172.25.1.3:11211"
failoverNodes="n2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
然后重启server2,3
bin/shutdown.sh
bin/startup.sh
然后查看:
tail -f logs/catalina.out
看到这一行表示成功!
INFO: MemcachedSessionService finished initialization, sticky true, operation timeout 1000, with node ids [n2] and failover node ids [n1]
GoAccess 是什么?
GoAccess 是一款开源的且具有交互视图界面的实时 Web 日志分析工具,通过你的 Web 浏览器或者 *nix 系统下的终端程序(terminal)即可访问。能为系统管理员提供快速且有价值的 HTTP 统计,并以在线可视化服务器的方式呈现。
下载:https://goaccess.io/download
解压:tar zxf goaccess-1.4.tar.gz
cd goaccess-1.4/
goaccess的配置:生成 Makefile,为下一步的编译做准备
查看配置选项列表:./configure --help
./configure --enable-utf8 --enable-geoip=legacy
## --enable-utf8:宽字符支持。依赖 Ncursesw 模块。
## --enable-geoip=legacy:地理位置支持。依赖 MaxMind GeoIP 模块,legacy 将使用原始 GeoIP 数据库。
会发现缺少某些依赖包!
那么如何去下载呢?
来到网站上面搜索下载:
找到了download的地址
网址就是这个:
http://mirror.centos.org/centos/7/os/x86_64/Packages/GeoIP-devel-1.5.0-14.el7.x86_64.rpm
直接wget下载:
rpm -ivh GeoIP-devel-1.5.0-14.el7.x86_64.rpm --nodeps
继续编译:
完成后,make , make install
查看goaccess命令的位置:which goaccess
生成一个新的html文件,把当前access.log日志中的内容实时的以html图表的形式展示出来
cd /usr/local/nginx/logs
ls
goaccess access.log -o /usr/local/nginx/html/report.html --log-format=COMBINED --real-time-html