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.178linux.com/18778