LAMP部署之NFS共享網絡存儲
架構圖:
說明:
當一個網站的訪問量上來之后,一臺WebServer服務器無法應付那么高的并發,需要橫向擴展Web服務器數量,
當我們訪問網頁,向Web服務器請求資源時,資源主要分為靜態資源和動態資源(程序處理),
如果擴展Web服務器的數量,就需要考慮每一臺Web服務器上的靜態資源數據是否一致,
解決方案是采用共享網絡存儲NFS來為前端各個Web服務器提供靜態資源存儲,這樣就避免了靜態資源不一致的問題,
在一定業務承載量上是可以的,業務規模更大就需要采用分布式文件系統,
實驗拓撲說明:
1、編譯安裝兩臺httpd服務器,掛載同一臺NFS存儲,存放網站資源,
2、在兩臺httpd服務器上,編譯安裝php,采用fpm的方式關聯httpd工作,
3、httpd服務器用到后端一臺Mariadb,二進制解壓縮安裝使用,
4、采用httpd虛擬主機的方式提供網站,
5、case1:Mariadb, ns1:NFS, case2:httpd+php, case4:httpd+php
6、測試網站采用DZ,順便部署一下LogAnalyzer,
實驗步驟(全部采用Centos 6.7_X86-64):
1、虛擬機環境初始化,
2、NFS準備(每一臺Web服務器掛載共享存儲之后,對文件的訪問權限為root),
3、準備Mariadb服務器,
4、編譯安裝httpd,
5、編譯安裝php,
6、上傳網站資源,初始化
7、修改DNS,測試
8、測試LogAnalyzer,
開始實驗:
一、虛擬機環境初始化,
虛擬機恢復快照,略過
二、NFS準備,
在ns1虛擬機新增一塊磁盤/dev/sdb分區格式化操作,并且啟動NFS,設置掛載點
[root@ns1 ~]# fdisk /dev/sdb [root@ns1 ~]# fdisk -l | grep /dev/sdb1 /dev/sdb1 1 2610 20964793+ 83 Linux [root@ns1 ~]# mke2fs -t ext4 /dev/sdb1 [root@ns1 ~]# mkdir /www [root@ns1 ~]# mount /dev/sdb1 /www [root@ns1 ~]# vi /etc/fstab #新增,開機自動掛載 /dev/sdb1 /www ext4 defaults 0 0 [root@ns1 ~]# yum install nfs* rpcbind [root@ns1 ~]# vi /etc/exports /www/ 192.168.3.20/24(rw,async,no_root_squash) /www/ 192.168.3.21/24(rw,async,no_root_squash) [root@ns1 ~]# vi /etc/idmapd.conf #nfs4新特性,會去找名稱解析,當解析不對,所有掛載客戶端權限都會被壓縮成nobody,所以需要掛載的客戶端需要修改此文件 #Domain = local.domain.edu Domain = neolinux.com [root@ns1 ~]# showmount -e #查看掛載目錄 Export list for ns1.neolinux.com: /www 192.168.3.21/24,192.168.3.20/24 [root@ns1 ~]# mkdir /www/htdocs/dz -p
三、準備Mariadb數據庫,
準備Mariadb并作初始化
[root@case1 local]# tar xf mariadb-5.5.46-linux-x86_64.tar.gz [root@case1 local]# ln -sv /usr/local/mariadb-5.5.46-linux-x86_64 /usr/local/mysql `/usr/local/mysql' -> `/usr/local/mariadb-5.5.46-linux-x86_64' [root@case1 local]# cd mysql [root@case1 mysql]# cat INSTALL-BINARY #查看mysql安裝步驟 shell> groupadd mysql shell> useradd -g mysql mysql shell> cd /usr/local shell> gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf - shell> ln -s full-path-to-mysql-VERSION-OS mysql shell> cd mysql shell> chown -R mysql . shell> chgrp -R mysql . shell> scripts/mysql_install_db --user=mysql shell> chown -R root . shell> chown -R mysql data shell> bin/mysqld_safe --user=mysql & [root@case1 mysql]# groupadd -r mysql [root@case1 mysql]# useradd -g mysql -r -M -s /sbin/nologin mysql [root@case1 mysql]# chown -R mysql:mysql . [root@case1 mysql]# mkdir /mydata/data -p [root@case1 mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data/ ...安裝完成,可以檢查/mydata/data目錄多了一個文件 [root@case1 mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysq [root@case1 mysql]# chkconfig --add mysql [root@case1 mysql]# chkconfig mysql on [root@case1 mysql]# mkdir /etc/mysql [root@case1 mysql]# cp support-files/my-large.cnf /etc/mysql/my.cnf [root@case1 mysql]# vi /etc/mysql/my.cnf thread_concurrency = 8 #CPU核心數*2 datadir=/mydata/data #定義存放數據的目錄 [root@case1 mysql]# echo "export PATH=/usr/local/mysql/bin:$PATH" > /etc/profile.d/mysql.sh [root@case1 mysql]# ln -sv /usr/local/mysql/include /usr/include/mysql [root@case1 mysql]# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf [root@case1 mysql]# ldconfig /etc/ld.so.conf.d/mysql.conf [root@case1 mysql]# vi /etc/man.config MANPATH /usr/local/mysql/man [root@case1 mysql]# service mysql start Starting MySQL... SUCCESS! [root@case1 mysql]# mysql #數據庫初始化 MariaDB [mysql]> DELETE FROM user where user=''; #刪除匿名用戶 MariaDB [mysql]> UPDATE user SET password=PASSWORD('manager1') where user='root'; #修改root密碼 MariaDB [(none)]> GRANT ALL ON dz.* TO 'dzuser'@'192.168.3.%' IDENTIFIED BY 'dzpassword'; #為DZ網站數據庫創建用戶 MariaDB [mysql]> FLUSH PRIVILEGES; #刷新權限 MariaDB [mysql]> \q Bye
四、編譯安裝httpd,(另外一臺也類似)
準備安裝軟件包:apr-1.5.2.tar.gz,apr-util-1.5.4.tar.gz,httpd-2.4.18.tar.gz,php-5.4.26.tar.gz
[root@case2 src]# tar xf apr-1.5.2.tar.gz [root@case2 src]# cd apr-1.5.2 [root@case2 apr-1.5.2]# ./configure --prefix=/usr/local/apr config.status: executing libtool commands rm: cannot remove `libtoolT': No such file or directory #編譯APR時會有一個BUG,不用管他,如果要解決,可以編輯configure腳本,修改$RM='$RM' 為$RM='$RM -f' config.status: executing default commands [root@case2 apr-1.5.2]# make -j 4 && make install [root@case2 apr-1.5.2]#cd .. [root@case2 src]# tar xf apr-util-1.5.4.tar.gz [root@case2 src]# cd apr-util-1.5.4 [root@case2 apr-util-1.5.4]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr [root@case2 apr-util-1.5.4]# make -j 4 && make install [root@case2 httpd-2.4.18]# yum install pcre-devel [root@case2 httpd-2.4.18]# ./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-modules=most --enable-mpms-shared=all --with-mpm=event [root@case2 httpd-2.4.18]# make -j 4 && make install [root@case2 httpd-2.4.18]# echo "export PATH=/usr/local/apache/bin:$PATH" > /etc/profile.d/httpd.conf [root@case2 httpd-2.4.18]# . /etc/profile.d/httpd.conf [root@case2 httpd-2.4.18]# ln -sv /usr/local/apache/include /usr/include/httpd24 [root@case2 httpd-2.4.18]# vi /etc/rc.d/init.d/httpd apachectl=/usr/local/apache/bin/apachectl httpd=${HTTPD-/usr/local/apache/bin/httpd} prog=httpd pidfile=${PIDFILE-/var/run/httpd24/httpd.pid} lockfile=${LOCKFILE-/var/lock/subsys/httpd24} [root@case2 httpd-2.4.18]# chmod +x /etc/rc.d/init.d/httpd [root@case2 httpd-2.4.18]# chkconfig --add httpd [root@case2 httpd-2.4.18]# chkconfig httpd on [root@case2 httpd-2.4.18]# vi /etc/man.config MANPATH /usr/local/apache/man [root@case2 httpd-2.4.18]# vi /etc/httpd24/httpd.conf PidFile "/var/run/httpd24/httpd.pid" Listen 192.168.3.20:80 ServerName localhost:80 LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so #DocumentRoot "/usr/local/apache/htdocs" AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps Include /etc/httpd24/extra/httpd-vhosts.conf DirectoryIndex index.php index.html
五、編譯安裝PHP(另外一臺類似)
在相同的HTTPD服務器上安裝PHP,并且掛載存儲
[root@case2 src]# tar xf php-5.4.26.tar.gz [root@case2 src]# cd php-5.4.26 [root@case2 php-5.4.26]# yum install pcre-devel openssl-devel libxml2-devel php-gd freetype-devel libjpeg-devel libpng-devel bzip2-devel libmcrypt-devel -y [root@case2 php-5.4.26]# ./configure --prefix=/usr/local/php --with-openssl --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --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 --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 [root@case2 php-5.4.26]# make -j 4 && make install [root@case2 php-5.4.26]# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm [root@case2 php-5.4.26]# chmod +x /etc/rc.d/init.d/php-fpm [root@case2 php-5.4.26]# chkconfig --add php-fpm [root@case2 php-5.4.26]# chkconfig php-fpm on [root@case2 php-5.4.26]# cp php.ini-production /etc/php.ini [root@case2 php-5.4.26]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf [root@case2 php-5.4.26]# vi /usr/local/php/etc/php-fpm.conf pid = /usr/local/php/var/run/php-fpm.pid listen = 192.168.3.21:9000 pm.max_children = 50 #php最大子進程 pm.start_servers = 8 #php啟動進程 pm.min_spare_servers = 5 #最少空閑進程 pm.max_spare_servers = 10 #最大空閑進程 [root@case2 php-5.4.26]# service php-fpm start Starting php-fpm done [root@case2 ~]# vi /etc/fstab 192.168.3.10:/www /www nfs defaults,_netdev 0 0 [root@case2 ~]# yum install nfs-utils [root@case2 ~]# vi /etc/idmapd.conf Domain = neolinux.com [root@case2 ~]# mount 192.168.3.10:/www /www [root@case2 ~]# ll /www total 20 drwxr-xr-x 3 root root 4096 Jun 19 18:21 htdocs drwx------ 2 root root 16384 Jun 19 18:03 lost+foun
六、上傳網站資源,并初始化(具體可以參考前一篇博客)
[root@case2 src]# unzip Discuz_X3.2_SC_UTF8.zip [root@case2 dz]# cp -ar upload/* /www/htdocs/dz #網站初始化就不列出。 [root@case2 dz]# cd /www/htdocs/dz 修改DNS信息: dz IN A 192.168.3.20 dz IN A 192.168.3.21
七、修改DNS,測試查看
修改了DNS在GOOGLE瀏覽器可以查看,但是火狐不行,用IP直接訪問,也是沒有任何問題
通過兩個IP都可以訪問到,并且看到的靜態資源都是一樣。
八、測試練習LogAnalyzer
Centos6采用rsyslog做日志收集工具,這次我們采用ns1服務器做日志收集,并且把日志發送給Mariadb數據庫,
接著在httpd服務器上部署Loganalyzer日志前端查看工具查看,與分析。
日志收集工具需要安裝rsyslog-mysql
我們先準備Loganalyzer.
[root@case2 src]# mkdir loganalyzer [root@case2 src]# tar xf loganalyzer-3.6.5.tar.gz -C loganalyzer [root@case2 src]# cd loganalyzer/loganalyzer-3.6.5/ [root@case2 loganalyzer-3.6.5]# cp -ar src/* /www/htdocs/log/ [root@case2 loganalyzer-3.6.5]# cp contrib/*.sh /www/htdocs/log/ [root@case2 loganalyzer-3.6.5]# chmod +x /www/htdocs/log/*.sh [root@case2 loganalyzer-3.6.5]# cd /www/htdocs/log/
時間同步,在ns1服務器上安裝ntp
[root@ns1 ~]# rpm -qa ntp* ntpdate-4.2.6p5-10.el6.centos.1.x86_64 ntp-4.2.6p5-10.el6.centos.1.x86_64 [root@ns1 ~]# vi /etc/ntp.conf #這里我們的NTP服務器去哪里同步時間呢?可以手動設定, restrict 192.168.3.10 [root@ns1 ~]# ntpq -p #我們的NTP服務器當然是去互聯網同步時間咯 remote refid st t when poll reach delay offset jitter ============================================================================== dns.sjtu.edu.cn .INIT. 16 u - 64 0 0.000 0.000 0.000 +news.neu.edu.cn 202.118.1.46 2 u 8 64 177 78.251 -5.149 8.618 +202.118.1.130 202.118.1.46 2 u 1 64 173 82.994 -7.309 7.136 *dns1.synet.edu. 202.118.1.48 2 u 70 64 176 76.562 -8.906 4.467 ============================================================================== 客戶端:同步時間采用定時計劃任務,都太客戶端都這樣設定。 [root@case1 mysql]# yum install ntpdate -y [root@case1 mysql]# crontab -l 0 1 * * * ntpdate 192.168.3.10 [root@case1 mysql]# date #檢查時間是否同步
收集日志的數據庫服務器授權用戶使用數據庫:
MariaDB [(none)]> GRANT ALL ON Syslog.* TO 'syslog'@'192.168.3.%' IDENTIFIED BY 'syslog';
配置日志服務器:
[root@ns1 log]# rpm -ql rsyslog-mysql #查看rsyslog-mysql模塊 /lib64/rsyslog/ommysql.so /usr/share/doc/rsyslog-mysql-5.8.10 /usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql #可以使用此模版創建數據庫 [root@ns1 log]# mysql -usyslog -psyslog -h192.168.3.11 < /usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql #通過此文件在遠程數據庫中定義庫,表,字段等信息, $ModLoad ommysql #加載rsyslog的mysql模塊 $ModLoad imudp #UDP收集日志 $UDPServerRun 514 $ModLoad imtcp #TCP收集日志 $InputTCPServerRun 514 *.* :ommysql:192.168.3.11,Syslog,syslog,syslog #*.*表示所有類型所有級別的日志,發送到ommysql模塊中的mysql服務器,地址是192.168.3.10,數據庫名稱為Syslog,帳號密碼為syslog
配置日志服務器客戶端:
*.* @@192.168.3.10:514 #將所有日志發送到日志服務器,接著重啟rsyslog服務
HTTPD服務器新增加vhosts配置:
<VirtualHost 192.168.3.21:80> ServerAdmin logadmiin@neolinux.com DocumentRoot "/www/htdocs/log" ServerName log.neolinux.com ErrorLog "/www/htdocs/logs/log-error_log" CustomLog "/www/htdocs/logs/log-access_log" common ProxyRequests Off ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.3.21:9000/www/htdocs/log/$1 <Directory "/www/htdocs/log"> Options none AllowOverride none Require all granted </Directory> </VirtualHost> 并且DNS新增: log IN A 192.168.3.21
Loganalyzer服務器初始化:
http://log.neolinux.com/install.php
OK,實驗暫時到此。
原創文章,作者:nice_neo_linux,如若轉載,請注明出處:http://www.www58058.com/18778