一、LAMP企业架构集群讲解
Linux+Apache+Mysql/MariaDB+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台.(为了提高性能也可以用Nginx代替Apache发布网页)
随着开源潮流的蓬勃发展,开放源代码的LAMP已经与J2EE和.Net商业软件形成三足鼎立之势,并且该软件开发的项目在软件方面的投资成本较低,因此受到整个IT界的关注。
目前LAMP架构是大多数中小企业最青睐的PHP架构选择,也是众多Linux SA喜欢选择的一套架构.
- YUM安装
yum install httpd httpd-devel mysql mysql-server mysql-devel php php-devel php-mysql -y
安装完成后可以直接使用,源码安装的话需要整合apache和php.
二、源码安装整合LAMP
- 检查安装环境卸载已安装的服务如httpd,mysql(利用rpm命令不带依赖关系移除)
[root@mini ~]# rpm -qa|grep httpd
httpd-tools-2.2.15-29.el6.centos.x86_64
httpd-2.2.15-29.el6.centos.x86_64
[root@mini ~]# rpm -e --nodeps httpd-2.2.15-29.el6.centos.x86_64
[root@mini ~]# rpm -e --nodeps httpd-tools-2.2.15-29.el6.centos.x86_64
[root@mini src]# rpm -qa|grep mysql
mysql-libs-5.1.71-1.el6.x86_64
[root@mini ~]# rpm -e --nodeps mysql-libs-5.1.71-1.el6.x86_64
- 切换下载目录下载所用的各种安装包,这里为了测试LAMP环境下载discuz论坛源码包作为测试或者wordpross博客论坛源码
[root@mini ~]# cd /usr/src/ #切换下载目录依次下载discuz论坛源码包,http/mysql/php源码包
[root@mini src]# wget http://download.comsenz.com/DiscuzX/3.4/Discuz_X3.4_SC_UTF8.zip
[root@mini src]# wget http://mirror.bit.edu.cn/apache//httpd/httpd-2.2.34.tar.gz
[root@mini src]# wget http://downloads.mysql.com/archives/mysql-5.1/mysql-5.1.63.tar.gz
[root@mini src]# wget http://mirrors.sohu.com/php/php-5.3.28.tar.bz2
[root@mini src]# wget https://cn.wordpress.org/wordpress-4.9.1-zh_CN.tar.gz
[root@mini src]# ls
debug httpd-2.2.34.tar.gz mysql-5.1.63.tar.gz wordpress-4.9.1-zh_CN.tar.gz
Discuz_X3.4_SC_UTF8.zip kernels php-5.3.28.tar.bz2
- 安装httpd服务
参考资料
源码安装apache参考文章
[root@mini src]# tar -zxvf httpd-2.2.34.tar.gz #解压
[root@mini src]# cd httpd-2.2.34 #切换源码包
[root@mini httpd-2.2.34]# ls
ABOUT_APACHE CHANGES httpd.dsp libhttpd.dep NOTICE server
acinclude.m4 config.layout httpd.mak libhttpd.dsp NWGNUmakefile srclib
Apache.dsw configure httpd.spec libhttpd.mak os support
build configure.in include LICENSE README test
BuildAll.dsp docs INSTALL Makefile.in README.platforms VERSIONING
BuildBin.dsp emacs-style InstallBin.dsp Makefile.win README-win32.txt
buildconf httpd.dep LAYOUT modules ROADMAP
[root@mini httpd-2.2.34]# ./configure --prefix=/usr/local/apache --enable-so --enable-rewrite
#预编译指定安装目录,添加动态扩展模块,rewrite模块
[root@mini httpd-2.2.34]# make #编译
[root@mini httpd-2.2.34]# make install #安装
[root@mini local]# chown -R apache.apache /usr/local/apache/
#更改apache安装目录的所有者和属组
#修改配置文件更改服务使用者,apache用户系统已创建
[root@mini local]# vim /usr/local/apache/conf/httpd.conf
66 User apache
67 Group apache
启动故障排查
安装完成后检查配置文件报错如下
[root@mini ~]# /usr/local/apache/bin/apachectl -t
httpd: apr_sockaddr_info_get() failed for mini
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
Syntax OK
如果不解决直接启动报错如下
[root@mini ~]# /usr/local/apache/bin/apachectl start
httpd: apr_sockaddr_info_get() failed for mini
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
解决方案:在配置文件/usr/local/apache/conf/httpd.conf中添加语句
ServerName localhost:80
-将httpd服务加入系统服务并设置开机自启动
[root@mini ~]# cp /usr/local/apache/bin/apachectl /etc/init.d/httpd
#将apache的启动脚本复制到/etc/rc.d/init.d这个目录下
#直接修改启动脚本在最上面添加如下两行带#的注释语句
[root@mini ~]# vi /etc/init.d/httpd
#chkconfig: 2345 70 60
#description: apache
[root@mini ~]# chkconfig --add httpd
#添加系统服务
[root@mini ~]# chkconfig httpd on
#设置开机自启动
[root@mini local]# /etc/init.d/httpd -t
Syntax OK
#检查配置文件无问题
[root@mini local]# /etc/init.d/httpd start
[root@mini local]# ps -ef|grep httpd
root 24813 1 0 09:53 ? 00:00:00 /usr/local/apache/bin/httpd -k start
apache 24814 24813 0 09:53 ? 00:00:00 /usr/local/apache/bin/httpd -k start
apache 24815 24813 0 09:53 ? 00:00:00 /usr/local/apache/bin/httpd -k start
apache 24816 24813 0 09:53 ? 00:00:00 /usr/local/apache/bin/httpd -k start
apache 24817 24813 0 09:53 ? 00:00:00 /usr/local/apache/bin/httpd -k start
apache 24818 24813 0 09:53 ? 00:00:00 /usr/local/apache/bin/httpd -k start
root 24820 1305 0 09:53 pts/0 00:00:00 grep httpd
#启动httpd服务查看进程正常
- 安装mysql服务
参考资料
mysql源码安装编译参数详解参考
MySQL的常见的三种方式
[root@mini src]# tar zxvf mysql-5.1.63.tar.gz
[root@mini src]# cd mysql-5.1.63
[root@mini mysql-5.1.63]# ls
aclocal.m4 config.guess Docs libmysqld mysql-test server-tools tests
BUILD config.sub extra libmysql_r mysys sql unittest
ChangeLog configure include ltmain.sh netware sql-bench vio
client configure.in install-sh Makefile.am plugin sql-common win
CMakeLists.txt COPYING INSTALL-SOURCE Makefile.in README storage ylwrap
cmd-line-utils dbug INSTALL-WIN-SOURCE man regex strings zlib
config depcomp libmysql missing scripts support-files
[root@mini mysql-5.1.63]# ./configure --prefix=/usr/local/mysql --enable-assembler
#预编译指定安装目录,使用汇编模式提高性能
[root@mini mysql-5.1.63]# make #编译
[root@mini mysql-5.1.63]# make install #安装
故障排除
mysql预编译时报错
报错信息如下(echo $?可查看命令执行结果,返回0正常,其余任何数字都是异常)
checking for tgetent in -lncursesw... no
checking for tgetent in -lncurses... no
checking for tgetent in -lcurses... no
checking for tgetent in -ltermcap... no
checking for tgetent in -ltinfo... no
checking for termcap functions library... configure: error: No curses/termcap library found
[root@mini mysql-5.1.63]# echo $?
1
故障原因:缺少ncurses安装包
解决办法:下载安装相应软件包
[root@mini mysql-5.1.63]# yum install ncurses ncurses-devel -y
将mysql配置为系统服务
[root@mini mysql-5.1.63]# cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf
#拷贝源码包的配置文件到系统配置目录下
[root@mini mysql-5.1.63]# cp /usr/local/mysql/share/mysql/mysql.server /etc/rc.d/init.d/mysqld
#拷贝源码包的服务文件到系统启动目录下
[root@mini mysql-5.1.63]# chkconfig --add mysqld
#将mysql文件加入开机启动项列表
[root@mini mysql-5.1.63]# chkconfig --level 345 mysqld on
#设置各级别开机自启动
[root@mini mysql-5.1.63]# cd /usr/local/mysql/
#切换源码安装目录
[root@mini mysql]# useradd mysql
#创建普通用户mysql
[root@mini mysql]# chown -R mysql.mysql /usr/local/mysql/
#更改mysql目录的所有者及属组
[root@mini bin]# /usr/local/mysql/bin/mysql_install_db --user=mysql
#初始化数据库
[root@mini mysql]# chown -R mysql var
#更改安装目录下var目录的所有者,var目录是初始化以后才创建的
[root@mini mysql]# /usr/local/mysql/bin/mysqld_safe --user=mysql&
#以安全模式后台启动mysql服务
[root@mini mysql]# /usr/local/mysql/bin/mysql
#用安装包下的绝对路径进入数据库
[root@mini mysql]# ln -s /usr/local/mysql/bin/mysql /usr/bin
#创建软链接,系统默认会查找/usr/bin下的命令,这样就能直接通过mysql进入数据库
补充源码停止mysql数据库命令/usr/local/mysql/share/mysql/mysql.server stop
- 安装PHP服务(展示动态网页)
PHP源码编译安装参数参考
[root@mini src]# tar jxf php-5.3.28.tar.bz2
[root@mini src]# cd php-5.3.28
[root@mini php-5.3.28]# ls
acconfig.h INSTALL README.EXTENSIONS scripts
acconfig.h.in install-sh README.EXT_SKEL server-tests-config.php
acinclude.m4 LICENSE README.GIT-RULES server-tests.php
aclocal.m4 ltmain.sh README.input_filter snapshot
build main README.MAILINGLIST_RULES stamp-h.in
buildconf makedist README.namespaces stub.c
buildconf.bat Makefile.frag README.PARAMETER_PARSING_API svnclean.bat
CODING_STANDARDS Makefile.gcov README.PHP4-TO-PHP5-THIN-CHANGES tests
config.guess Makefile.global README.REDIST.BINS TODO
config.sub makerpm README.RELEASE_PROCESS TODO-5.1
configure missing README.SELF-CONTAINED-EXTENSIONS TODO-PHP5
configure.in mkinstalldirs README.STREAMS TSRM
CREDITS netware README.SUBMITTING_PATCH UPGRADING
ext NEWS README.TESTING UPGRADING.INTERNALS
EXTENSIONS pear README.TESTING2 vcsclean
footer php5.spec.in README.UNIX-BUILD-SYSTEM win32
generated_lists php.gif README.WIN32-BUILD-SYSTEM Zend
genfiles php.ini-development run-tests.php
header php.ini-production sapi
[root@mini php-5.3.28]# ./configure --prefix=/usr/local/php5 --with-config-file-path=/usr/local/php5/etc --with-apxs2=/usr/local/apache/bin/apxs --with-mysql=/usr/local/mysql/
#预编译,指定安装目录,指定php.ini位置,整合 apache加载指定模块到 apache,要求 apache 要打开SO模块,指定mysql安装目录,对mysql的支持
[root@mini php-5.3.28]# make
[root@mini php-5.3.28]# make install
故障排查
安装PHP模块预编译时报错信息如下
checking libxml2 install dir... no
checking for xml2-config path...
configure: error: xml2-config not found. Please check your libxml2 installation.
[root@mini php-5.3.28]# echo $?
1
检查是否安装了libxm包
[root@mini php-5.3.28]# rpm -qa|grep libxml2
libxml2-python-2.7.6-14.el6.x86_64
libxml2-2.7.6-14.el6.x86_64
重新安装libxml2和libxml2-devel包
[root@mini php-5.3.28]# yum install libxml2 libxml2-devel -y
安装完之后查找xml2-config文件是否存在
[root@mini php-5.3.28]# find / -name "xml2-config"
/usr/bin/xml2-config
至此问题解决重新对PHP模块进行编译安装
补充:当mysql数据库服务器在其他主机时php编译参数支持mysql扩展
./configure --prefix=/usr/local/php5 --with-config-file-path=/usr/local/php5/etc --with-apxs2=/usr/local/apache/bin/apxs --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd
mysqlnd是php5.3以后版本加入的,5.3以下版本必须还是要编译mysql。
- 修改配置文件整合apache及php
修改httpd.conf配置文件
[root@mini php-5.3.28]# vim /usr/local/apache/conf/httpd.conf
54 LoadModule php5_module modules/libphp5.so
#PHP预编译安装参数 --with-apxs2=/usr/local/apache/bin/apxs,指定http加载模块后生成的配置语句,之前测试实验时参数--with-apxs2输入有误,写成-with-apx2导致整合失败
319 AddType application/x-compress .Z
320 AddType application/x-gzip .gz .tgz
321 AddType application/x-httpd-php .php
#319、320是已存在的,321是新增语句
169 DirectoryIndex index.php index.html
#指定默认访问页面优先级,添加index.php到最前面
创建index.php测试页面
[root@mini php-5.3.28]# vim /usr/local/apache/htdocs/index.php
- 整合完成重启httpd服务,访问页面http://192.168.15.142得到php配置信息页面整合成功
三、配置MySQL主从服务器
按照上述步骤192.16815.142主机已安装整合好LAMP环境,再为其配置从数据库服务器
克隆一台最小化安装的主机后源码安装mysql数据库服务
主从服务器分别登录mysql,设置root用户密码mysql> grant all on *.* to root@'localhost' identified by '123456';
,刷新授权mysql> flush privileges;
修改master配置文件
[root@mini ~]# vim /etc/my.cnf
18 [client]
20 port = 3306
21 socket = /tmp/mysql.sock
22 default-character-set=utf8
#22行为新增修改客户端字符集
27 [mysqld]
50 log-bin=mysql-bin
#50行默认打开bin-log日志
58 server-id = 1
59 character-set-server=utf8
#58行默认,但是slave的id必须改掉不能一样,59行也是新增修改字符集
133 [mysql]
137 default-character-set=utf8
#137行新增修改字符集
修改slave配置文件配置字符集,修改id号
主从服务器分别重启mysqld服务/etc/init.d/mysqld restart
master服务器授权slave同步自己mysql> grant replication slave on *.* to 'tongbu'@'%' identified by '123456';
查看同步点
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000006 | 256 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
slave服务器
#设置同步主服务器
mysql> change master to master_host='192.168.15.143',master_user='tongbu',master_password='123456',master_log_file='mysql-bin.000006',master_log_pos=256;
Query OK, 0 rows affected (0.39 sec)
#开启同步
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
#查看I/O线程、SQL线程已开启
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.15.143 #master的IP地址
Master_User: tongbu #同步使用的用户名(mysql数据库里的用户)
Master_Port: 3306 #使用的端口号
Connect_Retry: 60
Master_Log_File: mysql-bin.000006 #开始同步的bin-log日志
Read_Master_Log_Pos: 256 #开始的同步点
Relay_Log_File: mini-relay-bin.000002
Relay_Log_Pos: 251
Relay_Master_Log_File: mysql-bin.000006
Slave_IO_Running: Yes ####I/O线程开启
Slave_SQL_Running: Yes ####SQL线程开启
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 256
Relay_Log_Space: 405
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
1 row in set (0.00 sec)
至此mysql服务器主从配置完成
四、在已配置好的LAMP环境下搭建discuz论坛
[root@mini data]# cd /usr/src/ #切换下载目录
[root@mini src]# unzip Discuz_X3.4_SC_UTF8.zip #解压论坛源码包
[root@mini src]# mv upload/ /data/ #把内容主目录移动到/data下
[root@mini data]# mv /data/upload/ /data/discuz #重命名目录
[root@mini data]# ln -s /data/discuz/ /usr/local/apache/htdocs/
#创建链接到apache的发布目录
至此可通过http://192.168.15.143/discuz
访问论坛创建向导页面
[root@mini discuz]# cd /usr/local/apache/htdocs/discuz/
#切换网站发布目录
[root@mini discuz]# chmod -R 777 config/ data/ uc_client/ uc_server/
#更改相关目录的权限
[root@mini data]# mysql -uroot -p
Enter password:
#进入mysql数据库
mysql> create database discuz charset=utf8;
Query OK, 1 row affected (0.00 sec)
#创建论坛数据库并指定字符集
mysql> grant all on discuz.* to root@'localhost' identified by "123456";
Query OK, 0 rows affected (0.00 sec)
#授权
进入向导页面根据提示设置管理员密码完成安装
五、优化数据库连接
当LAMP主机master上的数据库出故障时候,可以通过修改discuz源码配置文件将数据库的链接IP指向slave服务器的数据库(slave同样要对master授权访问)来快速的恢复故障.
discuz论坛配置文件位置/usr/local/apache/htdocs/discuz/conf/config_ucenter.php
修改UC_DBHOST
把原本的localhost换成slave_ip或者域名
但以上方法每次都需要改动配置文件比较麻烦,换思路在创建论坛时,数据库的IP地址用域名代替,这样即时有问题只需要改动主机的host文件修改数据库域名对应的IP即可.