1. 依据网站类型来考虑网站运行起来的环境:
网站开发的语言
JAVA:LNMT (linux nginx mysql tomcat)
PHP:(参考zabbix)LNMP, 把网站的代理放到网页根目录下
Python:LNMU (UWSGI)
2. 项目部署:
1-1 项目类型(项目的开发语言)
1-2 项目运行平台的技术选择
1-3 尽快让项目运行起来——ALL IN ONE部署(把服务和项目代码放在同一台机器上)
1-4 架构的优化:将原本部署在一台机子上的服务拆分到多个机器上去运行。)
{以苹果公司为例,运维:开发:测试=1:2:4}
所有的服务配置在一台机子上,好处是:这些服务之间的联动可以用127.0.0.1,相比于多机器之间的联动快很多,因为本地回环接口走的是内核而不是网卡。
坏处是:1.一旦这台机器出问题,全部站点都瘫痪。
2.所有服务部署在一台机器上会有资源上限,资源抢占的问题。
当项目运行起来后会出现bug,此时进行调优,把服务拆分到多台机子上,此为架构优化。
服务拆分:考虑先拆谁?
首先linux不能动,先拆对于系统资源消耗更多的服务(nginx,php-fpm,mysql在处理相同请求下哪个消耗系统资源更多则拆谁)mysql消耗系统资源最大的,下来是处理后端服务php,消耗系统资源最少的是nginx(处理静态资源),
[同样的资源nginx能处理10000个请求,php能处理3000个请求,msql能处理1000个请求]
从系统资源消耗最大的开始优化:做拆分处理,先拆mysql,但mysql同时处理
不了LNP请求,想要维持平衡,多放几个mysql服务器。多个mysql服务器同时抗LNP服务器的压力。问题是多个mysql服务器怎么保持一致?以及资源请求怎么分配的问题?
{涉及第三阶段内容}
mysql和应用类的服务器区别:mysql要解决多机数据服务的问题,用到mysql-split读写分离架构,根据不同请求分配到不同服务器上,再根据mysql-ms主从同步架构,实现数据同步。
再下一层利用ceph(fs)文件系统共享存储,让多个mysql机器同时挂载ceph文件系统,实现多机数据同步,文件系统支持读写操作。
可以对应用服务器层面再做拆分,nginx服务器只部署静态资源,php上只部署动态资源,php直连mysql。
(请求怎么从nginx到php呢?)配置文件中
location ~/.php$ {
fastcgi_pass 127.0.0.1:9000}如果将nginx和php分开,则不能写127.0.0.1:9000,应该写php服务器ip.
与mysql相同,为了均衡负载,php服务器多加一台,不能超过mysql服务器,通过nginx中的upstream(nginx反向代理),将php服务器做成集群实现读写分离。
以tomcat为例,将toms换成phps即可
upsream toms {
server 192.168.1.1:8080;
server 192.168.1.2:8080;
} ——-定义集群
server {
location / {
proxy_pass http://toms/;
}
{通过nginx读写分离和反向代理集群实现}
如果用户数量增加,同时对nginx服务器进行访问,如果给nginx加一台服务器,相应的php,mysql服务器都应该增加保持平衡。
(请求怎么被两个nginx分摊?)在web服务器上面加一个负载均衡服务器,负载均衡服务器可以实现对于nginx负载均衡处理,负载均衡服务器可以选择的软件:lvs nginx haproxy(根据请求数量进行选择)
(通过健康检查,怎么解决负载均衡服务器单点故障的问题?)再加一个负载均衡服务器,两个负载均衡服务器成为主备关系,也就是高可用集群:keepalived。
标签:负载,架构,请求,LNMP,nginx,mysql,服务器,php From: https://blog.51cto.com/u_16996126/11917229