基於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登錄論壇,查看是否有帖子和附件:
發現論壇中有新帖出現,且有附件。說明數據同步成功!!