大数据项目实战之 --- 某购物平台商品实时推荐系统(三)

一、Centos安装nginx  s100 - s400
---------------------------------------------------------------
   1.在win7安装nginx
      解压即可(任何目录即可)。

   2.在centos上安装nginx
      a)先安装G++
         $>sudo yum install gcc

      b)安装pcre
         方法一、通过yum安装(推荐)
            $>sudo yum install pcre-static.x86_64

         方法二、手动通过源代码编译安装(不使用)
            $>tar -xzvf pcre-8.32.tar.tz -C ~
            $>cd ~/pcre-8.32
            $>sudo ./configure --prefix=/soft/pcre-8.32

   3.安装nginx
         方法一、通过yum安装(无)
            $>sudo yum install nginx

         方法二、手动通过源代码编译安装(使用该项)
            $>tar -xzvf nginx-1.6.3.tar.tz -C ~
            $>cd ~/nginx-1.6.3
            $>sudo ./configure --prefix=/soft/nginx-1.6.3 --without-http_gzip_module
            $>sudo make && make install
            $>sudo ldconfig

   4.配置环境变量
      [/etc/profile]
      ...
      export PATH=$PATH:/soft/nginx-1.6.3/sbin

   5.启动nginx服务器
      $>cd /soft/nginx-1.6.3/sbin
      $>sudo ./nginx             //启动服务器

   6.停止服务器
      $>sudo ./nginx -s stop          //停止服务器
      $>sudo ./nginx -s reload         //重新加载服务器
      $>sudo ./nginx -s reopen         //重新打开服务器
      $>sudo ./nginx -s quit          //退出服务器

   6.通过浏览器访问nginx网页,出现nginx欢迎页面。
      http://s100:80/


二、Ubuntu上安装nginx
---------------------------------------
    1.使用root安装

    2.安装g++编译器
        $>sudo apt-get intsall g++

    3.安装pcre-8.32(root)
        $>tar -xzvf pcre-8.32.tar.gz
        $>sudo ./configure --prefix=/soft/pcre-8.32
        $>sudo make && make install
        $>sudo ldconfig

    4.安装nginx
        $>tar -xzvf nginx-1.63.tar.gz
        $>sudo ./configure --prefix=/soft/nginx-1.6.3 --without-http_gzip_module
        $>sudo make && make install$>sudo ldconfig


三、nginx安装脚本
---------------------
   [nginx_install.sh]
   #!/bin/bash
   sudo yum install -y pcre-static.x86_64

   #
   cp /mnt/hgfs/downloads/nginx-soft/nginx-1.6.3.tar.gz ~
   cd ~
   tar -xzvf nginx-1.6.3.tar.gz -C .
   cd nginx-1.6.3
   sudo ./configure --prefix=/soft/nginx-1.6.3 --without-http_gzip_module
   sudo make && make install
   sudo ldconfig


四、安装tomcat  s100 - s400
------------------------------------------
    略


五、启动s100- s400 的nginx集群
---------------------------------------------
    1.s100切换到root
        $>su root

    2.在usr/bin下创建nginx的符号链接
        $> su root
        $> xcall.sh "ln -s /soft/nginx/sbin/nginx  /usr/local/bin/nginx"
        $> xcall.sh "nginx"


六、配置win7的nginx反向代理服务器
-------------------------------------------
       [nginx/conf/nginx.conf]
    #user  nobody;
    worker_processes  1;

    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;

    #pid        logs/nginx.pid;


    events {
        worker_connections  1024;
    }


    http {
        include       mime.types;
        default_type  application/octet-stream;

        #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
        #                  '$status $body_bytes_sent "$http_referer" '
        #                  '"$http_user_agent" "$http_x_forwarded_for"';

        #access_log  logs/access.log  main;

        sendfile        on;
        #tcp_nopush     on;

        #keepalive_timeout  0;
        keepalive_timeout  65;

        #gzip  on;
        upstream nginx_servers{
            server 192.168.43.131:80 max_fails=2 fail_timeout=2 weight=1;
            server 192.168.43.132:80 max_fails=2 fail_timeout=2 weight=4;
            server 192.168.43.133:80 max_fails=2 fail_timeout=2 weight=4;
            server 192.168.43.134:80 max_fails=2 fail_timeout=2 weight=4;
        }

        upstream tomcat_servers{
            server 192.168.43.131:9090 weight=1;
            server 192.168.43.132:9090 weight=4;
            server 192.168.43.133:9090 weight=4;
            server 192.168.43.134:9090 weight=4;
        }

        server {
            listen       80;
            server_name  localhost;
            access_log off ;
            location ~* \.(png|html|js|css)$ {
                proxy_pass http://nginx_servers;
            }
            location / {
                proxy_pass http://tomcat_servers;
            }
        }
    }


七、s201-s204 tomat的端口需要修改
----------------------------------------------
   [tomcat/conf/server.xml]共两处.
   8080 --> 9090

八、s201-s204 nginx的servername的需要修改成具体ip
-----------------------------------------------
   [nginx/conf/nginx.conf]
   http{
      ...
        log_format  main  '$remote_addr|||$remote_user|||$time_local|||$request|||'
                          '$status|||$body_bytes_sent|||$http_referer|||'
                          '$http_user_agent|||$http_x_forwarded_for';

      access_log  logs/access.log  main;

      server{
         ...
         server-name 192.168.231.201;
         ...
      }
   }

九、nginx常用命令
--------------------------------------------------
   $> nginx   -t          //检查配置是否正确
   $> nginx            //启动
   $> nginx   -s reload     //重新加载配置文件
   $> nginx   -s stop          //停止服务器


十、生成日志
----------------------------------------------------------
    1.将所有access.log文件的内容清除
        [soft/nginx/logs/access.log]
        $> su root
        $> cd /soft/nginx/logs
        $> xcall.sh "rm -rf /soft/nginx/logs/access.logs"
        $> xcall.sh "touch /soft/nginx/logs/access.logs"


    2.通过浏览器访问192.168.231.201:80,查看日志生成的数据
        [win7]
        http://192.168.231.201:80

    3.win7上启动反向代理nginx服务器,实现负载均衡
        D:\MyProgram\nginx-1.6.3 > nginx.exe
        cmd > netstat -ano | grep 80

十一、部署web模块到tomcat集群
-------------------------------------------------------------
    1.pom.xml中添加打war包命令
    [pom.xml]
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.test</groupId>
        <artifactId>eshop</artifactId>
        <version>1.0-SNAPSHOT</version>

        <packaging>war</packaging>
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>2.6</version>
                    <configuration>
                        <warSourceDirectory>web</warSourceDirectory>
                        <failOnMissingWebXml>false</failOnMissingWebXml>
                        <excludes>css/*,images/*,js/*,png/*,phone/*</excludes>
                    </configuration>
                </plugin>
            </plugins>
        </build>

        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.11</version>
            </dependency>
            <dependency>
                <groupId>c3p0</groupId>
                <artifactId>c3p0</artifactId>
                <version>0.9.1.2</version>
            </dependency>
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-core</artifactId>
                <version>5.2.2.Final</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>4.3.3.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>4.3.3.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-orm</artifactId>
                <version>4.3.3.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>4.3.3.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
                <version>4.3.3.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjweaver</artifactId>
                <version>1.8.10</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.17</version>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
                <version>2.5</version>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
                <version>1.2</version>
            </dependency>
        </dependencies>
    </project>

    2.修改项目中的jdbc.properties文件的mysql地址。
        [eshop/resources/jdbc.properties]
        jdbc.driverclass=com.mysql.jdbc.Driver
        jdbc.url=jdbc:mysql://192.168.231.1:3306/eshop
        jdbc.username=mysql
        jdbc.password=mysql

        c3p0.pool.size.max=10
        c3p0.pool.size.min=2
        c3p0.pool.size.ini=3
        c3p0.pool.size.increment=2

        hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
        hibernate.show_sql=true

    3.使用maven导出成war包

    4.分发war到s201 - s204四台主机的/soft/tomcat/webapps/eshop.war位置

    5.启动tomcat服务器
        $> xcall.sh "/soft/tomcat/bin/startup.sh"

    6.访问web程序
        http://s100:9090/eshop/admin/userlist        //ok
        http://s100:9090/eshop/admin/userlist --> 编辑   //wrong 404 ->http://s100:9090/eshop/admin/editUser
        //如果出现404的错误,请更改jsp页面上所有的url修改成c:URL标签库
        动态获取上下文

十二、部署静态资源到nginx集群
------------------------------------------
   1.复制web目录到eshop目录

   2.删除jsps和WEB-INF子目录,只留js+css|images|phone

   3.分发eshop文件夹到所有nginx/html/下
      $>cd /soft/nginx/html
      $>xsync.sh eshop            //不要加/

   4.通过浏览器查看
      [win7]
      http://localhost:80/eshop/phone/iphone7.html

   5.查看nginx集群上的log信息


十三、使用ab做压测
--------------------------------------------------------------
   1.安装httpd-2.2.21-win32-x86-no_ssl.msi试软件。

   2.查看ab.exe的帮助.
      cmd>cd ab/bin
      cmd>ab /?

   3.使用ab进行压力测试
      //-c : 设置并发度,同时访问的在线人数
      //-n : 设置总的访问请求数。
      cmd>ab -c 100 -n 100000 http://localhost:80/eshop/phone/huawei.html


十四、cron机制实现nginx的日志滚动--调度
---------------------------------------------------
    1.时钟同步
        $>sudo yum install ntp
        $>sudo ntpdate time.nist.gov

    2.设置时区
       $>sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

    3.配置cron
        a.编写执行脚本
            [/usr/local/bin/testcron.sh]
            #!/bin/bash
            echo hello > /home/centos/1.txt

        b.编辑cron配置
            $>sudo nano /etc/crontab
                [/etc/crontab]
                ...
                PATH=...:/usr/local/bin
                ...
                * * * * * centos testcron.sh

             保存退出。

        c.重启crontab服务器
            $>sudo service crond restart   //重启服务
            $>sudo service crond status       //查看状态
            $>sudo service crond restart   //stop

        d.查看~/1.txt

    4.编写脚本,实现日志滚动
        [/usr/local/bin/rolllog.sh]
        #!/bin/bash
        #
        dataformat=`date +%Y-%m-%d-%H-%M`
        #
        cp /soft/nginx/logs/access.log /soft/nginx/logs/access_$dataformat.log
        host=`hostname`
        sed -i 's/^/'${host}',&/g' /soft/nginx/logs/access_$dataformat.log
        #
        lines=`wc -l < /soft/nginx/logs/access_$dataformat.log`
        # move access-xxx.log flume's spooldir
        mv /soft/nginx/logs/access_$dataformat.log /soft/nginx/logs/flume
        #delete rows
        sed -i '1,'${lines}'d' /soft/nginx/logs/access.log
        #reboot nginx , otherwise log can not roll.
        kill -USR1 `cat /soft/nginx/logs/nginx.pid`

    5.cron定时执行rolllog.sh
        [/etc/crontab]
        min    hour  day of m  month   day of week  user        commond
        *       *       *       *       *           user        commond             //每分钟执行一次
        0       2       *       *       *           ubuntu      /home/xxx.sh        //每天的凌晨2点执行一次
       *表示每一分钟,执行一次
       15表示第15分钟,执行一次
       0表示第0分钟,执行一次
       16-18,20表示第16~18分钟和20分钟,各执行一次。总共执行三次

    6.注意事项
        a.修改nginx/logs/flume文件夹权限为777
           flume可以重命名flume下的文件。
           $>chmod 777 /soft/nginx/logs/flume

        b.权限问题
           crontab文件配置是针对root.
           nginx/logs文件夹以及以下是777权限.(递归)



























猜你喜欢

转载自blog.csdn.net/xcvbxv01/article/details/84426392
今日推荐