系列文章目录
lnmp2lnmp架构2-lnmp架构的搭建
lnmp架构图
一、Mysql的初始化
将启动脚本考入/etc/init.d/下启动(init方式传统启动脚本)
装了mariadb以后才会有这个文件
这个是Mysql的全局变量参数,在这里面配置的参数是全局生效的,并且持久化
修改mariadb的全局变量参数文件并作为Mysql的全局变量参数文件
包含很多Mysql数据库的配置参数
Mysqld默认会读取的文件
初始化参数,一个是安全的,一个是非安全的
非安全是没有给管理员加密码,你要进去以后加密码
安全的是随机生成了密码
为了安全性,让mysql运行在私有用户中,不是直接在root下运行
运行完以后生成一个随机密码
在启动以后,如果有报错,可以去改路径下去查看
netstat - antlp查看到3306mysql端口已经打开了
已经启动了
生产环境推荐使用的安全安装
将刚才生成随机密码输入,自己设置新的密码后,是否启动密码校验脚本,我选择的是No
启动密码校验脚本的话,会强制你密码的强度,字符串大小写长度等等
刷新数据库的认证数据表
-p后面跟的是密码,进入到了数据库,warning是推荐你不要-p后面直接接入密码,这样别人history就能查到你数据库的密码,不安全使用交互式输入密码
二、php的源码编译
rpm 源码 自动化 容器化安装都行
可以直接去php下载php的源码
我直接在我的服务器下获取
yum install bzip2 -y
–with-config-file是php主配置文件的目录,–enable-fpm激活faster cgi的管理器 --with-fpm-user指定Php运行的时候以什么身份运行,用Nginx当初配Nginx时候的用户,这样可以防止处理权限问题了,不指定,默认是httpd,可不加,你后面可以更改主配置文件来随时更改用户
选项越多,编译的模块依赖性就越多
–with-curl curl命令 iconv 有关图形 --with-mhash加密 --with-zlib 网页压缩 --with-openssl网页加密 --enable-mysqlnd直通数据库,5.4以后默认就会激活Mysql的nd驱动,原生的话要外挂mysql这样会外加模块,占用内存,这个是php自己的模块可以减少内存
mysqlli pdo-mysl都是通过调用mysqlnd来完成
soap是动态模块sockets网页的socket --enable-inline php的优化参数
这些参数连安装rpm包的参数都不够
系统自带的php动态的包,缺什么直接安装
系统优先找rpm包,所以源码编译的时候不要安装rpm包
-libsystemddevel没有
这个包系统不带,我从阿里云下载的
make 以后然后make install
三、更改php的配置
默认配置目录
将php变量加入用户变量中
将default去掉就是它的默认配置文件
;代表注释,去掉该注释
不用变更文件,看看里面的配置
监听端口
进程pm最多5个,默认2个,保持一个空闲
进入php源码里面拷贝所需配置文件
这是主配置文件
考入源码包里面的启动脚本
有两种启动方式
init方式,起名php-fpm
由于编译的使用了–sytemd使用它可以用systemctl来启动
systemd启动:
没有特别具体的报错
错误点READ-only,百度查看
是因为启动了保护,不让在里面写入东西
每次修改这里的文件都需要reload一下
注释掉这个
启动以后,需要去修改配置文件里面的时区
rpm包编译是cgi 无后台程序
源码是fastcgi 有后台程序,所以可以平滑加载
但是后台会消耗大,所以一般会做反向代理和负载均衡
直接访问9000端口访问php意义不大
三、 做nginx和php-fpm的整合
当php处理以php结尾的请求
通过fastcgi递交给后台的9000端口
注释掉是因为这个文件包含了
路径要写自己的与官方不一样
nginx开机自启
查看php自带的内部的信息函数,通常不要让外部主机访问这个Info
四、 nginx + php-fpm + mysqld的整合
如果数据库不在本地还可以指定远程的主机,用户还有密码
测试
php代码写的数据库管理工具
权限没有问题
是找不到它的首页
解决方法
定义默认如何找首页
这里的用户是数据库的用户,不是操作系统里面的用户
root和刚才进入数据库的密码
目录中的other进不去
php和Nginx都是nginx用户针对这个文件是other所以进不去
lnmp搭建完成
五、 扩充PHP模块之memcache
没有config
一定要把php源码路径的安装目录中的Bin放在全局环境中,要不然调用不了phpize
这个指令可以完成预编译环境,其实就是寻找你的动态库
make make install
该模块安装在这个位置
php的主配置文件,php-fpm是php的管理器
写一个扩展参数
平滑加载,重新加载你的主配置文件
-m是列出php所有模块
这个是nosql数据库,做数据库的缓冲,完全运行在内存
传统的关系式数据库结构是存储结构化关系数据
netstat -antlpe监听端口11211端口
nosql数据库,完全运行在内存,默认启动会占用你本机64M的内存量,也可以修改
将数据写入你内存,读写速度快,特点不能做持久化,一重启数据就没有了,内存没有做持久化
好处快,并且降低数据库的压力
连接memache
默认会连接你的11211端口,如果你的memache在远程你可以替换掉你的localhost
编写的就是把数据存入你的内存
数据存入你的内存里面了
监控页面
修改认证的admin和密码,不改也行
memache没有集群的概念是分布的,每个结点,对cpu没有要求,对内存有要求,所以不好的电脑多插入几个内存,可以当memache服务器
远程的话多加几个ip地址就行了
多刷几遍这个
这个页面监控的是在Memache里面的命中率,就是访问example.php页面的时候就是访问的memache
缓存命中率非常高
需要php什么模块就官网搜索下载然后搭建起来
下载进入安装的目录
phpize(加载php安装路径和库)
./configure源码编译三部曲
nginx高速缓存
现在(前面)搭建好的是传统的缓存策略
访问的php页面
80->9000(php-fpm管理器)->调用php进程处理->memache 该方式比Php加载到mysql模块,访问mysql(sql)磁盘,Memache(nosql)内存,访问内存快
这个架构也可以,先访问Memache,有无命中,没有这个去Mysql取,取到后再存入memache
php进程处理
弊端:nginx高并发不能体现出来
因为nginx通过fastcgi这个方式递交给php后端这个方式后,生命周期由后端php来处理**(nginx的反向代理,客户端通过nginx代理到后端的php,而不是直接访问php)**
高并发可以继续处理客户端的请求,但是无法返回客户端需要的数据
由于动态,静态直接nginx给,但是动态的页面则需要到后端的数据库以及memache里面来取
通过压力测试
ab是http的压力测试工具
-c10并发10个,-n5000完成5000次请求
每s处理2000多个请求
高效缓存策略
不需要动态语言的处理,直接返回(非常快),生命周期变成nginx可以发挥好Nginx高并发的特性
需要2个模块,memc(专门连接memache,也可以换成redis,也可以是别的存储,filesystem)和scrache(nginx标准模块,专门处理缓存,可以连接后端不同类型的缓存设施)
默认Nginx没有这些模块,需要到官网下载,进行编译,(麻烦,让nginx支持cookie算法,每次都要编译麻烦)
我使用另一款nginx发行版,openresty
内部就是Nginx,加了lua脚本
适合敏捷的web开发,可以支持web服务器的快速扩展,如动态更新
都是基于lua,更加灵活
这个已经集成了大量的nginx模块,不用安装
同样是web服务器同样是80会冲突,所以先停掉Nginx
有时候服务启动不来,就是端口冲突
所以查看ps ax 和 netstat -antlp
查看有无重复启动服务,和端口冲突没
它的安装参数和Nginx一样,所以直接用直接nginx安装参数就行,内部就是Nginx
但是其默认安装路径就是/usr/local/openresty
make make install
修改主配置文件
对照之前Nginx的主配置文件修改
我直接把/usr/local/nginx/conf/nginx.conf文件考入覆盖掉/usr/local/openresty/nginx/conf
启动openresty
没有问题
定义后端有多少个memache,多个Memache是来负载均衡的,本机127.0.1,如果想要远程输入ip
逻辑,用户访问的url,先到memache看有无该key,没有,通过fastcgi_pass递交给后端的php取,取完后返回值为200就成功,再调用srcache_store 将数据上传到memache,下次直接就可以去memache取
现在是Nginx来控制生命周期了
压力测试
速度变成2w多每s处理数据
END