nginx+tomcat负载均衡配置+python自动化部署脚本

nginx+tomcat负载均衡配置

1、网络拓扑

    nginx+tomcat负载均衡配置+python自动化部署脚本_第1张图片

 

2、nginx安装配置

1.安装nginx服务器,实现OSI网络模型第七层(应用层)负载均衡及反向代理:      

安装nginx 1.6.1 stable version,  stable version版本为稳定版,为RHEL/CentOS设置yum安装源,从以下列表选择相应的nginx更新包:

 

  • RHEL 5
  • RHEL 6
  • RHEL 7
  • CentOS 5
  • CentOS 6
  • CentOS 7

此包包含yum配置文件和一个公共的PGP密钥必须验证签下。下载并安装它,然后运行下面:

#yum install nginx

 

 

2.nginx配置负载均衡与反向代理

Nginx配置文件/etc/nginx/nginx.conf及参数含义如下:

#进程以nginx用户启动

user nginx ;

#cpu核心数或者2倍核心数

worker_processes 2;

error_log  /var/log/nginx/error.log warn;

pid        /var/run/nginx.pid;

#最大文件描述符

worker_rlimit_nofile 51200;

events

{    #epoll为linux内核提供的网络IO模型

     use epoll;

     #允许最大连接数

 worker_connections 51200;

}

http

{

     include       mime.types;

     default_type application/octet-stream;

     keepalive_timeout 60;

     tcp_nodelay on;

     sendfile on;

     server_names_hash_bucket_size 128;

     client_header_buffer_size 32k;

     large_client_header_buffers 4 32k;

     client_max_body_size 300m;

 

     gzip on;

     gzip_min_length  1k;

     gzip_buffers     4 16k;

     gzip_http_version 1.1;

     gzip_comp_level 2;

     gzip_types       text/plainapplication/x-javascript text/css application/xml;

     gzip_vary on;

     proxy_connect_timeout    5;

     proxy_read_timeout       60;

     proxy_send_timeout       5;

     proxy_buffer_size        16k;

     proxy_buffers            4 64k;

     proxy_busy_buffers_size 128k;

     proxy_temp_file_write_size 128k;

     #指定负载均衡名称tekview33,任意指定

upstream tekview33

     {

           #对IP地址进行hash算法,保证客户端能访问固定IP,从而避免session问题,此方法适用于tomcat资源在单一网关内。高并发下访问下,ip_hash无法保证对固定IP发出请求,可以通过memcache软件来保证session同步问题

ip_hash;

     #指定代理tomcat服务器IP及端口

server  192.168.0.30:8080;

     server  192.168.0.35:8080;

     server  192.168.0.39:8080;

     }

 

     #注:proxy_temp_path和proxy_cache_path指定的路径必须在同一分区,且/root/proxy_temp_dir目录存在

     proxy_temp_path /root/proxy_temp_dir;

     #设置Web缓存区名称为cache_one,内存缓存空间大小为50MB,1天没有被访问的内容自动清除,硬盘缓存空间大小为10GB

     proxy_cache_path /root/proxy_cache_dir levels=1:2keys_zone=cache_one:50m inactive=1d max_size=10g;

server

    {   #nginx访问端口

        listen      8889;

        server_name  tekview33; 

        #自动补全"/"

        if (-d $request_filename)

       {

        rewrite ^/(.*)([^/])$ http://$host/$1$2/ last;

        }

      

 

 #实现网页动静态分离

        location /

       {

         root /root/apache-tomcat-7.0.55/webapps/bankriskcontrol

         index index.html index.htm;

                         if (!-f$request_filename)

                        {

                         rewrite^/([a-zA-Z]+).html  /$1.jsp last;

                         proxy_passhttp://tomcat;

                         break;

                         }

           }

       #对网站的图片、Flash、JavaScript、CSS、静态HTML、进行web缓存

       location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css|html|shtml)$

      {

      #如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到 upstream负载均衡池中的另一台服务器,实现故障转移。

      proxy_next_upstream http_502 http_504 error timeout invalid_header;

      proxy_cache cache_one;

      #对不同的HTTP状态码设置不同的缓存时间

      proxy_cache_valid 200 10m;

      proxy_cache_valid 304 1m;

      proxy_cache_valid 301 302 1h;

      proxy_cache_valid any 1m;

     #以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希,存储缓存  内容到二级缓存目录内

     proxy_cache_key $host$uri$is_args$args;

     proxy_set_header Host  $host;

     proxy_set_header X-Forwarded-For $remote_addr;

     proxy_pass http://tekview33; 

    }

 

#扩展名以.php、.jsp、.cgi结尾的动态应用程序不缓存。

 location ~ .*\.(php|jsp|cgi)?$

 {

 proxy_set_header Host $host;

 proxy_set_header X-Forwarded-For $remote_addr;

 proxy_pass http://tekview33;

 }

 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$

 {

 expires     30d;

 }

 location ~ .*\.(js|css)?$

 {

 expires     1h;

 } 

      }

}

 

 

(3)、启动nginx服务,先测试nginx配置文件是否正确

      #nginx -t

 

如果提示如下:

nginx: theconfiguration file /etc/nginx/nginx.conf syntax is ok

nginx:configuration file /etc/nginx/nginx.conf test is successful

 

就说明配置文件没有问题可以启动nginx服务器了:

    [root@testing1-centos64-x64-tekview /]#service nginx start

正在启动 nginx:[确定]    

如果启动报错,你可以根据报错提示修改配置文件

 

3、tomcat的配置

(1)、安装jdk

        #cd /usr/local/src;chmod+xjdk-6u17-linux-i586.bin;./jdk-6u17-linux-i586.bin

        在安装过程中敲几下空格,然后输入"yes",然后中途中再按回车jdk就装好了。

       做软连接:

        ln -s /usr/local/jdk1.6.0_17/ /usr/local/jdk

    

(2)、java环境变量的配置

        #vi /etc/profile,把以下内容写到文件的尾部

      

         JAVA_HOME="/usr/local/jdk"

        CLASS_PATH="$JAVA_HOME/lib:$JAVA_HOME/jre/lib"

        PATH=".:$PATH:$JAVA_HOME/bin"

        CATALINA_HOME="/usr/local/tomcat"

        export JAVA_HOME CATALINA_HOME

 

 然后保存退出,执行source /etc/profile 使刚才配置的环境变量生效。

 

 

(3)、部署war包

分别将war包部署到192.168.0.30、192.168.0.35、192.168.0.39主机tomcat应用的webapps目录

(4)、启动tomcat服务

启动192.168.0.30 、192.168.0.35、192.168.0.39主机的tomcat服务

#/root/apache-tomcat-7.0.55/bin/startup.sh

 

 

(4)、测试访问http://192.168.0.33/bankriskcontrol,如果页面可以正常访问,说明nginx的代理和tomcat的服务都没有问题。


4、自动化部署脚本


#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys, os
import subprocess
import re
import shlex
import time
filename = sys.argv[0]
ABSDIR = os.path.abspath(os.path.dirname(__file__))
DICT = {'192.168.0.30': '/home/apache-tomcat-7.0.55',
        '192.168.0.35': '/root/apache-tomcat-7.0.55',
        '192.168.0.39': '/root/apache-tomcat-7.0.55'
        }
# copytoserver执行远程拷贝,将sql文件拷贝至35的/root/test目录并执行、war文件拷贝至DICT字典所指定的目录,
def copytoserver():
    filelist = [i for i in os.listdir(ABSDIR) if i.endswith('sql') or i.endswith('war')]
    try:
        for s in filelist:
            if s.endswith('war'):
                for k, v in DICT.items():
                    print "\n\n拷贝%s到%s的%s/webapps/目录......"%(s,k,v)
		    command_line1 = ['ssh', 'root@'+k, 'rm -rf ', v+'/webapps'+'/bankriskcontrol' ]
                    command_line2 = ['scp', s, 'root@'+k+':'+v]
                    p1 = subprocess.Popen(command_line1)
                    p1.wait()
                    p2 = subprocess.Popen(command_line2)
                    p2.wait()
		    print "\n\n"
            else:
                print "\n\n拷贝%s到192.168.0.35的/root/test目录......"%s
		command_line3 = ['scp', s, '[email protected]:/root/test']
                p3 = subprocess.Popen(command_line3)
                p3.wait()
    except IOError, e:
        print e


#changeDB执行sql脚本
def changedb():
    sql = ['create_database.sql', 'init_database_data.sql', 'addtestdata.sql']
#    path = '/usr/local/mysql/bin/'
    try:
        print "\n\n创建数据库......\n\n"
	cmd1 = ['ssh', '[email protected]', 'mysql', '-uroot', '-p111111', '<', '/root/test/'+sql[0]]
	p1 = subprocess.Popen(cmd1)
        p1.wait()
	print "\n\n初始化数据库......\n\n"
	cmd2 = ['ssh', '[email protected]', 'mysql', '-uroot', '-p111111', '-Dbank_risk_control', '<', '/root/test/'+sql[1]]
        p2 = subprocess.Popen(cmd2)
        p2.wait()
	print "\n\n添加测试数据......\n\n"
	cmd3 = ['ssh', '[email protected]', 'mysql', '-uroot', '-p111111', '-Dbank_risk_control', '<', '/root/test/'+sql[2]]
        p3 = subprocess.Popen(cmd3)
        p3.wait()
	
    except IOError, e:
        print e


#管理远端tomcat服务器
def restart_tomcat():
    try:
        for k, v in DICT.items():
            command_line4 = ['ssh', 'root@'+k, v+'/bin/shutdown.sh']
            command_line5 = ['ssh', 'root@'+k, v+'/bin/startup.sh']
            print "\n\n%s的tomcat服务正在重启.........\n\n"%k
            p1 = subprocess.Popen(command_line4)
            p1.wait()
            p2 = subprocess.Popen(command_line5)
            p2.wait()
	    print "\n\n============================================="
    except IOError, e:
        print e

if __name__ == '__main__':
    print '\033[1;31;40m'
    print '*'*40, '\n'
    copytoserver()
    print '\033[1;31;40m'
    print '*'*40, '\n'
    changedb()
    print '\033[1;31;40m'
    print '*'*40, '\n'
    restart_tomcat()



 


你可能感兴趣的:(运维,python,linux)