作爲論壇站點:有兩種類型的數據要處理:php
一、結構化的數據: 如:用戶名、用戶發表的評論等,這些能夠存儲在關係型數據庫中: 二、非結構化的數據:如:用戶上傳的附件。則存儲到文件系統中。
論壇的架構:html
使用兩臺httpd服務器來服務用戶的訪問請求。使用DNS的A記錄作客戶訪問輪循到這兩臺服務器上。php作爲httpd的模塊工做。node
論壇架構以下圖所示:mysql
1、搭建NFS文件共享服務器。linux
要點:保證192.168.60.99與192.168.60.40兩臺httpd服務器的進程可以往共享文件系統(目錄)中寫數據。web
一、建立共享目錄。sql
[root@nfs ~]# vim /etc/exports [root@nfs ~]# cat /etc/exports /web 192.168.60.0/24(rw,no_root_squash)
說明:只要是:192.168.60.0網段的用戶均可以掛載使用NFS共享的目錄。數據庫
二、兩臺httpd服務器嘗試是否能夠掛載NFS共享的目錄。vim
(1)、httpd A(192.168.60.99):服務器掛載 /web後端
查看NFS服務器共享的目錄(文件系統)
[root@stu13 ~]# showmount -e 192.168.60.88 Export list for 192.168.60.88: /web 192.168.60.0/24
掛載共享目錄
[root@stu13 ~]# mount -t nfs 192.168.60.88:/web /mnt/nfs/
查看是否掛載上。
[root@stu13 ~]# mount | grep "nfs[[:space:]]" 192.168.60.88:/web on /mnt/nfs type nfs (rw,addr=192.168.60.88)
(2)、httpd B(192.168.60.40):服務器也掛載:/web
查看NFS服務器共享的目錄(文件系統)
[root@localhost ~]# showmount -e 192.168.60.88 Export list for 192.168.60.88: /web 192.168.60.0/24
掛載共享目錄
[root@localhost ~]# mount -t nfs 192.168.60.88:/web /mnt/nfs/
查看是否掛載成功
[root@localhost ~]# mount | grep "nfs[[:space:]]" 192.168.60.88:/web on /mnt/nfs type nfs (rw,addr=192.168.60.88)
三、建立使用NFS服務器共享文件系統(目錄)的用戶;
httpd A(192.168.60.99)與 httpd B(192.168.60.40) 服務器的: User、Group都使用:usenfs
也就是服務用戶請求的進程或線程的屬主與屬組是:usenfs. 因爲用戶上傳附件的話,要往共享文件系統中寫數據。因此,咱們必定要保證該用戶可以往,共享服務器NFS的共享文件目錄中寫數據。
(1)、分別在httpd A與httpd B服務器中設置usenfs 用戶,用戶ID號爲400.
[root@stu13 ~]# id usenfs uid=400(usenfs) gid=400(usenfs) groups=400(usenfs)
[root@localhost ~]# useradd -u 400 -r usenfs [root@localhost ~]# id usenfs uid=400(usenfs) gid=400(usenfs) groups=400(usenfs)
(2)、在NFS服務器上,也建立同樣的用戶(指的是id號同樣)且要求該用戶要有NFS共享出去的文件系統(/web)有讀寫執行權限。
[root@nfs ~]# useradd -u 400 -r usenfs [root@nfs ~]# id usenfs uid=400(usenfs) gid=400(usenfs) groups=400(usenfs)
使用控制列表的文件受權
設置前:
[root@nfs ~]# getfacl /web getfacl: Removing leading '/' from absolute path names # file: web # owner: root # group: root user::rwx group::r-x other::r-x
說明:
從上述信息可知,usenfs用戶是沒法往該目錄中建立文件的。
經過文件權限列表方法,授與某用戶權限。
[root@nfs ~]# setfacl -m u:usenfs:rwx /web [root@nfs ~]# getfacl /web getfacl: Removing leading '/' from absolute path names # file: web # owner: root # group: root user::rwx user:usenfs:rwx group::r-x mask::rwx other::r-x
說明:
因爲usenfs用戶有rwx權限,當以該用戶的身份發起建立文件的進程就能夠往該目錄中建立文件了。
2、建立LAMP平臺
說明:這裏使用php作爲模塊的方式跟httpd交互。數據庫mariadb與NFS服務器在同一臺主機192.168.60.88工做。
一、編譯httpd服務器軟件:
兩臺httpd服務器都使用同樣的設置進行源碼編譯安裝。
方法以下:
須要的軟件包:
httpd-2.4.9.tar.bz2 apr-util-1.4.1.tar.bz2 apr-1.4.6.tar.bz2
說明:httpd-2.4版本要求:apr的版本必定在1.4以上。
查看系統的apr庫的版本,
[root@stu13 admin]# ldconfig -v | grep apr libaprutil-1.so.0 -> libaprutil-1.so.0.3.9 libgstdataprotocol-0.10.so.0 -> libgstdataprotocol-0.10.so.0.25.0 libapr-1.so.0 -> libapr-1.so.0.3.9
說明:因爲apr的版本不適合httpd-2.4,因此要升級apr庫。升級方式:rpm包;源碼包。這裏選擇源碼包。
安裝:apr-1.4.6.tar.bz2 和 apr-util-1.4.1.tar.bz2
[root@stu13 admin]# tar -xf apr-1.4.6.tar.bz2 [root@stu13 admin]# cd apr-1.4.6 [root@stu13 apr-1.4.6]# ./configure --prefix=/usr/local/apr-1.4 [root@stu13 apr-1.4.6]# make && make install
[root@stu13 admin]# tar -xf apr-util-1.4.1.tar.bz2 [root@stu13 admin]# cd apr-util-1.4.1 [root@stu13 apr-util-1.4.1]# ./configure --prefix=/usr/local/apr-util-1.4 --with-apr=/usr/local/apr-1.4 [root@stu13 apr-util-1.4.1]# make && make install
編譯安裝httpd服務器
[root@stu13 admin]# tar -xf httpd-2.4.9.tar.bz2 [root@stu13 httpd-2.4.9]# ./configure \ --prefix=/usr/local/httpd-2.4.9 \ 安裝程序存放的位置 --sysconfdir=/etc/httpd-2.4.9 \ 配置文件存放的位置 --enable-so \ 採用共享模塊的方式編譯安裝httpd。能夠靈活加載卸載模塊。 --enable-ssl \ 啓用ssl安全傳輸功能 --enable-cgi \ 啓用cgi功能 --enable-rewrite \ 啓用重定向功能 --with-zlib \ 支持壓縮功能。傳輸傳輸時,啓用該功能能夠節省帶寬 --with-pcre \ 加密 --with-apr=/usr/local/apr-1.4 \ 使用新安裝的apr,因爲沒有導出該庫。因此要指定在哪一個目錄 --with-apr-util=/usr/local/apr-util-1.4 \ --enable-modules=all \ 安裝所有模塊 --enable-mpms-shared=all \ 把prefork、worker、event都編譯。httpd-2.4支持動態切換mpm。 --with-mpm=event 默認使用的mpm爲:event
[root@stu13 httpd-2.4.9]# make && make install
安裝加密工具:
安裝 libmcrypt
[root@stu13 lamp]# tar -xf libmcrypt-2.5.8.tar.bz2 [root@stu13 lamp]# cd libmcrypt-2.5.8 [root@stu13 libmcrypt-2.5.8]# ./configure --prefix=/usr/local/libmcrypt [root@stu13 libmcrypt-2.5.8]# make && make install
二、編譯php
(1)、編譯php
[root@stu13 admin]# tar -xf php-5.4.26.tar.bz2 [root@stu13 admin]# cd php-5.4.26 [root@stu13 php-5.4.26]# ./configure \ --prefix=/usr/local/php-5.4 \ php的安裝目錄 --with-mysql=mysqlnd \ 使用php內置鏈接數據庫的驅動 --with-pdo-mysql=mysqlnd \ 使用php內置鏈接數據庫的驅動 --with-mysqli=mysqlnd \ 使用php內置鏈接數據庫的驅動 --with-openssl \ 啓用支持ssl --enable-mbstring \ 支持更多字集 --with-freetype-dir \ --with-jpeg-dir \ 支持jpeg格式的圖片 --with-png-dir \ 支持png格式的圖片 --with-libxml-dir \ 支持擴展標記語言xml --enable-xml \ --with-apxs2=/usr/local/httpd-2.4.9/bin/apxs \ 把php編輯成httpd的模塊 --with-mcrypt=/usr/local/libmcrypt \ 使用加密 --with-config-file-path=/etc/ 配置文件的存放位置 --with-config-file-scan-dir=/etc/php.d \ --with-bz2 \ 支持bz2數據壓縮 --enable-maintainer-zts 安全線程,使用httpd的:event、wordker就要啓用該選項。 [root@stu13 php-5.4.26]# make && make install
複製配置文件
[root@stu13 php-5.4.26]# cp php.ini-production /etc/php.ini
(2)、編輯httpd服務器的配置文件,讓httpd服務器與php結合。
提供index.php的主頁
<IfModule dir_module> DirectoryIndex index.php index.html </IfModule>
支持.php格式網頁
AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps
查看是否啓用php模塊
[root@stu13 php-5.4.26]# grep "^LoadModule[[:space:]]php.*" /etc/httpd-2.4.9/httpd.conf LoadModule php5_module modules/libphp5.so
修改httpd會話服務進程的屬主屬組
User usenfs Group usenfs
修改網頁文檔的根:
DocumentRoot "/mnt/nfs" <Directory "/mnt/nfs"> Options -Indexes -FollowSymLinks AllowOverride None Require all granted </Directory>
三、安裝二進制格式的mariadb數據庫
[root@localhost admin]# tar -xf mariadb-5.5.36-linux-i686.tar.gz -C /usr/local [root@localhost local]# ln -sv mariadb-5.5.36-linux-i686 mysql create symbolic link `mysql' to `mariadb-5.5.36-linux-i686' [root@localhost local]# ll | grep mysql lrwxrwxrwx 1 root root 25 Aug 17 20:16 mysql -> mariadb-5.5.36-linux-i686
建立mysql用戶,最好把它建立爲系統用戶。
root@localhost local]# useradd -r mysql [root@localhost local]# id mysql uid=101(mysql) gid=103(mysql) groups=103(mysql)
數據目錄放在/mydata。
要點:
數據的冗餘: 要把存放數據的塊設備作成提供數據冗餘的raid組合。 數據的備份: 要把數據存放的塊設備作成lvm. 這裏就略過。。。。。
(1)、修改數據庫數據存放目錄的屬主屬組
[root@localhost /]# chown mysql:mysql /mydata/ [root@localhost /]# ll | grep mydata drwxr-xr-x 2 mysql mysql 4096 Aug 17 21:03 mydata
(2)、修改解壓後的二進制程序的:屬主爲mysql,屬組爲mysql
[root@localhost mysql]# chown -R mysql:mysql ./* [root@localhost mysql]# ll total 216 drwxr-xr-x 2 mysql mysql 4096 Aug 17 20:02 bin -rw-r--r-- 1 mysql mysql 17987 Feb 24 07:50 COPYING 。。。。。。 drwxr-xr-x 4 mysql mysql 4096 Aug 17 20:02 sql-bench drwxr-xr-x 4 mysql mysql 4096 Aug 17 20:02 support-files
(3)、初始化mysql。
[root@localhost mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata Installing MariaDB/MySQL system tables in '/mydata' ... OK Filling help tables... OK
把屬主改成root
[root@localhost mysql]# chown -R root . [root@localhost mysql]# cp support-files/my-large.cnf /etc/my.cnf
根據實現狀況編輯配置文件添加下述兩行
[root@localhost mysql]# vim /etc/my.cn thread_concurrency = 4 ------> CPU與線程的對應關係 datadir = /web ------> 存放數據的目錄
(4)、提供MySQL的啓動腳本,並檢查是否有執行權限
[root@localhost mysql]# cp support-files/mysql.server /etc/init.d/mysqld [root@localhost mysql]# chkconfig --add mysqld [root@localhost mysql]# chkconfig --list mysqld mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off [root@localhost mysql]# chkconfig mysqld off
(5)、啓動數據庫服務器
[root@localhost mysql]# service mysqld start Starting MySQL.. [ OK ]
測試是否能夠操做數據庫
[root@localhost mysql]# ./bin/mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2 。。。。。 MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mydb | | mysql | | performance_schema | | test | +--------------------+ 5 rows in set (0.00 sec)
注意:安裝數據庫時的默認用戶。都是無需密碼就能夠登錄數據庫系統。爲了安全考慮。因此,要把它刪除或加密碼。
MariaDB [(none)]> select user,host,password from mysql.user; +------+----------------+----------+ | user | host | password | +------+----------------+----------+ | root | localhost | | | root | nfs.9527du.com | | | root | 127.0.0.1 | | | root | ::1 | | | | localhost | | | | nfs.9527du.com | | +------+----------------+----------+ 6 rows in set (0.00 sec)
清除不須要的用戶
MariaDB [(none)]> drop user 'root'@'nfs.9527du.com'; MariaDB [(none)]> drop user 'root'@'::1'; MariaDB [(none)]> drop user ''@'localhost'; MariaDB [(none)]> drop user ''@'nfs.9527du.com'; MariaDB [(none)]> drop user 'root'@'localhost';
設置密碼:
MariaDB [(none)]> set password for 'root'@'127.0.0.1' = password('root'); MariaDB [(none)]> select user,host,password from mysql.user; +------+-----------+-------------------------------------------+ | user | host | password | +------+-----------+-------------------------------------------+ | root | 127.0.0.1 | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | +------+-----------+-------------------------------------------+ 1 row in set (0.00 sec)
添加一個管理數據庫的用戶能夠從任意IPv4的地址登錄到數據庫。受權有操做數據庫的一切權利
MariaDB [(none)]> grant all on *.* to 'root'@'%.%.%.%' identified by 'root'; Query OK, 0 rows affected (0.00 sec)
爲了當即生效刷新數據庫受權表
MariaDB [(none)]> flush privileges; Query OK, 0 rows affected (0.00 sec)
3、測試LAMP平臺:
一、httpd A(192.168.60.99) 與 httpd B(192.168.60.40) 分別掛載NFS服務器共享的/web目錄。
查看NFS共享的目錄
[root@stu13 httpd-2.4.9]# showmount -e 192.168.60.88 Export list for 192.168.60.88: /web 192.168.60.0/24
掛載並檢查是否成功
[root@stu13 httpd-2.4.9]# mount -t nfs 192.168.60.88:/web /mnt/nfs/ [root@stu13 httpd-2.4.9]# mount | grep "nfs[[:space:]]" 192.168.60.88:/web on /mnt/nfs type nfs (rw,addr=192.168.60.88)
在另外一臺httpd服務器查看NFS共享的目錄
[root@node1 ~]# showmount -e 192.168.60.88 Export list for 192.168.60.88: /web 192.168.60.0/24
掛載共享目錄並檢查是否掛載成功
[root@node1 ~]# mount -t nfs 192.168.60.88:/web /mnt/nfs/ [root@node1 http-2.4.9]# mount | grep "nfs[[:space:]]" 192.168.60.88:/web on /mnt/nfs type nfs (rw,addr=192.168.60.88)
二、啓動httpd A 與 httpd B服務器,確保服務會話的進程的屬主爲:usenfs;
httpd A(192.168.60.99)
[root@stu13 httpd-2.4.9]# ps aux | grep httpd root 2427 0.2 2.0 24704 10656 ? Ss 14:52 0:00 /usr/local/httpd-2.4.9/bin/httpd -k start usenfs 2428 0.0 1.9 302436 9968 ? Sl 14:52 0:00 /usr/local/httpd-2.4.9/bin/httpd -k start usenfs 2429 0.0 1.9 302436 9972 ? Sl 14:52 0:00 /usr/local/httpd-2.4.9/bin/httpd -k start usenfs 2431 0.0 1.9 303460 9976 ? Sl 14:52 0:00 /usr/local/httpd-2.4.9/bin/httpd -k start
httpd A(192.168.60.40)
[root@node1 http-2.4.9]# ps aux | grep httpd root 1888 0.0 2.0 24704 10660 ? Ss 15:12 0:00 /usr/local/http-2.4.9/bin/httpd -k start usenfs 1889 0.0 1.9 302436 9972 ? Sl 15:12 0:00 /usr/local/http-2.4.9/bin/httpd -k start usenfs 1890 0.0 1.9 303460 9980 ? Sl 15:12 0:00 /usr/local/http-2.4.9/bin/httpd -k start usenfs 1896 0.0 1.9 302436 9976 ? Sl 15:12 0:00 /usr/local/http-2.4.9/bin/httpd -k start
三、添加測試頁面,是否可以鏈接MySQL以及httpd服務器可以解釋.php格式的網頁。
在共享目錄/web中建立:checkmysql.php網頁文件。內容所下。
<?php $link = mysql_connect('192.168.60.88','root','root'); if ($link) echo "Success..."; else echo "Failure..."; ?>
四、訪問頁面測試
啓動mariadb數據庫:
[root@nfs ~]# service mysqld start Starting MySQL..... [ OK ]
測試httpd A(192.168.60.99):
[root@nfs ~]# curl -eI http://192.168.60.99/checkmysql.php Success...
說明:httpd A(192.168.60.99)鏈接mariadb數據庫成功。且可以啓用php解釋php代碼。
測試httpd B(192.168.60.40):
[root@nfs ~]# curl -eI http://192.168.60.40/checkmysql.php Success...
說明:httpd A(192.168.60.40)鏈接mariadb數據庫成功。且可以啓用php解釋php代碼。
關閉mariadb數據庫並測試一次。
[root@nfs ~]# service mysqld stop Shutting down MySQL. [ OK ] [root@nfs ~]# curl -eI http://192.168.60.99/checkmysql.php Failure... [roocurl -eI http://192.168.60.40/checkmysql.php Failure...
說明:
兩臺httpd服務器已經可以與後端的MySQL服務器交互了。且可以解釋php格式的頁面文檔了。
4、部署: wordpress-3.3.1.zh.CN博客程序:
一、建立wordpress博客程序鏈接MySQL數據庫的用戶以及建立它使用的數據庫。
MariaDB [(none)]> create database wordpress; MariaDB [(none)]> grant all on wordpress.* to 'wordpress'@'192.168.60.%' identified by 'wordpress'; MariaDB [(none)]> flush privileges
說明:
基於安全方面的考慮,wordpress用戶只有使用wordpress數據庫的權利。沒有操做其它數據庫的權利。
二、配置wordpress博客程序
[root@stu13 nfs]# unzip wordpress-3.3.1-zh_CN.zip [root@stu13 wordpress]# cp wp-config-sample.php wp-config.php
編輯wp-config.php配置文件,輸入鏈接MySQL數據的用戶和密碼以及使用的數據庫
[root@stu13 wordpress]# vim wp-config.php // ** MySQL 設置 - 具體信息來自您正在使用的主機 ** // /** WordPress 數據庫的名稱 */ define('DB_NAME', 'wordpress'); /** MySQL 數據庫用戶名 */ define('DB_USER', 'wordpress'); /** MySQL 數據庫密碼 */ define('DB_PASSWORD', 'wordpress'); /** MySQL 主機 */ define('DB_HOST', '192.168.60.88'); /** 建立數據表時默認的文字編碼 */ define('DB_CHARSET', 'utf8');
在192.168.60.99這臺服務器上,打開wordpress程序安裝嚮導
在192.168.60.40 這臺httpd服務器上也打開wordpress的安裝嚮導並安裝wordpress博客程序。下圖爲安裝後的界面:
經過另外一臺服務器瀏覽