基于LAMP 的NFS数据共享论坛网站
实现要求:
1.在两台或多台Linux系统上安装LAP(Apache和php),一台安装mariadb,一台安装DNS服务器。
2.其中LAP之间的网页数据是相同的,且安装Discuz论坛,论坛上传的附件存放在本地文件系统上,但必须实现LAP之间的数据同步。通过NFS数显数据共享。
3.多台LAP共用一台数据存储设备Mariadb,实现数据的存储。DNS服务器对同一域名解析不同的A记录,实现轮询解析web服务器的A记录。
实验环境结构图:
实验环境:
1.两台CentOS6的系统,安装LAP,NFS 和DNS :
IP:172.16.99.1(DNS服务器和LAP)
IP:172.16.99.2(NFS服务器和LAP)
2.一台CentOS6系统安装Mariadb(172.16.99.3)
实验步骤:
一.安装LAP,NFS和DNS
1.安装开发环境:
配置好本地yum:
# yum groupinstall “Development Tools”
# yum groupinstall “Server Platform Development”
2.在172.16.99.1主机上安装DNS
a.在172.16.99.1上yum安装DNS:
# yum install -y bind bind-utils
b.修改主配置文件,添加域:zkchang.com:
options { listen-on port 53 { 172.16.99.1; }; //监听的端口与主机IP directory "/var/named" allow-query { 172.16.99.0/16 ; }; //允许网络段进行DNS解析 recursion yes; //是否允许递归查询 }; zone "zkchang.com" IN { type master; file "zkchang.com.zone"; }; zone "99.16.172.in-addr.arpa" IN{ type master; file "172.16.99.1.zone"; };
c.编写正反向解析区域数据库文件:
正向:
zkchang.com. IN SOA ns1.zkchang.com. admin.zkchang.com. ( 2015091406 6H 5M 2D 1D ) zkchang.com. IN NS ns1.zkchang.com. zkchang.com. IN NS ns2.zkchang.com. ns1 IN A 172.16.99.1 ns2 IN A 172.16.99.2 www IN A 172.16.99.1 www IN A 172.16.99.2
反向:
$TTL 1D @ IN SOA ns1.zkchang.com. admin.zkchang.com. (2015091406 6H 5M 2D 1D) IN NS ns1.zkchang.com. IN NS ns2.zkchang.com. 1 IN PTR ns1.zkchang.com. 2 IN PTR ns2.zkchang.com. 1 IN PTR www.zkchang.com. 2 IN PTR www.zkchang.com
d.重启服务:测试:
# service named restart
# dig -t a www.zkchang.com @172.16.99.1
3.两台都安装安装LAP
a.安装httpd:
(1)安装pcre-devel:# yum install pcre-devel
(2)编译安装:apr和apr-util
# tar xf apr-1.5.0.tar.bz2 # cd apr-1.5.0 # ./configure --prefix=/usr/local/apr # make && make install # 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
(3)编译安装httpd:
# tar xf httpd-2.4.12.tar.bz2 # cd httpd-2.4.12 # ./configure --prefix=/usr/local/httpd --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)配置:
a.提供系统服务:
将/usr/local/httpd/bin目录下的apachectl文件复制到/etc/init.d/下,并命名为httpd:
# cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
修改httpd文件:在文件前部分添加如下几行:
# chkconfig: - 85 15
# description: Apache is a World Wide Web server.
添加系统服务:
# chkconfig --add httpd
b.添加PATH变量:
在目录/etc/profile.d/目录下创建一文件httpd.sh,内容如下:
export PATH=/usr/local/httpd/bin/:$PATH
测试:
b.安装php:
1.解决依赖关系:
# yum -y install bzip2-devel libxml2-devel # tar xf ibmcrypt-2.5.8.tar.gz # ./configure --prefix=/usr/local/libmcrypt # make && make install
2.编译安装php-5.6.4.tar.xz
# tar xf php-5.6.4.tar.xz # cd php-5.6.4 # ./configure --prefix=/usr/local/php --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-openssl --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=/usr/local/libmcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 # make && make install
这里把--with-apxs2=/usr/local/apache/bin/apxs 改成--enable-fpm ,即,就是在编辑php时,添加fpm模块。
3. 为服务提供配置文件:
# cp php.ini-production /etc/php.ini
4.配置php-fpm:
安装完php之后,会在php-5.6.4目录下的有一个目录提供了php-fpm的服务脚本。
sapi/fpm/init.d.php-fpm
1.将php-fpm添加至服务列表:
php-5.6.4]# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm # chmod +x /etc/rc.d/init.d/php-fpm # chkconfig --add php-fpm
2.给php-fpm提供配置文件:
# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
3.配置php-fpm的配置文件,修改内容:
pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 2 pm.max_spare_servers = 8 pid = /usr/local/php5/var/run/php-fpm.pid
4.启动php-fpm服务,查看是否成功:
# service php-fpm start
c.配置httpd:
1.让httpd能识别php文件,
# vim /etc/httpd/httpd.conf
1、添加如下二行
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
2、定位至DirectoryIndex index.html
修改为:
DirectoryIndex index.php index.html
2.添加fcgi模块
在Apache httpd 2.4以后已经专门有一个模块针对FastCGI的实现,此模块为mod_proxy_fcgi.so,它其实是作为mod_proxy.so模块的扩充,因此,这两个模块都要加载
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
3.配置支持fcgi的虚拟主机
注释掉中心主机
在配置文件中,取消对#Include /etc/httpd24/extra/httpd-vhosts.conf的注释,使httpd支持虚拟主机。
编辑虚拟主机的配置文件:
<VirtualHost *:80> DocumentRoot "/web/dz/" ServerName www.zkchang.com ServerAlias www.zkchang.com ErrorLog "/var/log/dz_error_log" CustomLog "/var/log/dz_access_log" common ProxyRequests off ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/web/dz/$1 <Directory "/web/dz/"> Options None Allowoverride None Require all denied Require ip 172.16.0.0/16 </Directory> </VirtualHost>
4.创建目录,进行测试:
# mkdir -pv /web/dz # vim index.php <?php echo "nihao"; phpinfo(); ?>
到此LAP安装结束:另一台的安装过程和此台相同。
4.在172.16.99.2主机上安装和配置NFS:
#yum install nfs-utils
编辑配置文件:/etc/exports
/web/dz 172.16.99.1(rw,async,no_root_squash)
# 配置共享目录为可读写,客户端root用户权限不压缩
[root@www ~]# service nfs restart
Shutting down NFS daemon: [ OK ]
Shutting down NFS mountd: [ OK ]
Shutting down NFS services: [ OK ]
Shutting down RPC idmapd: [ OK ]
Starting NFS services: [ OK ]
Starting NFS mountd: [ OK ]
Starting NFS daemon: [ OK ]
Starting RPC idmapd: [ OK ]
在172.16.99.1web服务器上挂载172.16.99.2web服务器上的站点共享目录/web/dz/以实现数据共享:
# mount -t nfs 172.16.99.2:/web/dz /web/dz
在/etc/fastab文件中添加一行:
172.16.99.2:/web/dz /web/dz nfs defaults 0 0
测试一下:为了效果我们用IP测试
二.安装Mariadb
1.在172.16.99.3虚拟机上安装一个磁盘,分区,进行存放Mariadb的Data目录:
创建一目录用于挂在创建的逻辑卷:# mkdir -pv /mydata/
创建逻辑卷并格式化挂在:
先分区,改变分区ID为8e
创建物理卷: ~]# pvcreate /dev/sdb1 /dev/sdb2
创建卷组:~]# vgcreate vg0 /dev/sdb1 /dev/sdb2
创建逻辑卷: ~]# lvcreate -n mydata -L 8G vg0
格式化:~]# mkfs -t ext4 /dev/mapper/vg0-mydata
挂在:~]# mount /dev/mapper/vg0-mydata /mydata/
永久挂在:编写文件/etc/fstab 添加一行:
/dev/mapper/vg0-mydata /mydata/ ext4 defaults 0 0
创建目录:mkdir -pv /mydata/data
2.创建用户和用户组:
~]# groupadd -g 3333 mysql ~]# useradd -r -u 3333 -g 3333 -s /sbin/nologin -M -d /mydata/data mysql ~]# cat /etc/passwd | grep mysql mysql:x:3333:3333::/mydata/data:/sbin/nologin
3.使用通用二进制安装Mariadb:
# tar xf mariadb-5.5.43-linux-x86_64.tar.gz -C /usr/local # cd /usr/local/ # ln -sv mariadb-5.5.43-linux-x86_64 mysql # cd mysql
进入mariadb 目录之后,修改该目录下所有文件和目录的属主和属组:
mysql]# chown -R mysql.mysql ./*
初始化数据库:
mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data/
再修改该目录下文件和目录的属主:# chown -R root ./*
4.后续配置:
a.提供系统服务:
# cd /usr/local/mariadb
# 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
b.提供配置文件,并在配置文件中添加几项:
# cd /usr/local/mysql
# cp support-files/my-large.cnf /etc/my.cnf
修改配置文件:
datadir = /mydata/data
innodb_file_per_table = on
skip_name_resolve = on
c.修改PATH变量,直接可以使用mysql的相关工具:
在/etc/profile.d/目录下创建文件mysqld.sh:
export PATH=/usr/local/mysql/bin:$PATH
d.输出mysql的头文件至系统头文件路径:创建链接实现:
# ln -sv /usr/local/mysql/include /usr/include/mysql
e.输出mysql的库文件给系统库查找路径:
# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
让系统重新载入系统库:
# ldconfig
5.测试:
6.测试一下LAP主机能否连接mysql:
1.在172.16.99.3虚拟机上为mysql创建用户,并授权:
MariaDB [(none)]> CREATE USER 'zkchang'@'%' IDENTIFIED BY 'zkchang';
MariaDB [(none)]> GRANT ALL ON *.* TO 'zkchang'@'%';
2.在172.16.99.2上编辑/web/dz/index.php。内容如下:
<?php echo "This web server is 172.16.99.2"; $link=mysql_connect('172.16.99.3','zkchang','zkchang'); if($link) echo "OK"; else echo "Failure"; phpinfo(); ?>
3.测试结果:
三.安装Discuz:
在172.16.99.2上安装Discuz
# unzip Discuz_X3.2_SC_UTF8.zip
解压之后产生三个目录:readme upload utility。将upload 复制到/web/dz目录下,并命名为dz
# cp -a upload /web/dz/dz
网页访问dz:
四.测试:
在一台主机上以IP172.16.99.2以管理员访问Discuz,发表一个帖子并上传附件。之后用另一个IP:172.16.99.1以另一个用户访问Discuz,查看是否有附件和帖子。是否实现数据同步?
然后以一个普通用户使用IP:172.16.99.1登录论坛,查看是否有帖子和附件:
发现论坛中有新帖出现,且有附件。说明数据同步成功!!