本篇博文笔者试图通过自己的亲身实践来向大家讲解中小企业网基于LAMMP架构的实现。本片博文主要设计的知识体系如下,由笔者全部在RHEL6.4环境下进行搭建和实现。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

一、试验环境和软件版本

二、httpd-2.4.6的源码安装

三、如何使用通用二机制包安装mysql

四、编译安装php,实现与apache服务器的分离

五、源码编译memcached

六、源码安装PHP扩展程序memcache

七、安装PHP加速器xcache

八、简单测试网页的编写

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


一、实验环境和软件版本

1.系统环境:4台安装RHEL6.4的服务器,地址和软件安装规划如下

2.软件环境:

  软件            版本             地址规划        
http:       httpd-2.4.6             172.16.21.1
mysql:      mysql-5.5.33            172.16.21.2
memcached:  memcached-1.4.15        172.16.21.3
php:        php-5.4.19              172.16.21.4
memcache:   memcache-2.2.5          172.16.21.4
xcache;    xcache-3.0.3            172.16.21.4

3.拓扑规划:

LAMMP架构详解(源码实现)_第1张图片4.数据访问流程:(根据上述标号进行讲解)

(1)表示客户端请求的页面发送到web server (工作流程参考我上篇博客)

(2)web server查看client请求的页面,如果是静态页面就在本地处理;如果为动态页面交给PHP程序处理,这里我们将web和php应用程序服务分开处理。

(3)当PHP应用程序服务器收到web server发来的动态页面请求消息时,会对其进行处理。如果有数据查询请求时,会根据设置首先查看memcached缓存服务器上的内容。

(4)如果缓存服务器中有相关的数据缓存会直接发给PHP应用程序服务器

(5)如果在memcached缓存服务器中查询不到数据,就会去mysql服务器中查找。

(6)mysql服务器把查找的结果返回服务器。同时在memcached服务器中缓存一份方便下次查询。

(7)再有相关的web server将数据发给客户端请求者。


二、httpd-2.4.6的源码安装

1.依赖以下安装包(版本1.4以上)

apr-1.4.6.tar.bz2
    # tar xf apr-1.4.6.tar.bz2
    # cd apr-1.4.6
    # ./configure --prefix=/usr/local/apr
    # make && make install
apr-util-1.5.2.tar.bz2
    # tar xf apr-util-1.5.2.tar.bz2
    # cd apr-util-1.5.2
    # ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
    # make && make install

2.yum install pcre-devel (开发包)

3.编译安装httpd-2.4.6

# tar xf httpd-2.4.6.tar.bz2
# cd httpd-2.4.6
# ./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
# make && make install

4.SysV脚本提供

# cp /etc/rc.d/init.d/httpd /etc/rc.d/init.d/httpd24
# vim /etc/rc.d/init.d/httpd24    #修改如下行
  apachectl=/usr/local/apache/bin/apachectl
  httpd=${HTTPD-/usr/local/apache/bin/httpd}
  pidfile=${PIDFILE-/usr/local/apache/logs/httpd.pid} #指定pid文件地址
# chkconfig --add httpd24
# chkconfig httpd24 on

5.环境变量设置

# ln -sv /usr/local/apache/include /usr/include/httpd
# vim /etc/man.config
  MANPATH /etc/local/apache/man
# vim /etc/profile.h/apache.sh
  export PATH=/usr/local/apache/bin:$PATH

6.服务器重启service httpd24 restart


三、如何使用通用二机制包安装mysql

1.准备数据存放的文件系统

# fdisk /dev/sda
# pvcreate /dev/sda{5,6}
# vgcreate myvg /dev/sda{5,6}
# lvcreate -L 20G -n mydata myvg
# make2fs -t ext4 -L MYDATA -b 4096 /dev/myvg/mydata
# vim /etc/fstab
  LABEL=MYDATA  ext4  /mydata/data  defaults,noatime 0 0

2.新建用户以安全方式运行进程:

# useradd -r -s /sbin/nologin mysql
# chown -R mysql:mysql /mydata/data

3.安装并初始化mysql-5.5.33

# tar xf mysql-5.5.33-linux2.6-x86_64.tar.gz -C /usr/local
# cd /usr/local/
# ln -sv mysql-5.5.33-linux2.6-x86_64  mysql
# cd mysql
# chown -R mysql:mysql  *
# scripts/mysql_install_db --user=mysql --datadir=/mydata/data
# chown -R root  *

4.为mysql提供主配置文件:

# cd /usr/local/mysql
# cp support-files/my-large.cnf  /etc/my.cnf
# vim /etc/my.cnf
 thread_concurrency = 2#修改此文件中thread_concurrency的值为CPU个数乘以2
 datadir = /mydata/data#添加该行指定mysql数据文件的存放位置

5.为mysql提供sysv服务脚本:

# cd /usr/local/mysql
# cp support-files/mysql.server  /etc/rc.d/init.d/mysqld
# chmod +x /etc/rc.d/init.d/mysqld
# chkconfig --add mysqld
# chkconfig mysqld on

6.环境变量设置

# ln -sv /usr/local/mysql/include  /usr/include/mysql
# vim /etc/man.config
  MANPATH  /usr/local/mysql/man
# vim /etc/profile.d/mysql.sh
  export PATH=/usr/local/mysql/bin:$PATH
# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
# ldconfig

7.启动服务器 service mysqld start

8.MYSQL 授权相关操作参照MYSQL相关用法


四、编译安装php,实现与apache服务器的分离

PHP安装分为两种方式:

1.做为apache服务器的模块;

2.做为单独存在的Fast-cgi应用程序服务器。这里我们先介绍第二种:

1.依赖关系的解决

libxml2-devel
libmcrypt-devel
mhash-devel
bzip2-devel
#使用yum安装:有些包在fedora-epel,可以使用搜狐镜像http://mirrors.sohu.com

2.编译安装php-5.4.13

# tar xf php-5.4.13.tar.bz2
# cd php-5.4.13
# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql \
--with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config \
--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
# make
# make intall

简单说明:(PHP5.3版本以前还需要使用如下选项关联mysql,PHP5.4以后已经默认安装了)

# ./configure --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd

3.提供配置文件和脚本(源码包中)

# cp php.ini-production /etc/php.ini     #配置文件
# cp sapi/fpm/init.d.php-fpm  /etc/rc.d/init.d/php-fpm
#提供php-fpm的Sysv服务脚本
# chmod +x /etc/rc.d/init.d/php-fpm
# chkconfig --add php-fpm
# chkconfig php-fpm on
# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf      #为php-fpm提供配置文件

4.编辑php-fpm的配置文件:

# vim /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 = /usr/local/php/var/run/php-fpm.pid    #设置pid文件

5.启动php-fpm:

#service php-fpm start
# ps aux | grep php-fpm    #简单验证

注意:默认情况下,fpm监听在127.0.0.1的9000端口,也可以使用如下命令验正其是否已经监听在相应的套接字。

# netstat -tnlp | grep php-fpm
tcp  0   0   127.0.0.1:9000    0.0.0.0:*      LISTEN      689/php-fpm

需修改php-fpm的配置文件使其监听在172.16.21.4的9000端口。 (listen选项)

6.修改apache使其支持该模式。

1.编辑apache配置文件启用httpd代理与cgi的相关模块

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
#作为mod_proxy模块的补充

2.配置虚拟主机支持使用fcgi

ProxyRequests Off         #关闭正向代理
ProxyPassMatch ^/(.*\.php)$ fcgi://172.16.21.4:9000/PATH/$1         #PATH指明PHP文件在PHP服务器中存放的地址

简单示例如下:


DocumentRoot "/www/host1"
ServerName www1.xkun.com
ProxyRequests Off#关闭正向代理
ProxyPassMatch ^/(.*\.php)$ fcgi://172.16.21.4:9000/www/host1/$1
#这里设置存放目录同名
#把以.php结尾的文件请求发送到php-fpm进程,php-fpm至少需要知道运行的目录和URI,所以这里直接在fcgi://127.0.0.1:9000后指明了这两个参数,其它的参数的传递已经被mod_proxy_fcgi.so进行了封装,不需要手动指定。

Options none
AllowOverride none
Require all granted

3.编辑apache配置文件httpd.conf,让apache能识别php格式的页面,并支持php格式的主页

# vim /etc/httpd/httpd.conf
  AddType application/x-httpd-php  .php
  AddType application/x-httpd-php-source  .phps
  DirectoryIndex  index.php  index.html

补充说明:Apache httpd 2.4以前的版本中,要么把PHP作为Apache的模块运行,要么添加一个第三方模块支持PHP-FPM实现。


五、源码编译memcached

1.libevent的安装

# tar xf libevent-2.0.21-stable.tar.gz
# cd libevent-2.0.21
# ./configure --prefix=/usr/local/libevent
# make && make install
# echo "/usr/local/libevent/lib" > /etc/ld.so.conf.d/libevent.conf
# ldconfig  -v | grep libevent

2.memcached的安装

# tar xf memcached-1.4.15.tar.gz
# cd memcached-1.4.15
# ./configure --prefix=/usr/local/memcached \
--with-libevent=/usr/local/libevent
# make && make install
  Sysv启动脚本见附录一
# chmod +x /etc/rc.d/init.d/memcached
# chkconfig --add memcached
# service memcached start

3.使用telnet进行简单的测试

telnet 172.16.21.3 11211
add mykey 0 100 12
Hello World!
STORED
get mykey
Hello World!
END
quit
#默认监听在本机所有的地址,如果不是可以用 -l 进行监听地址指定

到此,完成memcached的简单配置。详细原理可以参考高俊峰老师的《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》第三章


六、源码安装PHP扩展程序memcache

1.memcache简单安装

# tar xf memcache-2.2.5.tgz
# cd memcache-2.2.5
# /usr/local/php/bin/phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config --enable-memcache
# make && make install

2.安装完成之后显示如下:

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

3.编辑进配置文件

# mkdir /etc/php.d/
# vim /etc/php.d/memcached.ini
  extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/memcache.so
# service php-fpm restart


七、安装PHP加速器xcache

1.安装xcache

# tar xf xcache-3.0.3.tar.gz
# cd xcache-3.0.3
# /usr/local/php/bin/phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config  --enable-xcache
# make && make install

2.安装结束时,会出现类似如下行:

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

3.编辑php.ini,整合php和xcache:

# cp xcache.ini /etc/php.d#说明:xcache.ini文件在xcache的源码目录中。
# vim /etc/php.d/memcached.ini     # 默认上述文件中已经加载了该模块,可以进行适当的修改
extension = /usr/local/php/lib/php/extensions/no-debug-zts-20100525/xcache.so


八、简单测试网页的编

以下测试网页是通过php程序实现的,能够简单的完成各个模块的连通性测试:

//测试与memcached缓存服务器的连通性
connect("172.16.21.3", 11211)  or die("Could not connect");
$version = $mem->getVersion();
echo "Server's version: ".$version."
\n"; $mem->set('hellokey', 'Hello World', 0, 600) or die("Failed to save data at the memcached server"); echo "Store data in the cache (data will expire in 600 seconds)
\n"; $get_result = $mem->get('hellokey'); echo "$get_result is from memcached server."; ?> //测试PHP与mysql的连通性 //测试PHP页面信息


以上就是笔者最近基于LAMMP企业网的架构的实现。其中apache的配置和解释不够详细,大家可以参考我的上一篇博客。其余的配置由笔者完全实现。博文中对相关程序的原理解释不够详细,如有疑问欢迎探讨,错的的地方也欢迎大家指出。笔者将不遗余力的更新相关linux的技术博客,欢迎大家关注。

QQ:572807025 邮箱:[email protected]