前面几篇中分别简单介绍了web服务的基本原理、基本配置、简单编译安装以及LAMP的基本概念工作模型。

本篇博文将尝试在四台主机上分别编译安装httpd(2台)、php、mysql,实现一套LAMP框架下工作的web服务。httpd与php服务器通过fastcgi实现互联;php与mysql通过msqlnd实现互联;httpd服务器间使用nfs共享数据,nfs部署在php服务器上(刚好也能实现动态页面解析)。

基本内容如下:

httpd的编译安装

mysql的安装

php的编译安装

nfs配置

联机配置调试

一、全局规划

Linux入门之web服务(五)----LAMP编译安装详解,过把瘾_fastcig nfs  高可用

如图所示,共有四台主机,两台httpd主机,一台php主机(nfs共享磁盘也在此服务器上)、mysql数据库服务器。实验环境,centos6.5,x86_64。编译安装环境均安装好“Developmnet Tools和“Server PlatForm Development”包组。有特殊环境有求的,具体章节会给出。怎样安装这些包组不再详细讲解。(注:所有使用yum源安装的支持包组,均使用epel源进行安装,朋友们可以自行修改yum配置文件,连接epel的yum源进行安装)

httpd服务器2台,准备安装包apr-1.5.0.tar.bz2,apr-util-1.5.3.tar.bz2,httpd-2.4.9.tar.bz2主要负责静态页面显示,动态页面请求转发
php服务器1台,准备安装包php-5.4.26.tar.bz2,主要负责php页面解析,同时部署nfs共享磁盘,放置动态页面和静态页面,供httpd服务器使用。
mysql1台,通过安装包mysql-5.5.33-linux2.6-x86_64.tar.gz。此处要注意安装包的平台匹配负责提供数据库服务

这里要密切注意的是服务器配置安装的顺序问题,如果是在同一台机器上安装所有的服务,那么就必须把php放到最后,这里,我们分别置于不同的主机上,因此没有太多的顺序要求,但是,由于测试等需求,建议先安装httpd、mysql然后再安装php。

二、httpd的编译安装

这个系列已经讲过httpd的编译安装了,这里为了博文的连贯性,仍然给出安装配置过程。

1、  准备好编译安装环境,安装pcre-devel包,这个是依赖包,可以直接使用epel的yum源进行安装。

# yum -y install pcre-devel

2、安装apr包

#解压包
[root@station145 ~]# tar xf apr-1.5.0.tar.bz2
切换到包目录
[root@station145 ~]# cd apr-1.5.0
配置环境,指定安装路径
[root@station145 apr-1.5.0]# ./configure --prefix=/usr/local/apr
#编译安装
[root@station145 apr-1.5.0]# make && make install

3、安装apr-util包


#解压包
[root@station145 ~]# tar xf apr-util-1.5.3.tar.bz2
#切换工作目录
[root@station145 ~]# cd apr-util-1.5.3
#配置环境,指定安装目录,指定apr目录
[root@station145 apr-util-1.5.3]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
#编译安装
[root@station145 apr-util-1.5.3]# make && make install

4、解压安装httpd2.4


#解压包
[root@station145 ~]# tar xf httpd-2.4.9.tar.bz2
#切换工作目录
[root@station145 ~]# cd httpd-2.4.9
#配置工作环境,设置各种配置,生成makefile文件
[root@station145 httpd-2.4.9]# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --enable-modules=most --enable-mpms-shared=all --with-mpm=event
#编译安装
[root@station145 httpd-2.4.9]# make && make install

这里要重点解释下配置环境中的各参数的意义


--prefix=/usr/local/apache指定程序安装路径
--sysconfdir=/etc/httpd24指定配置文件路径
-enable-so使用动态共享库
--enable-ssl使用ssl功能
--enable-cgi使用cgi功能
--enable-rewrite使用url重写功能
--with-zlib 使用zlib压缩库
--with-pcre
--with-apr=/usr/local/apr指定apr安装路径
--with-apr-util=/usr/local/apr-util/指定apr-util安装路径
--enable-modules=most启动使用大部分的模块,也可以使用all值
--enable-mpms-shared=all启动mpm功能
--with-mpm=event指定默认启动的mpm模型


5、提供服务脚本

我们可以每次开机后都手动去启动httpd服务,这个很明显不符合我们的正常需求,因此我们需要给httpd2.4提供服务脚本(服务脚本是什么等概念这里不再具体讲解),并且加到系统自动启动服务中。

我们可以自己手工编写脚本,也可以使用httpd2.2(centos系统自自带的httpd服务)的服务脚本,稍加修改,就可以为httd24服务了。

这里我借用了httd2.2的服务脚本,进行简单修改。为了区别原有的服务脚本httpd,这里复制httpd为httpd24 注意:服务脚本存放在/etc/init.d目录下,必须要可执行权限


#复制旧的脚本,新的脚本为httpd24
[root@station145 ~]# cp /etc/init.d/httpd /etc/init.d/httpd24
[root@station145 ~]# vim /etc/init.d/httpd24

修改其中的部分内容,主要是相关路径


#httpd24的安装路径为/usr/local/apache,且没有sbin,只有bin因此修改下面的路径为当前路径
apachectl=/usr/local/apache/bin/apachectl
httpd=${HTTPD-/usr/local/apache/bin/httpd}
prog=httpd
#设定pid文件路径
pidfile=${PIDFILE-/var/run/httpd24.pid}
#设定所文件路径
lockfile=${LOCKFILE-/var/lock/subsys/httpd24}

添加在系统服务


#添加至系统服务
[root@station145 ~]# chkconfig --add httpd24
#查看是否添加成功
[root@station145 ~]# chkconfig --list httpd24
httpd24         0:off   1:off   2:off   3:off   4:off   5:off   6:off
#开机自动启动
[root@station145 ~]# chkconfig  httpd24 on

6、修改配置文件

主要是添加一条PidFile的文件路径。这里系统读取PidFile的顺序是配置文件、服务脚本,如果配置文件没有,再去×××脚本。


#修改配置文件
[root@station145 ~]# vim /etc/httpd24/httpd.conf
#添加一行
PidFile "/var/run/httpd24.pid"

7、导出二进制命令

需要将httpd24的命令导入到PATH环境变量中,否则每次都需要写完整路径。在/etc/profile.d下创建新的配置文件httpd24.sh


#创建新的配置文件
[root@station145 ~]# vim /etc/profile.d/httpd24.sh
#导出命令
export PATH=/usr/local/apache/bin:$PATH
重读配置文件
[root@station145 ~]# . /etc/profile.d/httpd24.sh
查看是否成功
[root@station145 ~]# export $PATH

8、导出头文件

可能会有其他程序调用httd24的头文件,因此将其导入到系统中是至关重要的。我们使用软连接的方式添加到系统中。


[root@station145 ~]# ln -sv /usr/local/apache/include/ /usr/include/httpd
`/usr/include/httpd' -> `/usr/local/apache/include/'

9、导出man手册

man手册存放在httpd24的安装目录中,要想查看到需要在配置文件中添加查找路径


#配置man的配置文件
[root@station145 ~]# vim /etc/man.config
#添加路径
MANPATH /usr/local/apache/man

10、测试是否成功

启动httpd24服务,service httpd24 start

在浏览器中输入http://172.16.37.4  可以成功看到

It works!

说明安装配置成功,如果没有出现,说明还有些问题,可以结合/usr/local/apache/logs里的错误日志来排查。

同理,将172.16.37.7也配置成web前端服务器。

三、mysql的安装

切换到172.16.37.2主机

由于mysql的编译安装比较麻烦,此出采用mysql的二进制安装包进行安装,要注意,一定要对应好安装包与系统的版本。

1、获取安装包,解压


#解压
[root@station75 ~]# tar xf mysql-5.5.33-linux2.6-x86_64.tar.gz

2、准备程序路径

我们将加压好的程序包(由于是二进制包,这里直接拷贝过去即可)


#拷贝到程序目录下
[root@station75 ~]# cp -r mysql-5.5.33-linux2.6-x86_64 /usr/local/

后期我们可能会到mysql进行升级,这样,其他引用这个安装路径的配置文件都需要修改,因此我们创建一个软件连接,一旦源程序包发生改变,我们只需重新生成链接即可。


#注意,此是所在的目录是/usr/local/
[root@station75 local]# ln -sv mysql-5.5.33-linux2.6-x86_64/ mysql
`mysql' -> `mysql-5.5.33-linux2.6-x86_64/'
#将全部文件属主属组改为mysql
[root@station75 mysql]# chown mysql:mysql *


3、准备data目录

切换到mysql目录中,可以看到有目录data,这个目录是存放数据库数据的目录,后期数据量多的情况下,会占用大量的磁盘空间,并且对安全性、可扩展性要求也很高。因此,我们新    建分区,做成逻辑卷,开机自动挂载之某目录作为mysql的data目录,此处,我在根目录下创建目录/data,将做好的逻辑卷挂载至此目录上,在其下创建子目录data作为数据库的存放目录。(创建逻辑卷的过程将会占据大量篇幅,这里不做具体演示)

4、创建新的用户组和用户

mysql数据库由于多数情况下对安全行要求等较高,我们为它新建用户mysql,及用户组msyql,让其运行在较为安全的上下文中。


#添加组
[root@station75 ~]# groupadd -r mysql
#添加系统用户
[root@station75 data]# [root@station75 data]# useradd -g mysql -r -s /sbin/nologin  -M -d /data/data/ mysql
#修改属主属组
[root@station75 data]# chown -R mysql:mysql /data/data/

5、初始化数据库

初始化数据库,进行建立系统库、系统用户等一系列操作。


#这里要注意的是不要切换到scripts目录中去,因为这里要调用bin下面的一个命令来执行这个脚本,如果切换到scriptes目录下,就找到不这个命令了
[root@station75 mysql]# scripts/mysql_install_db  --datadir=/data/data/ --user=mysql

查看/data目录下文件

mysql  performance_schema  test 这些都是系统初始化后生成的文件。

6、提供服务脚本

在二进制包中开发人员已经提供了服务脚本,直接复制使用即可。若是编译安装,则不会有该服务脚本。


#安装包中提供的服务脚本路径为/usr/local/mysql/support-files/mysql.server
[root@station75 ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
#将其添加到系统服务
[root@station75 ~]# chkconfig --add mysqld
#检查系统服务
[root@station75 ~]# chkconfig --list mysqld
mysqld          0:off   1:off   2:on    3:on    4:on    5:on    6:off

7、提供配置文件

同样,安装包体贴的为我们提供了配置文件,此处复制配置文件至/etc下,修改数据存放路径即可。


#安装包给我们提供了多个配置文件,此处使用my-large.cnf
[root@station75 ~]# cp /usr/local/mysql/support-files/my-large.cnf /etc/my.cnf
cp: overwrite `/etc/my.cnf'? y
由于系统默认自带有mysql数据库,因此会有旧的配置文件,这里覆盖即可。
#修改配置文件,找到thread_concurrency,将其修改为cpu核心数X2的数字
thread_concurrency = 4
#添加新行,指定mysql数据文件的存放位置
datadir = /data/data

8、测试是否安装成功


[root@station75 ~]# /usr/local/mysql/bin/mysql
#这里可以导出二进制命令,就不用写全部的路径了

如果能进入mysql的交互式界面,说明配置成功

Linux入门之web服务(五)----LAMP编译安装详解,过把瘾_fastcig nfs  高可用_02

9、导出二进制程序

同httpd


#新建文件
[root@station75 ~]# vim /etc/profile.d/mysql.sh
export PATH=/usr/local/mysql/bin:$PATH
#重新读取配置文件
[root@station75 ~]# . /etc/profile.d/mysql.sh

10、导出头文件

同httpd操作


[root@station75 ~]# ln -sv /usr/local/mysql/include/ /usr/include/mysql
`/usr/include/mysql' -> `/usr/local/mysql/include/'

11、导出库文件

导出库文件,以方便其他程序调用


#新建文件
[root@station75 ~]# vim /etc/ld.so.conf.d/mysql.conf
编辑内容如下
/usr/loca/mysql/lib
#重新加载库文件(有缓存)
[root@station75 ~]# ldconfig

11、导出man手册

同httpd


[root@station75 ~]# vim /etc/man.config
MANPATH /usr/local/mysql/man

12、后续操作

在配置完成后,还有一些操作需要,主要有删除系统中的匿名用户、本地用户,并且给用户加上密码,以保证安全。


进入mysql交互模式
mysql>  use mysql
mysql> drop user ''@'localhost';
删除用户,这里不再一一操作。

为了让后期的php连接数据,这里我们创建一个php的帐号,赋权限到系统自带的test数据库上


mysql> grant all privileges on test to 'php'@'172.16.37.3' identified by '1';
#授权给172.16.37.3主机上,用户php,密码1

四、php编译安装

切换到172.16.37.3主机

php安装时我们采用fpm而不是编译成apache模块的方式

1、准备安装环境

 需要安装包组X Software Development


[root@station75 ~]# yum groupinstall -y  "X Software Development"
#有的系统已经事先安装好了
bzip2-devel libmcrypt-devel,libxml2-deve这两个包也需要安装

2、解压源码包,监测环境,生成makefile文件


[root@localhost ~]# tar xf php-5.4.26.tar.bz2
[root@localhost ~]# cd php-5.4.26
[root@localhost php-5.4.26]# ./configure --prefix=/usr/local/php --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml  --enable-sockets --enable-fpm --with-mcrypt  --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2
[root@localhost ~]# make && make install

这里详细解析下有关参数


--prefix=/usr/local/php指定程序安装目录

--with-mysql=mysqlnd

--with-pdo-mysql=mysqlnd

--with-mysqli=mysqlnd

数据库与php不在一个服务器上,指定此种方式,安装数据库连接驱动

--with-jpeg-dir

--with-png-dir

使用图片目录
--with-zlib使用压缩库
--enable-fpm使用fpm服务
--with-config-file-path=/etc配置文件目录
--with-config-file-scan-dir=/etc/php.d扩展配置文件扫描目录
--with-bz2

使用bz2压缩方式

--enable-xml使用xml

3、提供配置文件

php源码包也为我们提供了现成的配置文件(分为开发环境和生产环境),复制配置文件到/etc下

[root@localhost ~]# cp  /root/php-5.4.26/php.ini-production /etc/php.ini

4、配置fpm

这里fpm我们完全可以看作是一个服务

  4.1提供服务脚本

同样系统也为我们提供了,复制到/etc/init.d即可使用。服务脚本保证fpm服务能在系统中运行。


[root@localhost ~]# cp /root/php-5.4.26/sapi/fpm/init.d.php-fpm  /etc/init.d/php-fpm

添加执行权限


[root@localhost init.d]# chmod +x php-fpm

添加在系统服务,并开机自动启动


[root@localhost init.d]# chkconfig --add php-fpm
[root@localhost init.d]# chkconfig php-fpm on

 4.2 提供配置文件

配置文件建立其与httpd服务的联系

php的安装目录里也有配置文件提供,将其备份修改名字即可进行配置


[root@localhost init.d]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

修改配置文件


#修改参数为自己需要的数字,此处并无定值
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 8
#添加pid文件路径,要注意的是这里不是系统提供的pid文件目录,而是php的程序目录,这里是修改原来的内容,而不是手工添加。
pid = /usr/local/php/var/run/php-fpm.pid
修改监听主机为本机
listen = 172.16.37.3:9000


 4.3 启动php-fpm

监测进程、端口情况


[root@localhost run]# service php-fpm start
[root@localhost run]# ps aux | grep php-fpm
root     51165  0.0  0.7  46924  3480 ?        Ss   04:16   0:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)                                                                
nobody   51166  0.0  0.5  46924  2908 ?        S    04:16   0:00 php-fpm: pool www                                                                                                        
nobody   51167  0.0  0.5  46924  2908 ?        S    04:16   0:00 php-fpm: pool www                                                                                                        
nobody   51168  0.0  0.5  46924  2908 ?        S    04:16   0:00 php-fpm: pool www                                                                                                        
nobody   51169  0.0  0.5  46924  2908 ?        S    04:16   0:00 php-fpm: pool www                                                                                                        
nobody   51170  0.0  0.5  46924  2908 ?        S    04:16   0:00 php-fpm: pool www                                                                                                        
root     51211  0.0  0.1 103252   828 pts/1    S+   04:26   0:00 grep php-fpm
[root@localhost run]# ss -tunl | grep 9000
tcp    LISTEN     0      128          172.16.37.3:9000                  *:*

可以看到服务已经启动,端口监听正常

5、配置xcache加速php

  5.1 获取源码,生成configure脚本

[root@simon ~]# tar xf xcache-3.0.3.tar.bz2
[root@simon ~]# cd xcache-3.0.3
#xcache原先是不存在的,需要执行php的phpize来生成
[root@simon xcache-3.0.3]# /usr/local/php/bin/phpize
Configuring for:
PHP Api Version:         20100412
Zend Module Api No:      20100525
Zend Extension Api No:   220100525

  5.2 编译安装

#检查编译环境,开启xcache功能,制定php-config所在路径
[root@localhost xcache-3.0.3]# ./configure --enable-xcache -with-php-config=/usr/local/php/bin/php-config
#编译安装
[root@localhost xcache-3.0.3]# make && make install

 在最后会有提示信息,生成的模块文件的路径

Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/

  5.3 配置文件

   xcache的配置文件需要php程序来读取,然后cgi进程启动后才会调用相关模块。因此,xcache配置文件其实是在php配置文件中添加内容。这里为了清晰,建立php.d作为php的扩展配置文件目录,拷贝源码包中已经存在的配置文件xcache.ini 然后将生成的xcache模块的绝对路径添加进去,这样就建立起了xcache与php的关联。
 

[root@localhost xcache-3.0.3]# mkdir /etc/php.d
[root@localhost xcache-3.0.3]# cp xcache.ini /etc/php.d/
[root@localhost xcache-3.0.3]# vim /etc/php.d/xcache.ini
#修改行extension内容为
extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/xcache.so

 配置完成。

五、nfs配置

我们希望两台httpd服务器能共享磁盘空间,这里采用nfs,在172.16.37.3主机上配置,httpd服务上挂载

1、给nfs单独建立一个磁盘分区,挂载至目录/www上,这里不再给出具体步骤

2、编辑导出文件


[root@localhost ~]# vim /etc/exports
/www    172.16.37.0/24(rw,root_squash)

3、启动服务


[root@localhost www]# service nfs start

4、客户端挂载

分别编辑172.16.37.4和172.16.37.7主机的/etc/fstable文件,添加


#要注意,这里/www要实现在文件系统中创建好
172.16.37.3:/www        /www                    nfs     defaults,_netdev 0 0

然后mount -a,即可到/www目录中查看

六、联机调试

这里我们仅仅是在php上做好了配置,还需要在httpd服务器上配置。这里为了降低难度,用主机做测试,没有使用虚拟主机。实际上我们应该使用虚拟主机进行测试。

1、修改主机目录


DocumentRoot "/www"
<Directory "/www">

2、修改选项


Options none 删除原来值,改为none

3、加载模块


LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

4、取消代理连接php服务器


ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://172.16.37.3:9000/www/$1

5、添加页面类型识别


#添加
AddType application/x-httpd-php  .php
AddType application/x-httpd-php-source  .phps

6、设置主页识别

DirectoryIndex  index.php  index.html

同样的,我们在两台httpd主机上都进行如上设置

然后,我们在/www上放上一个测试,测试是否成功。

测试

[root@localhost www]# vim index.php
#内容如下
<?php
        $link = mysql_connect('172.16.37.2','php','1');
        if ($link)
                echo "linked";
        else
                echo "failed";
        mysql_close();
        phpinfo();
?>

该测试页,可以看到php的详细信息,并且可以测试是否与数据连接成功。最后得到页面

Linux入门之web服务(五)----LAMP编译安装详解,过把瘾_fastcig nfs  高可用_03

Linux入门之web服务(五)----LAMP编译安装详解,过把瘾_fastcig nfs  高可用_04

大功告成,其实,这个时候可以使用域名进行解析。我才用了比较省事的方法,修改windows的host文件,添加上了一个域名,指向两个地址,

172.16.37.4 www.a.com

172.16.37.7 www.a.com

这个时候,随意停止到一个服务器的web服务,都可以正常访问。

七、总结

   这个博文花了半天的时间完成,但是仍然没有完成,计划使用的xcache没有做。在接下来的更新版本中将会添加上。欢迎批评指正



Version 1.0 2013-3-26 初始版本

Version 1.1 2013-3-27 添加xcache加速