LAMP架构
- LAMP(Linux+Apache+MYSQL|Mariadb+PHP|PERL|Python)WEB架构组合。
- LNMP、LEMP、LTMP、WNMP都是主流的WEB架构组合;Nginx版本1.10、Apache版本2.4,MYSQL版本5.6,PHP版本5.6;
- LAMP(Linux+Apache+MYSQL|Mariadb+PHP|Python+Perl)新型组合方式;
- LEMP(Linux+Nginx+MYSQL|Mariadb+PHP|Python+Perl)组合方式,也称为LNMP架构;
- LAMP主要用于发布PHP动态页面+静态页面,基于HTTP协议发布WEB网页,供用户浏览器基于HTTP协议去访问(FTP协议,C/S模式,客户端和服务器端);
- Linux+Apache+PHP+MYSQL,Linux开源操作系统,Apache是WEB服务器,PHP是一门解释型语言,MYSQL关系型数据库,主要用于存储用户信息、银行卡、订单购物、工资信息、论坛用户名和密码(由不同表,表中不同行和列组成,Redis属于nosql非关系型数据库;)
- Linux+Apache+PHP主流的架构,用于发布PHP动态页面+HTML静态页面;
- PHP一门动态语言,底层是基于C编写的,PHP解释型语言,解析PHP页面代码;
- LAMP放在一台服务器,性能影响很大,Apache占用系统CPU、内存,而MYSQL占用CPU、内存;
- MYSQL需要独立另外一台服务器,生产环境,MYSQL独立的服务器,硬盘SSD,高性能IO存储卡;
-
Nginx|Apache web服务器发布静态页面,MYSQL开源、收费,(Mariadb开源免费)、PHP一门解释性动态语言(网页代码index.php),PHP模块解析,基于Apache+PHP整合,互联网主流发布PHP网站架构。Apache将页面请求交给PHP模块,由PHP模块去解析该页面,解析完毕PHP解释器将页面内容返回给Apache,apache最终返回给用户
- Apache|Nginx属于WEB服务软件,LNMP、LEMP、LTMP、WNMP都是主流的WEB架构组合;Apache多模块的WEB服务器,只能处理静态网页;
- Apache通过URL匹配用户访问网站文件,检测文件的后缀是否静态页面,静态文件后缀:html、htm、css、js、txt、png、jpg等,Apache WEB直接响应用户请求,返回页面内容;
- 用于发布静态网页,跟数据库没有交互,内容不经常更新,静态页面文件后缀html、txt、css、js、png、jpg、gif;动态页面,跟数据库发生交互,动态网页后缀.php、jsp、asp、aspx、do、cgi;
- 静态页面(静态文件):(html、css、js、txt、xml、gif,jpg、png、jpeg、xml、flv、MP4、wmv),不与数据库发生交互;
- 动态页面(动态文件):(php、jsp、do、asp、aspx、cgi),与数据库进行交互;
- MySQL|Mariadb都是属于数据库,关系型数据库,由常规表、表由不同行、列,存储订单、工资信息、员工个人、论坛用户、密码、银行卡号、密码等;
- PHP|PERL|Python,都是属于不同的语言,PHP解释型动态语言,SA系统管理员,需要将PHP代码发布到外网;,PHP语言开发PHP动态网页,动态网页可以实现各种业务需求;基于动态语言开发动态WEB网页,Apache不能直接发布动态网页,需要基于第三方工具或者动态语言相关的解释器;
- 源码软件基于C、C++语言编写的,Linux系统无法直接使用,需要通过GCC编译器生成二进制文件
- Apache跟PHP组合方式,数据传递方式,PHP module形式、CGI方式、FastCGI;Apache和PHP默认整合使用php module;
- 服务器操作系统分区:/boot 200M,swap 512M,/ 40GB,剩余大小500G+给/data分区;
- Redis是一种高级key-value数据库,它跟memcached类似,Redis的数据可以持久化,Redis被看成是一种数据结构服务器。
- Apache通过URL匹配用户访问网站文件,检测文件的后缀是否静态页面
- Apache跟PHP组合方式,数据传递方式,PHP module形式、CGI方式、FastCGI;Apache和PHP默认整合使用php module;
- Apache发布目录:网站的根目录:/var/www/html/
工作过程:
1、当客户请求的是静态资源时,web服务器会直接把静态资源返回客户端;
2、当客户请求的是动态资源时,httpd的php模块会进行相应的动态资源运算,如果此过程还需要数据库的数据作为运算参数时,php会连接mysql获取数据后进行运算,运算的结果转为静态资源由web服务器返回到客户端
LAMP工作原理
- 用户通过浏览器访问http://bbs.jfedu.net/ 京峰教育PHP门户网站,浏览器会检查自身的缓存是否存在该域名对应的IP地址,如果有的发起向IP 80端口请求,浏览器缓存域名+IP记录,1分钟、1000条;
- 浏览器发起Windows系统调用,检查操作系统本地hosts文件是否存在域名+IP记录,如果有该记录直接发起HTTP请求;
- 检查本地客户端DNS服务器,检查自身是否存在域名对应的IP,如果存在直接返回,这种查询称为递归查询;如果本地DNS服务器没有记录,请求发往根DNS,bbs.jfedu.net域名对应的IP进行解析,直到解析IP为止,这种方式称为迭代查询;
- 浏览器获取到域名对应IP地址之后呢,向服务器的80端口发起HTTP请求,首先会建立三次握手,客户端发送syn、seq序列号,服务器端收到客户端syn请求,发起syn+seq+ack(seq+1)给客户端,客户端收到服务端确认的请求之后,客户端发起ack=1确认号,进入ESTABLISHED状态,服务器端收到确认号也会变成ESTABLISHED;
- Apache WEB收到用户发起HTTP请求,会判断用户请求网页文件,如果判断用户请求文件为静态文件,此时Apache直接处理该文件,返回数据给浏览器,浏览器经过解析参考MIME协议和渲染最终出现WEB页面;
- 如果Apache检查到用户请求动态文件,例如forum.php文件,Apache是不能直接解析的,交给PHP模块libphp5.so,PHP解释器解析PHP文件,解析成静态文件,将内容返回Apache,Apache将数据返回给浏览器,浏览器经过解析参考MIME协议和渲染最终出现WEB页面;
- Apache有三种工作模式,分别是:prefork模式、worker模式、event模式,默认MPM模块是prefork模块。
- APR,为什么apache、tomcat都会用到apr,扩展跨平台移植库,看成一个接口,应用程序跟操作系统更好进行交互、系统调用;
LAMP软件实现(生产环境落地)
- 调研PHP网站面向人群,每天访问量10万PV、100万PV,相当于20万人次访问,每个小时产生2万人!10M带宽!
- 评估WEB网站的性能,网站对外的带宽,服务器硬件配置选配,标配配置,CPU:2颗物理CPU Intel Xeon E5-2630 2.4Ghz主频,逻辑CPU个数16C或者24C;
- 服务器硬件内存,32G内存,硬盘SAS 15K转速 2x600G Raid 1冗余;
- Linux操作系统选择,CentOS6.8+或者CentOS7.3,2.6和3.10内核版本;
- 服务器操作系统分区:/boot 200M,swap 512M,/ 40GB,剩余大小500G+给/data分区;
- Linux操作系统选择,CentOS6.8+或者CentOS7.3,2.6和3.10内核版本;
- 服务器操作系统分区:/boot 200M,swap 512M,/ 40GB,剩余大小500G+给/data分区;
- 对Linux操作系统进行Linux内核调优,最大打开文件数、描述符、端口数、TCP连接时间、关闭不必要服务和端口;
源码编译与二进制安装
1)源码安装比较麻烦,需要解决各种依赖,方便管理,方便定制各种功能;
2)二进制rpm|yum安装,自动解决依赖,不利于管理,不能定制功能;
3)线上生产环境推荐源码安装,方便管理,定制需要的功能;
关系型数据库特点:
1、数据以表格的形式出现;
2、每行记录数据的真实内容;
3、每列记录数据真实内容的数据域;
4、无数的行和列组成一张表;
5、若干的表组成一个数据库;
Apache性能调优
1)Apache WEB服务器,多模块,基于多个模块工作,需要某个模块就添加,不需要就无需添加模块;
2)Apache优化,选择Apache MPM处理请求方式,Prefork模式、Worker模式、Event模式,其中Prefork默认模式;
3)Prefork模式,预派生多进程方式,每个进程包含一个线程,每个线程同一时刻只能处理一个请求,进程之间是独立的,没有影响,一个进程挂掉,不影响其他的进程,稳定、靠谱,缺点占用内存、CPU资源高
<IfModule prefork.c> Prefork MPM引擎配置段;
StartServers 8 默认启动Apache工作进程数;
MinSpareServers 5 最小空闲进程数;
MaxSpareServers 20 最大空闲进程数;
ServerLimit 4096 Apache服务器最多进程数;
MaxClients 4096 每秒支持的最大客户端并发;
MaxRequestsPerChild 4000 每个进程能处理的最大请求数;
</IfModule>
4)Work模式,预派生多进程方式,每个进程包含多个线程,每个线程同一时刻只能处理一个请求,进程之间是独立的,没有影响,一个进程挂掉,不影响其他的进程,但是如果一个进程中某个线程奔溃,整个进程及旗下所有线程都会奔溃,而且所有的线程共享该进程所有资源,相对稳定,高性能,应用于高并发!
5)Event模式,不支持HTTPS,一般用的比较少,性能比较强悍,比prefork模式性能高,Apache官网推荐在测试环境使用;
3)Prefork模式,
<IfModule prefork.c> Prefork MPM引擎配置段;
StartServers 8 默认启动Apache工作进程数;
MinSpareServers 5 最小空闲进程数;
MaxSpareServers 20 最大空闲进程数;
ServerLimit 4096 Apache服务器最多进程数;
MaxClients 4096 每秒支持的最大客户端并发;
MaxRequestsPerChild 4000 每个进程能处理的最大请求数;
</IfModule>
<IfModule worker.c> Worker MPM引擎配置段;
StartServers 8 默认启动Apache工作进程数;
MaxClients 4000 每秒支持的最大客户端并发;
MinSpareThreads 25 最小空闲线程数;
MaxSpareThreads 75 最小空闲线程数;
ThreadsPerChild 75 每个进程启动的线程数;
MaxRequestsPerChild 0 每个进程能处理的最大请求数,0表示无限制;
</IfModule>
MYSQL主从原理(面试必备):
- 异步复制过程,至少需要2台或者2个实例,不是实时同步;
- 至少需要三个线程,master开启IO,slave开启IO和SQL,同时master开启bin-log日志功能(记录MYSQL库增、删、改、插入操作);
- Slave来同步master bin-log文件中SQL语句内容;
- 主要是实现MYSQL数据备份,从库异步同步主库的数据,在主库上插入SQL语句,SQL语句同步到从上,从而保证主库和从库数据一致;
Slave将同步的数据存放到本地relay-log中继日志中,SQL线程实时监测并且在本地执行.
LAMP两种方法,第一种基于YUM在线安装:
yum install httpd httpd-devel mysql mysql-server mysql-devel php php-devel php-mysql php-comon -y
service httpd restart
service mysqld restart
源码安装LA|NMP
安装APACHE
yum install -y apr-devel apr-util
cd /usr/local/src
wget https://mirrors.tuna.tsinghua.edu.cn/apache/httpd/httpd-2.2.34.tar.bz2
tar -jxvf httpd-2.2.34.tar.bz2
cd httpd-2.2.34
./configure --prefix=/usr/local/apache2/ --enable-so --enable-rewrite --enable-echo --enable-info
make
make install
预编译,提前检查操作系统能否满足httpd软件安装,有没有GCC(编译库);
make -j8 基于GCC库进行编译,主要是生成可运行二进制文件;
make -j8 install 将编译后的二进制文件cp至Linux prefix目录;
PHP(php-5.3.10)安装配置
cd /usr/local/src
wet -c http://museum.php.net/php5/php-5.3.10.tar.gz
yum install -y gb curl curl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel
cd php-5.3.10
./configure --prefix=/usr/local/php5 --enable-fpm --enable-debug --with-gb --with-jpeg-dir --with-png-dir --with-freetype-dir --enable-mbstring --with-curl --with-musql=/usr/local/mysql55/ --with-mysqli=/usr/local/mysql55/bin/mysql_config --with-config-file-path=/usr/local/php55/etc
make
make install
cp php.ini-development /usr/local/php5/etc/php.ini
安装php-5.3.28
cd /usr/local/src
wget -c http://mirrors.sohu.com/php/php-5.3.28.tar.bz2
tar jxf php-5.3.28.tar.bz2
wget http://mirrors.sohu.com/php/php-5.3.28.tar.bz2
tar jxf php-5.3.28.tar.bz2
cd php-5.3.28
./configure --prefix=/usr/local/php5 --with-config-file-path=/usr/local/php5/etc --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql55/
make
make install
MYSQL数据库源码编译
yum install gcc gcc-c++ glibc glibc-devel cmake ncurses-devel ncurses -y
cd /usr/local/src
wget http://down1.chinaunix.net/distfiles/mysql-5.5.20.tar.gz
tar –xzf mysql-5.5.20.tar.gz
cd mysql-5.5.20
./configure --prefix=/usr/local/mysql5/|cmake替代./configure
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql55 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DMYSQL_DATADIR=/data/mysql \
-DSYSCONFDIR=/etc \
-DMYSQL_USER=mysql \
-DMYSQL_TCP_PORT=3306 \
-DWITH_XTRADB_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EXTRA_CHARSETS=1 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DWITH_BIG_TABLES=1 \
-DWITH_DEBUG=0
make
make install
安装mysql-5.1.63
cd /usr/local/src
wget http://downloads.mysql.com/archives/mysql-5.1/mysql-5.1.63.tar.gz
tar xvf mysql-5.1.63.tar.gz
cd mysql-5.1.63
./configure --prefix=/usr/local/mysql --enable-assemble && make make install
配置Mysql服务为系统服务
cp /usr/local/mysql/share/mysql/mysql-medium.cnf /etc/my.cnf
cp /usr/local/mysql/share/mysql/mysql.server /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
chkconfig --level 35 mysqld on
cd /usr/local/mysql
useradd mysql
chown -R mysql.mysql /usr/local/mysql
/usr/local/mysql/bin/mysql_install_db --user=mysql
chown -R mysql var
/usr/local/mysql/bin/mysql_safe --user=mysql &&
nginx安装配置
wget -c http://nginx.org/download/nginx-1.12.0.tar.gz
tar -zxvf nginx-1.12.0.tar.gz
cd nginx-1.12.0
useradd www
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make
make install
MYSQL安装配置
yum install cmake ncurses-devel ncurses -y
weg http://down.chinaunix.net/disfiles/mysql-5.5.20.tar.gz
Apache+PHP源码整合
为了能让Apache发布PHP页面,需要将PHP安装完成后的libphp5.so模块与Apache进行整合,vim httpd.conf编辑配置文件,加入如下代码:
LoadModule php5_module modules/libphp5.so (默认已存在)
AddType application/x-httpd-php .php
DirectoryIndex index.php index.html index.htm
创建PHP测试页面,在/usr/local/apache/htdocs目录下创建index.php测试页面,执行如下命令自动创建:
cat >/usr/local/apache/htdocs/index.php<<EOF
<?php
phpinfo();
?>
EOF
重新启动Apache服务,浏览器输入 Apache WEB的IP访问,如图12-4所示,即代表LAMP源码环境整合成功。
MYSQL源码设置为系统服务:
将源码安装的Mysql数据库服务设置为系统服务,可以使用chkconfig管理,并启动MYSQL数据库
cd /usr/local/mysql55/
\cp support-files/my-large.cnf /etc/my.cnf
\cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --level 35 mysqld on
mkdir -p /data/mysql
useradd mysql
/usr/local/mysql55/scripts/mysql_install_db --user=mysql --datadir=/data/mysql/ --basedir=/usr/local/mysql55/
ln -s /usr/local/mysql55/bin/* /usr/bin/
service mysqld restart
使用shell安装LAMP
#!/bin/bash
#2017年7月19日15:09:44
#by author www.jfedu.net
#auto install lamp for Linux
###############
#Install Httpd Web service
wget -c http://mirror.bit.edu.cn/apache/httpd/httpd-2.2.34.tar.bz2
tar -jxf httpd-2.2.34.tar.bz2
cd httpd-2.2.34
./configure --prefix=/usr/local/apache2 --enable-so --enable-rewrite
make -j8
make -j8 install
#Install mysql db service
yum install cmake ncurses-devel ncurses –y
wget http://down1.chinaunix.net/distfiles/mysql-5.5.20.tar.gz
tar -xzf mysql-5.5.20.tar.gz
cd mysql-5-5.20
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql55 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DMYSQL_DATADIR=/data/mysql \
-DSYSCONFDIR=/etc \
-DMYSQL_USER=mysql \
-DMYSQL_TCP_PORT=3306 \
-DWITH_XTRADB_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EXTRA_CHARSETS=1 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DWITH_BIG_TABLES=1 \
-DWITH_DEBUG=0
make
make install
#Config mysql db 2017
cd /usr/local/mysql55/
\cp support-files/my-large.cnf /etc/my.cnf
\cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --level 35 mysqld on
mkdir -p /data/mysql
useradd mysql
/usr/local/mysql55/scripts/mysql_install_db --user=mysql --datadir=/data/mysql/ --basedir=/usr/local/mysql55/
ln -s /usr/local/mysql55/bin/* /usr/bin/
service mysqld restart
#Install PHP WEB service
wget http://mirrors.sohu.com/php/php-5.3.28.tar.bz2
tar jxf php-5.3.28.tar.bz2
cd php-5.3.28
./configure --prefix=/usr/local/php5 --with-config-file-path=/usr/local/php5/etc --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql55
#config lamp 2017
echo "AddType application/x-httpd-php .php" >>/usr/local/apache2/conf/httpd.conf
sed -i 's/index.html/index.php index.html/g' /usr/local/apache2/conf/httpd.conf
cat>/usr/local/apache2/htdocs/index.php<<EOF
<?php
phpinfo();
?>
EOF
常见问题:
1、
Starting MySQL.. ERROR! The server quit without updating PID file (/data/mysql/www-jfedu-net.pid).
解决问题的步骤:
- 查看MYSQL错误日志;
- 设置MYSQL软链接;
- 如果MYSQL运行中,需要先停止,然后再启动;
- 初始化MYSQL服务;
- 关闭操作系统Selinux服务;
- 查看数据目录是否有mysql权限;
2、unzip wordpress-4.7.4-zh_CN.zip
-bash: unzip: command not found
错误解决方法:yum install zip unzip –y
3、软件与系统不兼容
apr软件包问题
解决办法:把apr或者apache降版本,换成httpd-2.2.32.tar.gz,编译的时候去掉,apr编译的部分
链接:
Red Hat Enterprise Linux 4+Nginx 0.7.47+PHP5.2+MYSQL5.0+Memcache+eAccelerator : https://www.jb51.net/os/RedHat/15751.html
RHEL 7.0 编译安装Nginx1.6.0+MySQL5.6.19+PHP5.5.14运行环境 : https://www.jb51.net/os/RedHat/192933.html
yum 安装CentOS 7系统安装lamp环境 https://mp.weixin.qq.com/s/_WWK9emHCnSoRTgWC8tImA
VMware虚拟机安装CentOS 7并搭建Lamp服务器环境 https://mp.weixin.qq.com/s/VE_BOgMciB8FDkl-hL6Nsw
.htaccess中的apache rewrite规则详解 : http://blog.51cto.com/xiaogongju/2060949
apache虚拟机配置步骤和修改访问端口的方法(虚拟机端口映射) :https://www.jb51.net/article/46781.htm
apache虚拟机配置步骤和修改访问端口的方法(虚拟机端口映射) : https://www.jb51.net/article/46781.htm
apache性能测试工具ab使用详解 : https://www.jb51.net/article/59469.htm
Apache 虚拟目录和默认首页的设置 : https://www.jb51.net/article/20806.htm
Apache Rewrite url重定向功能的简单配置 : https://www.jb51.net/article/24435.htm
apache开启.htaccess及.htaccess的使用方法 : https://www.jb51.net/article/25476.htm
Centos6.3下Apache配置基于加密的认证https加密证书访问 : https://www.jb51.net/os/RedHat/81409.html
CentOS搭建LAMP服务器环境硬盘分区方案分享 : https://www.jb51.net/os/RedHat/86180.html
Linux操作系统下提高PHP性能的工具APC : https://www.jb51.net/os/RedHat/1322.html
PHP startup: Unable to load dynamic library错误的错误 : https://www.jb51.net/os/RedHat/1314.html
CentOS 5 服务器 Nginx (lamp) 环境推荐教程 :
centos5 源码安装Nginx + mysql + apache + php的方法 : https://www.jb51.net/os/RedHat/35925.html
Centos 5.5 php5.1.2升级到php5.2.6的方法 : https://www.jb51.net/os/RedHat/35036.html
Centos Nginx + Svbversion配置安装方法分享 : https://www.jb51.net/os/RedHat/35924.html
Centos5.2配置LAMP与Centos5.3配置LAMP : https://www.jb51.net/os/RedHat/22433.html
LAMP服务器性能优化技巧之加速PHP : https://www.jb51.net/article/29721.htm
RedHat AS4上安装配置Apache2.2.4+PHP5.2.3+MySQL5.0.45+openssl0.98e : https://www.jb51.net/os/RedHat/1132.html