安裝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