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

相关推荐

  • 第十周

    1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情) 1.开启电源后,POST自检:检查硬件设备,通过后交给BIOS 2.BIOS加载可选择的启动设备,寻找可引导的启动设备的记录:MBR 3.MBR:硬盘的主引导记录,存在于0磁道0扇区,共512字节.其中Bootloader占用446字节,分区表占用64字节,magic nu…

    Linux干货 2016-10-17
  • 博客

       这是我的第一篇博客!   平时学习中,总会遇到或大或小的问题,以及一些新的感悟,在当时能够十分清晰记得,但过一些时日,便发现又忘记了。以前十分明白的东西,又变得有些模糊,甚至完全忘记。因此特别需要记录下来,方便日后的查阅或分享给其他遇到类似问题的朋友。    如果以后忘记的某些知识,这时候,翻开以往博客…

    Linux干货 2017-07-11
  • shell脚本2

    使用read命令来接受输入 使用read来把输入值分配给一个或多个shell变量 read后面跟变量,回车输入内容,就可以把输入的内容赋给变量 -p指定要显示的提示 -s 静默输入,一般用于密码 输入的内容不显示 -n N 指定输入的字符长度N 当输入的内容达到了5个字符会直接结束输入 -d‘字符’ 输入结束符 把!作为了结束符,在输入内容时,当输入!会直接…

    2017-08-11
  • Linux软件包管理

    一、rpm包管理工具 1、rpm包简介 rpm是redhat的软件包管理器。rpm包管理器全称rpm: Redhat Package Manager RPM  Package Manager。它的软件包后缀也为.rpm。除此外,debian,deb文件有dpkg包管理器。 rpm包的命名方式: 源代码:name-version.tar.{gz|bz…

    Linux干货 2016-08-21
  • 互联网的实现

    互联网的实现 全世界几十亿台电脑,连接在一起,两两通信。上海的某一块网卡送出信号,洛杉矶的另一块网卡就收到了,两者实际上根本就不知道对方的物理位置,这难道不是一件很神奇的事情吗? 互联网的**核心**是一些列协议,总称为“互联网协议”(Internet Protocol Suite)。它们对电脑如何连接和组网做出了详细的规定。 互联网协议入门 概述 五层模型…

    Linux干货 2017-05-05
  • RAID and LVM

    RAID          Redundant Arrays of  inexpensive(Independent)Disks,RAID:容错式廉价磁盘阵列,容错式独立磁盘阵列,简称RAID,由加利福尼亚大学伯克利分校(University of California-Berkeley)在1988…

    Linux干货 2016-09-02