LAMP平台是常用的动态网站平台,现在很多情况下,因为业务请求的原因需要把Apache服务、Mysql(Mariadb)服务和PHP服务分别使用各自的Linux服务器承载,下面我就总结一下分离式LAMP平台构建过程。(我这边使用的源码编译安装)
一、平台构建准备:
1、Centos 6.6 final系统三个(基础安装,装有包组Development Tools):
192.168.2.3(Apache服务器)
192.168.2.5(PHP服务器)
192.168.2.6(Mariadb服务器)
2、软件版本选择:
Apache:httpd-2.4.9 另包含apr-1.5.0和apr-util-1.5.3
PHP:php-5.4.26
Mariadb:mariadb-5.5.36
另外需要测试平台的软件有数据库管理软件phpMyAdmin-4.0.5-all-languages和中文的博客wordpress-4.2.2-zh_CN
二、分别构建各个服务器:
@安装Apache服务器:
1、安装apr:
#tar -xf apr-1.5.0.tar.bz2
#cd apr-1.5.0
#./configure --prefix=/usr/local/apr
#make && make install
2、安装apr-util:
#tar -xf apr-util-1.5.3.gz.bz2
#cd apr-util-1.5.3
#./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
#make && make install
3、根据httpd-2.4的新特性,在编译的时候,我们也可以指定一些特定的选项实现对应的性能。下面先总结一下新特性,再在编译./configure时使用一些特定的选项。
①MPM支持在运行时装载
②支持event MPM
③异步读写
④在每模块及每目录分别使用不同的日志级别
⑤每请求的配置;<If>,<Elseif>
⑥增强版的表达式分析器
⑦毫秒级的keep alive的timeout
⑧基于FQDN的虚拟主机不再需要NameVirtualHost指令
⑨支持用户使用自定义变量
第一个选项,使得我们可以在编译的时候不再特定编译成某个模式的多道处理模块,使得我们可以把这个系统当前支持的模式都编译出来,根据需要再设置成相应的模式运行apache就可以了。
第二个选项,使得我们的apache的处理模块可以以线程方式运行。
#tar -xf httpd-2.4.9.tar.bz2
#cd httpd-2.4.9
#./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --enable-deflate --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --enable-mpms-shared=all --with-mpm=event --enable-modules=most
#make && make install
在给定参数下检查环境,少什么就装什么。一般是装XXX-devel包就可以了。
和以前那篇博客一样,编译安装就得手动去 添加PATH变量,导出man手册,若需要二次开发就导出头文件,导出库文件,当然服务脚本是必须提供的,最后若是需要就是将服务加入服务列表chkconfig。
这个版本的配置文件有这些:
#/etc/httpd24为编译安装时定义的目录 /etc/httpd24/httpd.conf # 主配置文件
/etc/httpd24/extra/httpd-default.conf # 默认配置文件(keepalive、AccessFileName等设置)
/etc/httpd24/extra/httpd-userdir.conf # 用户目录配置文件
/etc/httpd24/extra/httpd-mpm.conf # MPM配置文件
/etc/httpd24/extra/httpd-ssl.conf # SSL配置文件
/etc/httpd24/extra/httpd-vhosts.conf # 虚拟主机配置文件
/etc/httpd24/extra/httpd-info.conf # server-status页面配置文件
httpd2.4不再支持使用order, allow, deny这些机制,而是统一使用require进行访问控制。
哦,都弄好了那就启动apache服务吧,不过要记得关闭或放行Selinux和iptables哦。
@安装Mariadb服务器:
这个服务器我直接下载的二进制包解压配置就行了。不过为了保证数据的安全和其它操作的方便,准备把数据库的数据存放目录单独设置出来,不使用默认的。
具体命令就不写了,无非就是加个分区,格式化成所需要的文件系统类型,编辑/etc/fstab,挂载到系统某个路径,我这里是/mydata/data。
因为是二进制包解压这样安装的,所以为了服务运行的稳定和系统的安全,最好使用特定的用户来运行。
#groupadd -r mysql #创建一个系统用户组
#useradd -g mysql -r mysql #创建以mysql用户组为基本用户组的系统用户mysql
#id mysql #创建完了使用id命令查看结果
#chown -R mysql.mysql /mydata/data #将数据存放目录的属主和属组修改成我们创建以运行mariadb的用户和其用户组
接着就是解压安装Mariadb了:
#tar -xf mariadb-5.5.36-linux-x86_64.tar.gz -C /usr/local/ # -C指定解压到哪个目录
#cd /usr/local
#ln -sv mariadb-5.5.36-linux-x86_64 mysql #创建软链接方便使用
#chown -R mysql.msyql ./mysql #将程序目录的属主和属组修改成我们创建以运行mariadb的用户和其用户组
接下来就是提供配置文件并初始化数据库了。
#mkdir /etc/mysql #创建数据库配置文件的目录,不直接放/etc下面以方便区分
#cp /usr/local/mysql/support-files/my-large.cnf /etc/mysql/my.cnf
#vim /etc/mysql/my.cnf
修改thread_concurrency后面的数值为CPU数量的2倍
添加datadir = /mydata/data 以指明数据文件存放的位置
初始化数据库#/usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/mydata/data
接着当然也是提供脚本,加入服务列表,添加PATH变量,导出man手册、库文件和头文件,就可以正常启动服务了。
服务脚本是#cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
#chmod +x /etc/rc.d/init.d/mysqld
@安装PHP服务器
同样还是先解决依赖问题,最好先装上bzip2-devel和libmcrypt-devel这两个开发包。
同样的步骤:
#tar -xf php-5.4.26.tar.bz2
#cd 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 --with-openssl
#make && make install
因为是分离式的,而且PHP的版本是5.4的版本,所以不用指定mysql位置,统一使用PHP自己开发的mysqlnd这个驱动来连接远程的Mysql服务器,--with-jpeg和png可以使请求能更快的响应,mbstring可以使用不同类型的字符集,enable-fpm启用Fast-cgi 进程管理器。
同样的提供服务脚本,配置文件,因为LAMP是以PHP-FPM的方式工作的,所以配置文件是要2份的。
#cp /php-5.4.26/php.ini-production /etc/php.ini
PHP-FPM配置文件是:
#cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
PHP-FPM服务脚本
#cp /php-5.4.26/sapi/ftp/init.d.php-fpm /etc/rc.d/init.d/php-fpm
PHP-FPM配置文件修改以下部分:
pid =/usr/local/php/var/run/php-fpm.pid
listen = 172.16.10.110:9000
pm.max_children = 25 #最大子进程数
pm.start_servers = 5 #开机预启动子进程数
pm.min_spare_servers = 2 #最小空闲子进程数
pm.max_spare_servers = 6 #最大空闲子进程数
加入服务列表后,启动服务,
使用#ss -tnl | grep 9000查看是否服务已经正常启动了。
@将httpd、PHP和Mariadb三个服务器连接起来
首先,我们先将三台服务器的iptables和selinux关闭或放行。
然后,修改httpd服务器的相关配置以使其能结合PHP工作:
加载相应的模块,使请求动态内容如PHP页面能反向代理
#vim httpd.conf
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
如果要使用虚拟主机,就得注释掉主配置文件里的
#DocumentRoot "/usr/local/apache/htdocs" #这样来关闭主服务器
同时添加Include /etc/httpd24/extra/httpd-vhost来开启虚拟主机
为了支持PHP,还得在主配置文件里面加入以下内容
找到AddType添加以下内容
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
另外找到Directory
在后面加上 index.php添加网站默认主页。
不管是虚拟主机还是主服务器配置,要连接PHP都得关闭正向代理匹配,启用反向代理所有请求的php页面。
在配置段内是这样实现的:
ProxyRequests Off #关闭正向代理
ProxyPassMatch ^/(.*\.php)$ fcgi://172.16.10.110:9000/web/pma/$1 #代理至php服务器
这些差不多就完成了分离式LAMP平台的构建了。
还有一些小tips:
如每安装完一个服务器,可以先单独测试那个服务器能不能正常使用;如httpd写个测试页访问一下;Mariadb连接到服务器试一下,对了,远程主机连接数据库服务器还得在数据库做相应的用户添加和设置哦;
另分离式的LAMP平台,最好就把网站目录使用共享的文件系统,这样就可以保证httpd服务器和PHP服务器的网站目录内容是一样的了,这里就没有实验哈。