一、项目目的
两台web服务器,共享关系型数据库,共享NFS服务器,利用DNS记录轮询提供负载均衡;
搭建论坛www.wuhf.com
二、项目设计
- DNSServer,DBServer,NFSServer,WebServer1;WebServer2;搭建5个虚拟机
- 域名wuhf.com,通过本地DNS解析到内网两台web服务器,实现轮询负载均衡;
- 在两台web服务器上搭建discuz论坛;
- 使用MariaDB存放结构化数据
- 使用NFS服务器存放非结构化数据
三、项目计划
1、网络架构实现
| 主机名 | 网址 |
| DNS服务器 | ns1.wuhf.com | 172.16.13.1 |
| DB服务器 | localhost | 172.16.13.12 |
| NFS服务器 | localhost | 172.16.13.13 |
| WebServer1 | www.wuhf.com | 172.16.13.10 |
| WebServer2 | www.wuhf.com | 172.16.13.11 |
| 2、搭建DNS服务器,添加两条A记录
www IN A 172.16.13.10 www IN A 172.16.13.11 3、搭建NFS服务器,提供共享文件系统
编辑# vim /etc/exports
添加/mnt 172.16.0.0/16(rw,no_root_squash)
执行# exportfs -ra
4、搭建webserver1
编译安装httpd-2.4.9 php-5.4.40
DocumentRoot "/var/www/a.com"
5、搭建webserver2
编译安装httpd-2.4.9 php-5.4.40 DocumentRoot "/var/www/a.com" 6、搭建DBServer
编译安装MariaDB
创建远程连接账号
1
| mysql> grant all privileges on *.* to 'wuhf'@'%' identified by '123456';
|
7、安装discuz
在NFS虚拟机上,将安装包解压至/mnt
1
2
3
4
5
| # cp -a ./uoload/* /mnt/
# chmod -R o+rw ./config
# chmod -R o+rw ./data
# chmod -R o+rw ./un_server
# chmod -R o+rw ./un_client
|
8、测试
将windows默认DNS指向172.16.13.1
输入域名www.wuhf.com
分别输入172.16.13.10、172.16.13.11测试
四、项目实施
1.网络架构实现
2.搭建DNS服务器
(1)修改主机名 1
2
3
| 1 hostname ns1.wuhf.com
2 vim /etc/sysconfig/network
3 vim /etc/hosts
|
(2)安装配置DNS
1
2
| 77 yum install bind -y
78 vim /etc/named.conf
|
options { listen-on port 53 { 172.16.13.1; }; directory "/var/named"; allow-query { any; }; recursion yes; forward first; forwarders { 172.16.0.1; }; }; include "/etc/named.rfc1912.zones"; 1
| 79 vim /etc/named.rfc1912.zones
|
zone "wuhf.com" IN {
type master;
file "wuhf.com.zone";
};
1
| 80 vim /var/named/wuhf.com.zone
|
$TTL 1200
$ORIGIN wuhf.com.
@ IN SOA ns1.wuhf.com. admin.wuhf.com. (
2015051601 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ IN NS ns1.wuhf.com.
ns1 IN A 172.16.13.1
www IN A 172.16.13.10
www IN A 172.16.13.11
blog IN CNAME www.wuhf.com.
(3)检测DNS配置文件
1
2
| 95 named-checkconf
96 named-checkzone "wuhf.com" /var/named/wuhf.com.zone
|
(4)测试DNS解析 1
2
| 100 dig -t A www.wuhf.com @172.16.13.1
101 dig -t A ns1.wuhf.com @172.16.13.1
|
3、搭建NFS服务器,提供NFS文件系统
因为centos6使用的内核中自带NFS模块,所以直接启用就可以了
如果没有则需要安装 1
2
3
4
| # yum install nfs-utils
# service nfs start
# rpcinfo -p //查看nfs服务是不是开启成功
# vim /etc/exports //添加需要共享的挂载点,设置规则可读写,挤压root用户
|
/mnt 172.16.0.0/16(rw,no_root_squash)
1
2
| # exportfs -ra //同步一下
# showmount -e 172.16.13.13 //查看172.16.13.13上共享的挂载点
|
4、搭建webserver1
(1)提供编译开发环境 1
| # yum groupinstall "Development tools" "Desktop Platform Development" "Server Platform Development"
|
1
2
3
| # yum install pcre-devel //安装依赖的包
# yum install bzip2-devel
# yum install libmcrypt-devel
|
(2)解决依赖关系 准备需要编译的压缩包: 1
2
3
4
| apr-1.5.0.tar.bz2;
apr-util-1.5.3.tar.bz2;
httpd-2.4.9.tar.bz2;
php-5.4.40.tar.bz2
|
提前解压缩 1
2
3
4
| 25 tar xf httpd-2.4.9.tar.bz2
26 tar xf apr-1.5.0.tar.bz2
27 tar xf apr-util-1.5.3.tar.bz2
28 tar xf php-5.4.40.tar.bz2
|
编译apr 1
2
3
4
| 31 cd apr-1.5.0
32 ls
33 ./configure --prefix=/usr/local/apr
34 make && make install
|
编译apr-util 1
2
3
4
| 42 cd apr-util-1.5.3
43 ls
44 ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
45 make && make install
|
(3) 编译httpd-2.4.9并配置 1
2
3
4
5
| 50 cd httpd-2.4.9
51 ls
52 ./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
53 make && make install
|
创建网页存放目录,并在配置文件中将默认目录修改为此目录 1
2
| # mkdir -pv /var/www/a.com
# vim /var/www/a.com/index.php //创建测试主页,添加如下测试代码
|
1
2
3
4
| <h1>::this is a test page::</h1>
<?php
phpinfo();
?>
|
1
| # vim /etc/httpd24/httpd.conf //在配置文件里修改目录如下
|
1
2
| DocumentRoot "/var/www/a.com" //我没有使用虚拟主机模式,所以需要在此处修改目录
<Directory "/var/www/a.com">
|
1
2
3
4
| PidFile "/var/run/httpd.pid" //添加pidfile读取路径
AddType application/x-httpd-php .php //添加对php格式的支持
AddType application/x-httpd-php-source .phps
DirectoryIndex index.php index.html //定位至DirectoryIndex添加index.php,支持php主页
|
提供SysV风格脚本服务
因为系统自带的httpd2.2有服务脚本文件httpd,所有我们只要复制过来稍作修改就可用了,如果系统内没有安装过httpd-2.2那么就需要自己手动编写一个完整的脚本 1
2
| 65 cp /etc/rc.d/init.d/httpd /etc/rc.d/init.d/httpd24
66 vim /etc/rc.d/init.d/httpd24 //修改一些内容以便适应新版本2.4.9
|
1
2
3
4
5
6
7
8
9
10
| 67 chmod +x httpd24 //给脚本添加执行权限
68 chkconfig --add httpd24 //添加脚本到开机检测项
69 chkconfig --level 35 httpd24 on //在3和5等级开机时,启动httpd24
70 chkconfig --list httpd24 //查看开机项有没有成功设定
71 vim /etc/profile.d/httpdsh //新建一个开机执行脚本,脚本里添加httpd24的执行路径
export PATH=/usr/local/apache/bin:$PATH
72 . /etc/profile.d/httpdsh //执行一下此脚本,实现立即生效
73 ln -sv /usr/local/apache/include/ /usr/include/httpd //设置头文件软连接路径
74 service httpd24 start
75 ss -tnl //查看80端口是否成功开启
|
(4)编译并配置php-5.4.40 1
2
3
| 80 cd php-5.4.40
83 ./configure --prefix=/usr/local/php5 --with-mysql=mysqlnd --with-openssl --with
-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --with-apxs2=/usr/local/apache/bin/apxs --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --enable-maintainer-zts
|
//因为php需要远程连结mysql,所以编译时启用了
--with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd 1
2
3
4
| 84 make && make install
85 export PATH=/usr/local/php5/bin:$PATH
86 cp php.ini-production /etc/php.ini
88 service httpd24 restart
|
(5)测试httpd+php
5、搭建webserver2(172.16.13.11)
所有步骤与webserver1相同
6、编译并配置mysql(172.16.13.12)
我们这里使用MariaDB代替mysqlDB,是一样的。 使用二进制格式包:mariadb-5.5.43-linux-x86_64.tar.gz (1)创建逻辑空间 1
2
3
4
5
6
7
8
9
| 21 fdisk /dev/sda //创建一个20G的逻辑分区sda5
22 partx -a /dev/sda //重读分区
23 pvcreate /dev/sda5 //创建pv
25 vgcreate myvg /dev/sda5 //创建vg
26 lvcreate -L 10G -n mydata myvg //创建大小为10G的逻辑空间mydata
27 mke2fs -t ext4 /dev/myvg/mydata //给mydata格式化文件系统
28 vim /etc/fstab //实现mydata开机自动挂载
29 mkdir /data
30 mount /dev/myvg/mydata /data //挂载mydata至/data目录
|
(2)新建系统用户mysql,实现以安全方式运行进程 1
2
3
4
| 33 groupadd -r -g 306 mysql
34 useradd -r -g 306 -u 306 -M -d /data/mydata -s /sbin/nologin mysql
35 mkdir -pv /data/mydata
40 chown mysql:mysql /data/mydata
|
(3)解压安装mariadb 1
2
3
4
5
6
7
| 45 tar xf mariadb-5.5.43-linux-x86_64.tar.gz -C /usr/local
46 cd /usr/local
47 ln -sv mariadb-5.5.43-linux-x86_64/ mysql //给mariadb目录创建软连接mysql
48 chown -R mysql:mysql mysql/*
60 mkdir /etc/mysql //创建配置文件目录
61 cp /usr/local/mysql/support-files/my-large.cnf /etc/mysql/my.cnf //复制一份配置文件
62 vim /etc/mysql/my.cnf //添加以下内容
|
1
| 65 scripts/mysql_install_db --user=mysql --datadir=/data/mydata/ //执行初始化脚本
|
(5)配置mysql的服务脚本
1
2
3
4
5
6
7
8
9
| 67 cp support-files/mysql.server /etc/rc.d/init.d/mysqld
69 chmod +x /etc/rc.d/init.d/mysqld
74 chkconfig --add mysqld
75 chkconfig --list mysqld
76 vim /etc/profile.d/mysql.sh //添加如下内容
export PATH=/usr/lcoal/mysql/bin:$PATH
77 . /etc/profile.d/mysql.sh
78 service mysqld start //开启mysql
79 ss -tnl //查看对应的3306端口是否启动
|
1
2
3
4
| 80 ln -sv /usr/local/mysql/include /usr/include/mysql
81 echo '/usr/local/mysql/lib' > /etc/lnf
82 vim /etc/man.config
MANPATH /usr/local/mysql/man
|
(6)测试mysql
1
2
3
4
5
6
| # mysql //使用默认用户root进入mysql
> set password for 'root'@'127.0.0.1' = password ('123456') //修改默认用户密码
>\q
# mysql -uroot -h127.0.0.1 -p123456 //使用密码登录
> use mysql
mysql> select host,user,password from user; //查看有哪些用户
|
创建一个远程管理账号 1
| mysql> GRANT ALL PRIVILEGES ON *.* TO 'wuhf'@'%' IDENTIFIED by '123456';
|
1
2
3
4
5
6
7
8
9
10
11
12
13
| mysql> flush privileges; //刷新数据库
mysql> select host,user,password from user;
+-----------------------+------+-------------------------------------------+
| host | user | password |
+-----------------------+------+-------------------------------------------+
| localhost | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| localhost.localdomain | root | |
| 127.0.0.1 | root | |
| ::1 | root | |
| localhost | | |
| localhost.localdomain | | |
| % | wuhf | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-----------------------+------+-------------------------------------------+
|
(7)测试php+mysql 1
2
3
4
5
6
7
8
9
10
11
12
| # vim /var/www/a.com/index.php //编辑172.16.13.10的主页文件,添加测试代码
<h1>It works!</h1>
<?php
$link = mysql_connect('172.16.13.12','wuhf','123456');
if ($link)
echo "Success......!";
else
echo "Failure......!";
mysql_close();
phpinfo();
?>
# service httpd24 reload
|
7、安装discuz(172.16.13.13)
准备安装包:Discuz_X3.2_SC_UTF8.zip (1)解压并复制 1
2
3
4
5
6
7
8
9
10
11
12
13
| 88 unzip Discuz_X3.2_SC_UTF8.zip
89 ls
90 cp -a upload/* /mnt/
91 cd /mnt
92 ls
94 cd config/
96 cp config_global_default.php config_global.php
97 cp config_ucenter_default.php config_ucenter.php
99 chmod -R o+rw config/
100 chmod -R o+rw data/
101 chmod -R o+rw uc_client/
102 chmod -R o+rw uc_server/
104 exportfs -ra
|
(2)挂载webserver至NFS系统 分别在webserver1和webserver2上实现挂载: 1
2
3
4
5
| 94 showmount -e 172.16.13.13 //查看挂载点
95 mount -t nfs 172.16.13.13:/mnt /var/www/a.com //立即挂载
96 vim /etc/fstab //开机自动挂载,_netdev表示没有检测到挂载点就放弃挂载
172.16.13.13:/mnt /var/www/a.com nfs defaults,_netdev 0 0
97 service httpd24 reload
|
(3)在windows浏览器中输入172.16.13.10/install安装过程就不写了,注意填写数据库的时候写上远程连接账户wuhf和密码123456
8、测试
将windows上的默认DNS记录修改为172.16.13.1
在浏览器上输入172.16.13.10,登录论坛后发表一个带图片的帖子; 在浏览器上输入172.16.13.11,查看帖子是不是存在,能不能同步显示; 我在这里测试是成功的,不演示了。
五、项目总结
这钟组合DNS+LAMP+NFS是有很大限制的,虽然能够简单搭建小公司的小网站,但是如果访问量过大的话就会出现很多问提,所以现在流行的是LAMP+分布式存储。不过每个公司都是从小到大一步一步成长的,所以小公司为了节省成本,使用这个组合也未尝不可。 这此项目我是将php编译成apache的模块实现的,所以没有用到反向代理,也没有用到php加速技术。 需要特别注意的地方就是数据库的远程连接,可能需要使用php扩展,添加PDO-mysql的扩展,在以后的博客中会讲pdo扩展,这是一个新技术,现在php新发布的版本中都默认使用pdo扩展连接数据库。 此项目花了我一天时间,也是醉了......
|