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)
nice_neo_linuxnice_neo_linux
上一篇 2016-06-20
下一篇 2016-06-20

相关推荐

  • 高级文件系统管理2

    逻辑卷管理器(LVM),允许对卷进行方便操作的抽象层,包括重新设定文件系统的大小。允许在多个物理设备间重新组织文件系统。其步骤大体如下:将设备指定为物理卷,用一个或者多个物理卷来创建一个卷组,物理卷你是用固定大小的物理区域(PE)来定义的,在物理卷上创建的逻辑卷是由物理区域组成,可以在逻辑卷上创建文件系统。 一、知识整理 1、LVM设备名:dm-#。 软链接…

    Linux干货 2016-09-13
  • 马哥教育网络班22期+第九周课程练习

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别统计这两类用户的个数;通过字符串比较来实现; #!/bin/bash declare -i sum1=0 declare -i sum2=0 shells=$(cat /etc/p…

    Linux干货 2016-11-28
  • ☞keepalived

    keepalived 高可用集群 VRRP协议 keepalived 安装keepalived 主要文件 配置文件说明 【一】测试keepalived基本功能 单主模型示例 双主模型示例 通知脚本示例 【二】单主模型高可用DR类型LVS集群 配置keepalived主机 Real Server配置 测试结果 【三】双主模型高可用DR类型LVS集群 配置kee…

    Linux干货 2016-11-01
  • 程序包管理之YUM解析

    前言:    yum是rpm的前端程序,用来解决软件包相关依赖性,可以在多个库之间定位软件包,如果直接使用rpm直接安装程序包也可以,但是需要自己手工解决程序包依赖性的问题,可能程序包的依赖性非常复杂,那么直接使用rpm安庄,就会非常麻烦,而使用YUM安装就会自动解决依赖性的问题。大大简化了安装过程。  YUM客户端配置文件: …

    Linux干货 2016-08-24
  • iptables/netfilter进阶

      在上一章当中我们介绍了iptables的介绍以及它的基本使用,下面我们开始介绍iptables的命令用法以及iptables是如何工作的。 1、回顾 2、iptables相关命令 1、回顾   我们回顾一下上一章节的内容,在上一章节中我们讲述的是iptables的基本概念以及命令格式,同时讲述规则链与表的概念,那么…

    Linux干货 2017-02-03
  • SED基本用法和在文本中的使用

    sed命令行格式为: sed [-nefri] ‘command’ 输入文本/文件 常用选项: -n∶取消默认的输出,使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来 -e∶进行多项编辑,…

    Linux干货 2017-05-05