做为论坛站点:有两种类型的数据要处理:
1、结构化的数据: 如:用户名、用户发表的评论等,这些可以存储在关系型数据库中: 2、非结构化的数据:如:用户上传的附件。则存储到文件系统中。
论坛的架构:
使用两台httpd服务器来服务用户的访问请求。使用DNS的A记录做客户访问轮循到这两台服务器上。php做为httpd的模块工作。
论坛架构如下图所示:
一、搭建NFS文件共享服务器。
要点:保证192.168.60.99与192.168.60.40两台httpd服务器的进程能够往共享文件系统(目录)中写数据。
1、创建共享目录。
[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共享的目录。
2、两台httpd服务器尝试是否可以挂载NFS共享的目录。
(1)、httpd A(192.168.60.99):服务器挂载 /web
查看NFS服务器共享的目录(文件系统)
[root@stu13 ~]# showmount -e 192.168.60.88Export 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.88Export 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)
3、创建使用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 usenfsuid=400(usenfs) gid=400(usenfs) groups=400(usenfs)
[root@localhost ~]# useradd -u 400 -r usenfs[root@localhost ~]# id usenfsuid=400(usenfs) gid=400(usenfs) groups=400(usenfs)
(2)、在NFS服务器上,也创建一样的用户(指的是id号一样)且要求该用户要有NFS共享出去的文件系统(/web)有读写执行权限。
[root@nfs ~]# useradd -u 400 -r usenfs[root@nfs ~]# id usenfsuid=400(usenfs) gid=400(usenfs) groups=400(usenfs)
使用控制列表的文件授权
设置前:
[root@nfs ~]# getfacl /webgetfacl: Removing leading '/' from absolute path names# file: web# owner: root# group: rootuser::rwxgroup::r-xother::r-x
说明:
从上述信息可知,usenfs用户是无法往该目录中创建文件的。
通过文件权限列表方法,授与某用户权限。
[root@nfs ~]# setfacl -m u:usenfs:rwx /web[root@nfs ~]# getfacl /webgetfacl: Removing leading '/' from absolute path names# file: web# owner: root# group: rootuser::rwxuser:usenfs:rwxgroup::r-xmask::rwxother::r-x
说明:
由于usenfs用户有rwx权限,当以该用户的身份发起创建文件的进程就可以往该目录中创建文件了。
二、创建LAMP平台
说明:这里使用php做为模块的方式跟httpd交互。数据库mariadb与NFS服务器在同一台主机192.168.60.88工作。
1、编译httpd服务器软件:
两台httpd服务器都使用一样的设置进行源码编译安装。
方法如下:
需要的软件包:
httpd-2.4.9.tar.bz2apr-util-1.4.1.tar.bz2apr-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
2、编译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的主页
DirectoryIndex index.php index.html
支持.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.confLoadModule php5_module modules/libphp5.so
修改httpd会话服务进程的属主属组
User usenfsGroup usenfs
修改网页文档的根:
DocumentRoot "/mnt/nfs"Options -Indexes -FollowSymLinks AllowOverride None Require all granted
3、安装二进制格式的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 mysqlcreate symbolic link `mysql' to `mariadb-5.5.36-linux-i686'[root@localhost local]# ll | grep mysqllrwxrwxrwx 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 mysqluid=101(mysql) gid=103(mysql) groups=103(mysql)
数据目录放在/mydata。
要点:
数据的冗余: 要把存放数据的块设备做成提供数据冗余的raid组合。数据的备份: 要把数据存放的块设备做成lvm.这里就略过。。。。。
(1)、修改数据库数据存放目录的属主属组
[root@localhost /]# chown mysql:mysql /mydata/[root@localhost /]# ll | grep mydatadrwxr-xr-x 2 mysql mysql 4096 Aug 17 21:03 mydata
(2)、修改解压后的二进制程序的:属主为mysql,属组为mysql
[root@localhost mysql]# chown -R mysql:mysql ./*[root@localhost mysql]# lltotal 216drwxr-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-benchdrwxr-xr-x 4 mysql mysql 4096 Aug 17 20:02 support-files
(3)、初始化mysql。
[root@localhost mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydataInstalling MariaDB/MySQL system tables in '/mydata' ...OKFilling 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.cnthread_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 mysqldmysqld 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 startStarting MySQL.. [ OK ]
测试是否可以操作数据库
[root@localhost mysql]# ./bin/mysqlWelcome 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)
三、测试LAMP平台:
1、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.88Export 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.88Export 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)
2、启动httpd A 与 httpd B服务器,确保服务会话的进程的属主为:usenfs;
httpd A(192.168.60.99)
[root@stu13 httpd-2.4.9]# ps aux | grep httpdroot 2427 0.2 2.0 24704 10656 ? Ss 14:52 0:00 /usr/local/httpd-2.4.9/bin/httpd -k startusenfs 2428 0.0 1.9 302436 9968 ? Sl 14:52 0:00 /usr/local/httpd-2.4.9/bin/httpd -k startusenfs 2429 0.0 1.9 302436 9972 ? Sl 14:52 0:00 /usr/local/httpd-2.4.9/bin/httpd -k startusenfs 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 httpdroot 1888 0.0 2.0 24704 10660 ? Ss 15:12 0:00 /usr/local/http-2.4.9/bin/httpd -k startusenfs 1889 0.0 1.9 302436 9972 ? Sl 15:12 0:00 /usr/local/http-2.4.9/bin/httpd -k startusenfs 1890 0.0 1.9 303460 9980 ? Sl 15:12 0:00 /usr/local/http-2.4.9/bin/httpd -k startusenfs 1896 0.0 1.9 302436 9976 ? Sl 15:12 0:00 /usr/local/http-2.4.9/bin/httpd -k start
3、添加测试页面,是否能够连接MySQL以及httpd服务器能够解释.php格式的网页。
在共享目录/web中创建:checkmysql.php网页文件。内容所下。
4、访问页面测试
启动mariadb数据库:
[root@nfs ~]# service mysqld startStarting MySQL..... [ OK ]
测试httpd A(192.168.60.99):
[root@nfs ~]# curl -eI http://192.168.60.99/checkmysql.phpSuccess...
说明: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.phpSuccess...
说明:httpd A(192.168.60.40)连接mariadb数据库成功。且能够启用php解释php代码。
关闭mariadb数据库并测试一次。
[root@nfs ~]# service mysqld stopShutting down MySQL. [ OK ][root@nfs ~]# curl -eI http://192.168.60.99/checkmysql.phpFailure...[roocurl -eI http://192.168.60.40/checkmysql.phpFailure...
说明:
两台httpd服务器已经能够与后端的MySQL服务器交互了。且能够解释php格式的页面文档了。
四、部署: wordpress-3.3.1.zh.CN博客程序:
1、创建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数据库的权利。没有操作其它数据库的权利。
2、配置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博客程序。下图为安装后的界面:
通过另一台服务器浏览
OK....