Lamp架构从入门到精通

发布时间:2024年01月15日

系列文章目录

lnmp架构


一、源码编译

Nginx web 7 proxy cdn(cache)
www.nginx.com官网 www.nginx.org 下载要下载稳定版本Stable
阿里发行的版本Tengine(修改后的Nginx,二次开发)
源码编译可以灵活定制你需要的功能相比较rpm包安装
源码编译三部曲:
configure (这个是个脚本,gnumake)
make
make install
camke有缓存(有安装进度),gnumake没有缓存,每次都会重新编译

configure(检测预编译环境是否可行)

./configure --help 查看编译的功能模板
如果不指定安装路径一般安装在/usr/local 配置文件放在/usr/local/etc 二进制程序放在 /usr/local/bin(在系统的环境变量里面,echo $PATH)
指定安装路径比较好,以后备份删除修改都方便查找 --prefix=/usr/local/nginx
–with默认不编译,想要编译这个模板就加入–with
–without默认编译,去掉这个功能,就–without
缺少xxx library 在系统一般是xxx-devel(开发包),不是的话yum search找下
编译成功后,会把你之前写的参数写入到Makefile中,执行make的时候回读取当前的Makefile
configure没有生成Makefile的话,make也无法执行

make

编译时间与源代码量和机器性能有关
把源码编译成二进制程序

make install

make install 会把编译好的二进制程序、配置文件等,拷贝到指定的位置/usr/local/nginx,在修改nginx配置的时候要在/usr/loacl/nginx里面的conf修改而不是源码包里面的conf修改
在make install安装完后,可以回收到源码包
源码包/objs
有个绿色的文件nginx(编译好的二进制程序)
在这里插入图片描述
在make install的时候会把源码里面拷贝到这个路径
在这里插入图片描述
在源码包里面有个conf这里面是它的配置
在这里插入图片描述在这里插入图片描述

在安装路径,二进制程序在sbin目录里面

在这里插入图片描述

希望让其被系统环境识别

在这里插入图片描述

在这里插入图片描述
在运行后,它会产生临时的目录

在这里插入图片描述

优化关闭Debug

传参(相当于kill)
在这里插入图片描述
由于c语言编译会产生很多的临时文件,所以清理
在这里插入图片描述
为了更纯净的,可以删掉,重新解压一个tar包

在这里插入图片描述
关闭其debug
在这里插入图片描述
在这里插入图片描述
然后继续configure make make install
优化成功
在这里插入图片描述

二、 nginx负载均衡

ps aux 查到Nginx
在这里插入图片描述在这里插入图片描述
变更conf文件/usr/local/nginx/conf
在这里插入图片描述在这里插入图片描述
ps aux
在这里插入图片描述/usr/local/nginx conf里面这些是gobal
在这里插入图片描述在这里插入图片描述
在http里加的参数会直接作用里面所有的server
定义负载均衡器名字westos
在这里插入图片描述
location / 当访问/目录的时候
proxy_pass 反向代理http://westos(负载均衡器的名字)
反向代理,负载均衡加速
反向代理,客户端不需要任何操作,代理服务器帮忙
正向代理,客户端需要设置代理服务器(网游和翻墙)
在这里插入图片描述
检测语法-t,没有问题就可以刷新服务了

在这里插入图片描述
给结点2和结点3开启Httpd服务
http报错5开头一般是服务端有问题,百度直接搜索HTTP状态码
在这里插入图片描述

三、nginx的高并发

修改并发到65535,一个进程并发65535

在这里插入图片描述

nginx work数量的设定

work数量和你cpu数量是相关的,几个cpu几个work

在这里插入图片描述

根据cpu数量自动判断几个work

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

nginx work进程与cpu的静态绑定

01表示第一个cpu核心,10表示第二个cpu核心
把work的进程和cpu进行静态的绑定,这样可以大量避免cpu上下文切换带来的损耗

在这里插入图片描述
具体更多用法查看Nginx work_processes参数

压力测试

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

httpd自带的ab压测工具 -c 1 一个并发
在这里插入图片描述
没有请求失败的,每s速度8000
在这里插入图片描述
压力都在server2 server3上去了
由于是反向代理,所以吞吐量(流量要除以2)
netstat-antlpe

在这里插入图片描述在这里插入图片描述
大概用了10s左右
在这里插入图片描述

nginx高并发

在这里插入图片描述

在这里插入图片描述

修改操作系统的限制

在这里插入图片描述
要添加这个,要不然操作系统默认是1024,突破不了,65535
即改即生效
在这里插入图片描述
速度变快了
在这里插入图片描述

四、nginx技术阅读文档

阅读官方文档 https://docs.nginx.com/nginx/,学习
在这里插入图片描述

五、nginx权重以及nginx的健康检测

设置权重 https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/
在这里插入图片描述
server2接受的请求就变多了
在这里插入图片描述
设置本机的80端口,只要后端有一个服务端存活,就不会启动本机bakeup,在bakeup服务器不要放应用服务,写入此网站正在维护中

在这里插入图片描述

关闭后端的server2和server3的httpd,它有健康监测,当后端没有服务器,便会启动自己

在这里插入图片描述

六、nginx ip哈希负载均衡

算法,ip哈希(不支持bakeup)

在这里插入图片描述
只要来源不变,访问服务器不变

在这里插入图片描述
问题:client->dns->CDN(内容分发网络,用来加速,减轻后端server的压力)
client(原地址,目标地址) -> cdn(反向代理)->nginx(获取的地址时cdn的地址,很多客户端过了cdn,地址都变成cdn了)nginx变会调度到同一服务器

如果架构有缓存,不能用哈希ip算法

七、基于cookie算法的nginx负载均衡

手动下线某台机器
在这里插入图片描述在这里插入图片描述
这种算法,是那台服务器负载小调度谁,但是这个服务要Nginx plus才能用,收费
在这里插入图片描述
所以使用基于cookie的算法
希望不同客户端过cdn都能均衡,过cdn以后ip变成一样
在这里插入图片描述
添加算法sticky
在这里插入图片描述
Nginx服务启动不来,因为是nginx plus才能使用的,注释掉sticky

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

替代方法

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
重新编译
在这里插入图片描述在这里插入图片描述
重新进入/usr/local/nginx/conf/nginx.conf
把刚才注释的sticky算法打开
在这里插入图片描述
sticky算法,这种算法是基于浏览器的cookie来负载均衡
cookie非常小,每当客户端访问时,server端会给客户端返回一个cookie,这个值交给浏览器(浏览器要支持)(关闭浏览器会被自动清理),之后所有的请求都会带cookie过去,当cookie到服务器时候,会对应服务器内存的sasion,继续由同一个后端处理清理网页缓存后

刷都是server2
在这里插入图片描述
在这里插入图片描述
不能用curl命令,curl命令不支持cookie
不用原地址做哈希,用cookie来解决,即使过cdn cache都行

八、 lnmp架构

前2列是前面做的负载均衡后面是lnmp架构(电商的平台)
lamp=linux/unix/windows(操作系统) +apache/nginx/…(web服务器)+mysql/pgsql/…(数据库)+php/jsp/python…(动态语言)
通过路由器的等价路由,配合OSPF等价协议,扩展LVS
在这里插入图片描述

九、数据库的编译

编译mysql数据库
www.mysql.com下载源码,我们需要编译
也可以下载集成好的包
在这里插入图片描述选择源码下载
在这里插入图片描述
下载这个,这个含有c++的boost库,要不然还要额外的下载
在这里插入图片描述
在这里插入图片描述

第三个版本更新表示修复bug
第二个版本更新新的功能
第一个版本变更表示大变更

编译完要占用10个G,所以/空间一定要够用
在这里插入图片描述
里面没有configure(gmake)这个是cmake

在这里插入图片描述在这里插入图片描述
pub/docs/有lamp架构的部署文档
在这里插入图片描述
\vi因为里面很多特殊字符,用vim就不转译了
在这里插入图片描述安装的时候从真机复制就没问题了

官方推荐创建Build目录,在这个目录里面编译
数据目录也可以挂载远程的存储区
sock没有指定默认在/tmp
数据库的字符集很重要
在这里插入图片描述
找不到Boost库
在这里插入图片描述在这里插入图片描述
写相对路径和绝对路径都行,我写的是绝对路径

在这里插入图片描述
缺少c++编译器
在这里插入图片描述
在这里插入图片描述
缺少依赖性,告诉你是redhat系统,应该需要这个软件
在这里插入图片描述在这里插入图片描述
由于cmake有cache文件
在这里插入图片描述
所以
在这里插入图片描述
继续编译,编译成功在这里插入图片描述
有个警告
在这里插入图片描述在这里插入图片描述
完全编译成功
在这里插入图片描述
如果是在真机上面,可以make -j10,开启10cpu一块编译
但是在虚拟机就单线程make编译就行,虚拟机是2G内存,很容易内存溢出,cmake有安装进度,虚拟机可以分配7G内存,一定要给真机留够1G的内存,要不然很容器就卡死了
在这里插入图片描述

cmake安装是有进度的

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

END

系列文章目录

lnmp2


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

在这里插入图片描述

文章来源:https://blog.csdn.net/westos_yanzheng/article/details/135596752
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。