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。