LAMP部署之NFS共享网络存储

LAMP部署之NFS共享网络存储

架构图:

29.png

说明:

    当一个网站的访问量上来之后,一台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直接访问,也是没有任何问题

30.png

31.png

通过两个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

32.png

33.png

OK,实验暂时到此。


原创文章,作者:nice_neo_linux,如若转载,请注明出处:http://www.178linux.com/18778

(0)
上一篇 2016-06-20 04:42
下一篇 2016-06-20 22:26

相关推荐

  • SElinux

    SElinux:Secure Enhanced Linux   SElinux工作与linux内核中他所实现的功能叫做强制访问控制机制。DAC:是linux的自主访问控制。MAC:是SElinux引入的访问法则,叫作强制访问控制。   SElinux有两种工作级别:     strick:严格级别,每个进程都收到SEl…

    Linux干货 2016-09-23
  • 系统启动这块的一些实验及基本内容–下

    下面我来讲下grub,grub在编辑的时候可以进入一种模式就是单用户模式,就是当grub.conf文件未写入密码时,普通用户将直接忽略系统密码进入系统,所以这可以称为一个捷径,也可以成为一个漏洞,当然linux的前辈们不可能连这个都想不到,他们也有自己的办法,这就是我们grub的两层加密机制,在选定登陆界面之前可以设置一次,启动内核时也可以设置一次,密码也可…

    Linux干货 2016-09-13
  • shell脚本语言中的选择执行

    shell脚本语言中的选择执行 概述 程序执行过程分为顺序执行、选择执行和循环执行。顺序执行是指程序按照步骤一步一步地运行。选择执行是指程序根据特定条件选择两项或者多项中的一项运行。循环执行是指程序根据特定条件重复执行直到某个节点结束,继续运行其他步骤。本篇文章从判断条件和条件判断式简要说明shell脚本语言中程序选择执行的用法。 shell脚本中的判断条件…

    Linux干货 2017-04-17
  • ☞CentOS安装程序{ 源码包安装;rpm包安装;}&&恢复rpm功能

    ☞CentOS安装程序{ 源码包安装;rpm包安装;}&&恢复rpm功能 本文是继上一篇文章“CentOS程序安装的3种方式{ 源码包安装 | rpm包安装 | yum安装;}”的补充,上篇文章http://www.178linux.com/38812主要介绍了yum安装软件的方法以及归纳了详细的yum命令。本文继续介绍基于本地file、远程…

    Linux干货 2016-08-24
  • 文本编辑器:vim 基础篇

       VI:Visual Interface,是一种文本编辑器,还是全屏编辑器。   VIM:Vi IMproved,vi的增强版,vim是模式化的编辑。 VIM的三种模式:        编辑模式(命令模式,默认模式)       插入模…

    Linux干货 2016-08-18
  • 一起学WINS系列(二)安装、配置

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://jeffyyko.blog.51cto.com/28563/159128  此系列第二节:安装服务端、配置客户端。          完整的WINS系统…

    Linux干货 2015-03-25