安装LAMP服务器,并利用discuz作测试php
nfs + discuz 192.168.108.158html
php + DNS 192.168.108.160前端
apache 192.168.108.131 -->web1mysql
apache 192.168.108.132 -->web2linux
mariadb 192.168.108.133git
实验目标:web
1,两台前端apache和php都挂载nfs文件系统中的php程序。正则表达式
2,mysql 为单独一台服务器,为php页面程序提供数据库存储sql
3,静态页面文件都放在nfs服务器上shell
4,须要dns轮循为两台前端服务器分配访问请求
缺点: 压力都在文件存储服务器上
优势:不用考虑两台web服务器静态页面一致性的问题。
实验步骤:
一、nfs : 在/etc/exprots 配置文件中写明,容许两台apache和php服务器访问本机的nfs服务;
二、php:编译安装以fpm方式启动进程,进程监听本机的通讯ip。根据实现状况调整进程数量,使用的软件级版本;
三、dns:添加DNS域名解析服务器,定义正向和反向区域。
四、apache: 两台web服务器,挂载nfs。编译安装apache,添加支持fcgi协议的模块,把php类型的请求都代理到php服务器,站点根目录为挂载的文件。根据实际状况调整进程启动数量;
五、mariadb:须要受权一个用户从php服务器访问mysql中的一个数据库,此库给discuz使用;
第一步:在IP为192.168.108.158的主机上安装NFS服务(nfs和rpc详细信息请参考https://www.cnblogs.com/hanshanxiaoheshang/p/9236951.html)
#rpcinfo -p //查看启动状态
#rpm -ql nfs-utils | less //查看安装包
#yum imstall nfs-utils //安装nfs软件
#ss -tnl 或者 #rpcinfo -p //查看是否有2049端口
#mkdir /shared //建立共享的目录
# vim /etc/exports //文件中的项的格式至关简单,要共享一个文件系统,只须要编辑/etc/exports并使用下面的格式给出这个文件系统(和选项便可);
/webdata 192.168.160(rw,no_root_squash) 192.168.108.131(rw,no_root_squash) 19 2.168.108.132(rw,no_root_squash)
# exportfs -ar //重启处处全部的文件系统
# showmount -e 192.168.108.158 //查看共享的文件
第二步:定义DNS域名服务器(可参考https://www.cnblogs.com/hanshanxiaoheshang/p/9249877.html)(参考:http://blog.51cto.com/9164364/1541250)
一、先配置成缓存服务器
#yum install bind 安装bind
#yum list bind*
#vim /etc/named.conf //能够修改监听的地址,若是把listen-on这一行用//注释掉,和当前效果同样,监听全部地址
#vim /etc/named.conf
options {
11 listen-on port 53 { 127.0.0.1; };
12 listen-on-v6 port 53 { ::1; };
13 directory "/var/named"; //定义工做目录,即区域解析库文件
14 dump-file "/var/named/data/cache_dump.db";
15 statistics-file "/var/named/data/named_stats.txt";
16 memstatistics-file "/var/named/data/named_mem_stats.txt";
17 allow-query { localhost; }; 这里能够注释掉或者把localhost改成any,容许全部主机查询
18 recursion yes; //这里表示本地主机支持作递归查询,若是本地主机不支持,就改成no
19
20 // dnssec-enable yes;
21 // dnssec-validation yes;
22
23 /* Path to ISC DLV key */
24 // bindkeys-file "/etc/named.iscdlv.key";
25
26 // managed-keys-directory "/var/named/dynamic"; 20-26行须要注释掉
27 };
#service named start
# ss -tunlp | grep :53 //查看监听端口
# named-checkconf //修改主配置后,检查配置文件语法错误
二、添加正向和反向解析区域
(1)添加正向解析区域
#vim /etc/named.rfc1912.zones
zone "forum.com" IN {
type master; //区域类型:主服务器
file "forum.com.zone"; //区域解析库相对路径,相对与/var/named目录
};
(2)添加反向解析区域
#vim /etc/named.rfc1912.zones
zone "108.168.192.in-addr.arpa" IN {
type master;
file "192.168.108.zone";
};
#named-checkconf //检查配置文件语法错误
三、添加区域解析库文件
(1) 定义正向区域解析库文件
#cd /var/named
#vim forum.com.zone
#named-checkzone "magedu.com" /var/named/magedu.com.zone //利用named-checkzone命令区域和区域库文件是否有错误
(2) 添加反向区域解析文件
#vim /var/named/192.168.108.zone
#named-checkzone 108.168.192.in-addr.arpa 192.168.108.zone //
四、属主属组问题
#ps aux | grep named //查看named进行是谁的身份执行的
#ls -l /etc/named.conf //查看named的主配值文件的属住属组
#ls -l /var/named //应该让属主为root,属组为named
# chmod 640 forum.com.zone
# chmod 640 192.168.108.zone
# chown :named forum.com.zone
# chown :named 192.168.108.zone
# service named restart
五、测试定义的DNS解析
# host -t A bbs.forum.com 192.168.108.160 //使用host工具进行测试,连续两次,实现轮询
# dig -t A bbs.forum.com @192.168.108.160 //使用dig命令测试轮询效果
以上此时能够达到预期。
第三步:在主机IP:192.168.108.160上安装编译安装php-5.4.26
一、解决依赖关系:
#yum -y groupinstall "Desktop Platform Development"
# yum -y install bzip2-devel libmcrypt-devel libxml2-devel
请参考:https://i.cnblogs.com/EditPosts.aspx?postid=9221072&update=1
二、安装php-5.4.26
# tar xf php-5.4.26.tar.bz2 解压php压缩包
# cd php-5.4.26
#./configure --prefix=/usr/local/php --with-mysql --with-mysqli --with-openssl --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir --enable-xml --enable-sockets --enable-fpm --with-bz2 --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-mcrypt //编译安装
//编译成功提示
#make && make install
三、安装完成后,须要为php提供配置文件和 Sysv 脚本文件。这些文件的模板在php解压后的源代码包下。
php-5.4.26]# cp php.ini-production /etc/php.ini //提供主配置文件,位于源代码目录中。
php-5.4.26]# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php //提供服务控制脚本到/etc/rc.d/init.d目录中
php-5.4.26]# ls -ld /etc/rc.d/init.d/php //这里是没有执行权限的
php-5.4.26]# chmod u+x /etc/rc.d/init.d/php
php-5.4.26]# chkconfig --add php //设置开机启动,把php启动脚本添加到/etc/rc.d/init.d/目录下,可在此目录下找到php启动脚本
php-5.4.26]# chkconfig --list php
php-5.4.26]# chkconfig php on //设置开机启动php
php-5.4.26]# cp /usr/local/php/etc/php-fpm.conf.default /usr/lcocal/php/etc/php-fpm.conf //提供php的fpm工做模式下的配置文件。
php-5.4.26]# vim /usr/local/php/etc/php-fpm.conf //修改此配置文件
listen = 192.168.108.160:9000 //修改php监听的本主机的ip地址的9000端口
pm.max_children = 20 //容许最大请求的并发数,由httpd请求的。
pm.start_servers = 5 //服务启动后开启多少个进程
pm.min_spare_servers = 2 //最少空闲多少个进程
pm.max_spare_servers = 10 //最多空闲多少个进程
pid = /usr/local/php/var/run/php-fpm.pid //指定php的PID文件所在位置。这条要写在[global]下面第一行。
至此php服务器已经配置完成
# service php start //启动php,
#ss -tnl //监听在192.168.108.160的9000端口
四、建立和挂载共享
#mkdir /shared
# mount -t nfs 192.168.108.158:/shared/ /shared/
# echo "mount -t 192.168.108.158:/shared /shared" >>/etc/rc.d/rc.local //系统启动后自动执行挂载脚本
# ls -ld /shared/ //这里/shared的目录属主是root
#chown -R nobody /shared //修改webdata目录的全部者为nobody,nobody是php进程运行的用户。
第四步:配置apache,
首先在192.168.108.131上配置(另同)
(重要参考文献http://httpd.apache.org/docs/current/mod/core.html#servername,
https://stackoverflow.com/questions/5856205/could-not-reliably-determine-the-servers-fully-qualified-domain-name/5856234)
一、建立共享目录
#mkdir /shared //尽可能和nfs服务器上的目录保持一致
# mount -t nfs 192.168.108.158:/shared/ /shared/ //客户端挂载NFS文件系统
# echo "mount -t 192.168.108.158:/shared /shared" >>/etc/rc.d/rc.local
请务必关闭你的iptables和SELinux
二、在配置apache以前,能够先查看iptables和selinux是否启动,若是启动能够先关闭
#service iptables status //查看iptables运行状态
#genenforce //查看selinux的运行状态
#setenforce 0 //若是开启则能够关闭,此命令只能暂时关闭,系统重启后失效
三、配置安装环境
#yum groupinstall "Development Tools" "Server Platform Development" -y
httpd程序依赖于apr和apr-util,
注:APR(Apache portable Run-time libraries,Apache可移植运行库)的目的如其名称同样,主要为上层的应用程序提供一个能够跨越多操做系统平台使用的底层支持接口库。
# rpm -qa | grep apr //能够先查看系统是否安装了apr,可是这里显示的是安装了1.3.9的版本,可是httpd-2.4依赖1.4以上版本的apr。
本系统已经准备好3个软件包:apr-1.5.0.tar.bz2 apr-util-1.5.3.tar.bz2 httpd-2.4.6.tar.bz2 一次进行安装
四、安装apr-util
# tar xf apr-1.5.0.tar.bz2
# cd apr-1.5.0
#./configure --prefix=/usr/local/apr
#make && make install
#echo $? //查看是否安装成功,成功则为0
五、安装apr-util
# tar xf apr-util-1.5.3.tar.bz2
# cd apr-util-1.5.3
# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
#make && make install
六、安装apache
#yum install pcre-devel -y //解决依赖包
若是此功能没法解决问题,则须要下载pcre软件包进行编译安装,下载网址:https://ftp.pcre.org/pub/pcre/
#tar xf pcre-8.42.tar.gz
#./configure //本机操做时指定了安装目录,httpd安装时就找不到,--prefix=/usr/local/pcre
#make && make install
# 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-mpms-shared=all --with-mpm=event --enable-modules=all
--prefix=/usr/local/apache //指明安装路径,未来想卸载时,能够直接把目录删掉
--sysconf=/etc/httpd24 //配置文件,系统rpm包自动安装的在/etc/httpd/目录下,为了不冲突
--enable-so //支持动态模块加载机制
--enable-rewrite //支持URL重写机制
--with-zlib //支持compress传输值,是一个压缩库
--with-pcre //pcre是perl扩展的正则表达式,通常利用URL重写时都会用到pcre,此处须要先安装pcre-devel #yum install prcre-devel -y
--with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ // 此处指明http安装依赖到的apr和apr-util,这里要指明apr安装的路径
--enable-modules=most //支持大多数经常使用的模块
--enable-mpms-shared=all //把全部支持mpm机制共享模块都编译进来,
--with-mpm=prefork //默认使用prefork
#make && make install -j 3 //因为安装apache工做量大,能够开3个线程
七、配置apache的环境变量
#vim /etc/profile.d/httpd.sh //修改PATH环境变量,让shell能够搜索到apache的命令
export PATH=/usr/local/apache/bin:$PATH
或者
# echo "export PATH=/usr/local/apach/bin:$PATH" >> /etc/profile.d/httpd.sh
# source /etc/profile.d/httpd.sh //重读环境变量,让刚设置的PATH环境变量在当前shell进程中生效
#echo $PATH //查看是否生效
八、测试apache
# apachectl start //此时能够启动apache,
可能会出现的错误:
#vim /etc/httpd24/httpd.conf
ServerName ....:80 //此行前面的#去掉
#ss -tnl //查看80端口是否启动
解决方案参考:https://www.cnblogs.com/Anker/p/3355039.html
解决方案参考:https://blog.csdn.net/crazw/article/details/8266751
九、为编译安装的httpd配置服务脚本
#cd /etc/rc.d/init.d/
#cp httpd httpd24 //把系统自带的httpd服务脚本复制一份进行修改,看成编译安装的httpd24的服务脚本
#vim httpd24
apachectl=/usr/local/apache/bin/apachectl //httpd的编译安装路径
httpd=/usr/local/apache/bin/httpd //httpd的默认程序
prog=httpd
pidfile=${PIDFILE-/var/run/httpd/httpd24.pid} //若是启动httpd24时,出现pid错误,能够查看/usr/local/apache/logs目录下是否有httpd.pid文件,有的话,更改此路径
lockfile=${LOCKFILE-/var/lock/subsys/httpd24}
若是反复出现上述图片内容;
#vim /etc/rc.d/init.d/httpd24 修改成:
pidfile=${PIDFILE-/usr/local/apache/logs/httpd.pid}
#chkconfig --add httpd24 //将httpd加进到服务列表中去
#chkconfig --list httpd24
#chkconfig httpd24 on //设置在2345开机启动
#service httpd24 start
#ss -tnl // 查看是否有80端口
十、编辑httpd的主配置文件
#vim /etc/http24/httpd.conf
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so //开启fcgi协议支持
LoadModule proxy_module modules/mod_proxy.so //开启代理支持
添加一下两行
ProxyRequests off //关闭正向代理
ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.108.160:9000/shared/bbs/$1 //只要是php文件都使用fcgi协议代理到php //有时候可能会出问题,须要重写一遍
在相应的虚拟主机中以反向代理的方式告诉用户,全部对以.php格式结尾的URL请求,
都基于fcgi这个协议送给(127.0.0.1)这个服务器上的9000端口,
^/(.*\.php)$:以任何内容开始,以.php格式结尾的全部内容
/PATH/TO/DOCUMENT_ROOT:表示PHP网页文件的存放位置
/shared 就是nfs服务器的共享目录
$1:表示^/(.*\.php)$这个模式中所匹配到的页面资源路径,这是作表达式的后向引用的
DocumentRoot "/shared/bbs" //修改站点根目录为nfs
<Directory "/shared/bbs"> //修改对站点根目录的控制标签
DirectoryIndex index.html index.php //添加默认请求文件
AddType application/x-httpd-php .php //在<IfModule mime_module>标签中加入,以支持php格式的文件。
AddType application/x-httpd-php-source .phps 同上
# httpd -t 测试配置文件是否有语法错误
# service httpd24 restart 重启httpd服务
十一、测试php服务器是否能够为apache提供文件类型是php的解析服务
#vim index.php //文件在NFS服务器中的共享目录/shared中定义
<?php
phpinfo();
?>
在浏览器中输入:192.168.108.131/index.php,测试经过
第五步:配置MySQL (可参考:https://www.cnblogs.com/hanshanxiaoheshang/p/9193958.html)
二进制编译安装mariadb ,mysql数据库文件存放在/mydata/data下。本机另外准备了一个磁盘用于建立逻辑卷,data挂载的是一个逻辑卷,属主属组为mysql。
#ss -tnl //查看有没有80端口
或者
#service mysqld stop
#id mysql //首先查看mysql用户是否存在
#groupadd -r -g 306 mysql //添加系统组mysql,并指明组id
#useradd -r -g 306 -u 306 mysql //添加用户,并指明id号
#tar xf mariadb-5.5.46-linux-x86_64.tar.gz -C /usr/local //根据要求解压到指定目录,若是建立到其余目录下,则须要利用#ln -sv建立符号连接,即经过/usr/local/mysql能够当问到文件
#cd /usr/local
#ln -sv mariadb-5.5.46-linux-x86_64 mysql //建立符号连接
#cd /usr/local/mysql
#ll //查看目录下的文件属主属组
#chown -R root:mysql ./* //递归修改mysql目录下的全部文件的属主为root,属组为mysql
#cd /usr/local/mysql //mysql安装完成后会有四个数据库,其中有一个mysql数据库是用来存放mysql的原数据的,这个数据库须要使用脚本生成
#ls /scripts //生成脚本在此目录下mysql_install_db
#/usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/mydata/data //指明用户和数据库存放路径,生成数据库
#ls /mydata/data
mysql performance_schema test
mysql#ls support-file 目录下叫mysql.server
mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld //把文件复制到并命名
# chkconfig --add mysqld // 把mysql假如到服务列表中去
chkconfig --list mysqld
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
此时虽然能够启动,可是尚未配置文件
#mkdir /etc/mysql //为了不和系统安装的rpm冲突,这里新建一个目录
mysql]# ls support-files/ //能够看到此目录下有不少样例文件
my-small.cnf 64M内存
my-medium.cnf 256M内存
my-large.cnf 512M内存
mysql]# cp support-files/my-large.cnf /etc/mysql/my.cnf
#vim /etc/mysql/my.cnf //添加后三行
40 # Try number of CPU's*2 for thread_concurrency
41 thread_concurrency = 8
42 datadir = /mydata/data //数据库路径
43 Innodb_file_per_table = on //
44 skip_name_resolve = on //跳过名称反解,使用mysql客户端连接时,都会把IP地址反解成主机名,并在本地作权限检查。
#service mysqld start
#ln -s /usr/local/mysql/bin/mysql /usr/bin
至此mysqld已经能够成功启动了
#mysql
MariaDB [(none)]> use mysql
MariaDB [mysql]> SELECT User,Host,Password From user;
能够看得出密码所有为空,且有两个匿名用户,因此要给全部的管理员加上密码,清楚全部匿名用户,即安全初始化
# /usr/local/mysql/bin/mysql_secure_installation //直接回车
Enter current password for root (enter for none): //由于如今root没有密码,因此直接回车
Set root password? [Y/n] //是否为管理员设置密码,固然是,y
New password:
Re-enter new password: // 输入两次密码
Remove anonymous users? [Y/n] //是否删除匿名用户,固然要
Disallow root login remotely? [Y/n] //是否禁止管理员远程登录,这个在实际生产环境中是必需要禁止的,由于数据很重要,管理员权限很大,必须禁止
Remove test database and access to it? [Y/n] //是否移除测试数据库,看我的
Reload privilege tables now? [Y/n] //是否重载受权表,改了管理员密码或者建立用户都须要重载-->Y
#mysql -uroot -p //再次登录就须要输入密码了
MariaDB [(none)]> use mysql
Database changed
MariaDB [mysql]> SELECT User,Host,Password From user;
能够看得出匿名用户已经被清除,且每一个管理员都有密码
为数据库discuz,数据库用户名为disadmin受权在IP为192.168.108.160主机上登录,密码为 123456
[mysql]> grant all privileges on discuz.* to disadmin@192.168.108.160 identified by '123456';
[mysql]> flush privileges;
文件中有一个data目录,是用来存放数据库中的数据的,可是数据会逐渐增大,因此须要单独放在一个挂载的磁盘中,
#fdisk /dev/sdb --> n --> p --> 1 -->+10G -->t -->8e -->w
#partx -a /dev/sdb 告诉内核当前磁盘的分区状况, -a :增长制定的分区或读磁盘新增的分区
# pvcreate /dev/sdb2 // 建立pv
#vgs //查看当前已有的卷组 卷组(Volume Group)将多个物理卷组织成一个总体,屏蔽了底层物理卷细节。在卷组上建立逻辑卷时不用考虑具体的物理卷信息。
#vgcreate myvg /dev/sdb2 //建立LVM卷组。
#lvcreate -L 8G -n mydata myvg //建立LVM的逻辑卷。逻辑卷是建立在卷组之上的。逻辑卷对应的设备文件保存在卷组目录下,
例如:在卷组"vg1000"上建立一个逻辑卷"lvol0",则此逻辑卷对应的设备文件为"/dev/vg1000/lvol0"。
#yum install xfsprogs //这里采用xfs文件系统
#modprobe xfs //自动出来可载入模块
#modinfo xfs //查看xfs信息
# mkfs.xfs /dev/myvg/mydata //格式化逻辑卷
或者采用ext4系统
#mke2fs -t ext4 /dev/myvg/mydata
#mkdir /mydata //建立挂载目录
#vim /etc/fstab 添加以下
/dev/myvg/mydata /mydata xfs defaults 0 0
#mount -a
#mount 就能够看到挂载的目录-->/dev/mapper/myvg-mydata on /mydata type xfs (rw)
#cd /mydata
#mkdir data //在分区上建立一个目录
#chown mysql:mysql data //把目录的属主和属组都改成mysql,由于对mysql而言,运行的是mysql用户
至此数据库配置完成
第六步:下面开始测试安装discuz
在浏览器中输入web1的192.168.108.31或者web2的192.168.108.132
以上是在宿主机上的网页测试的
第八步:利用虚拟机XP系统进行测试
使用XP系统自带的命令提示符下测试域名解析的结果
利用虚拟机XP系统是能够的浏览器能够直接解析域名bbs.forum.com,因为浏览器版本低,没法查看
如下是所参考的网站:
http://www.cppblog.com/niewenlong/archive/2008/06/05/52277.aspx
http://blog.51cto.com/wukui/1540833
http://blog.51cto.com/9164364/1541250
https://www.linuxidc.com/Linux/2015-08/121029.htm
http://blog.51cto.com/bluebox/1708108
http://blog.51cto.com/lxsym/477027
http://blog.51cto.com/xiaolangit/1269258
https://blog.csdn.net/u010098331/article/details/50752667
http://www.cnblogs.com/mchina/archive/2013/01/03/2840040.html