linux下nginx和tomcat负载均衡配置

时间:2022-08-21 19:12:15

一、linux安装软件常用方法

1、rpm(pkg)安装,类似于windows安装程序,是预编译好的程序。

   a.使用的是通用参数编译,配置参数不是最佳。

   b.可控制性不强,比如对程序特定组件的定制性安装

   c.通常安装包间有复杂依赖关系,操作比较复杂

   d.安装简单,出错几率低。

2、yun(apt-get)安装,改良版的rpm,自动联网下载安装包,自动管理依赖关系

3、编译安装(方式在各类linux发行版中差异不大)

   a.可控性强,config时可根据当前系统环境优化参数,可定制组件及安装参数

   b.易出错,难度略高

 

二、linux下编译安装nginx

1.下载地址:

http://nginx.org/en/download.html

 

2.解压

tar -zxvf nginx-1.12.1.tar.gz

 

3.检查和安装依赖项

yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel

 

4.运行configure命令  (pre是指定安装目录)

./configure --pre=/home/szjz/nginx

 

5.make && make install

 

6.启动nginx

./home/szjz/nginx/sbin/nginx

 

7.查看nginx进程

ps aux|grep nginx

 

8.设置开机运行

CenterOS6CenterOS7是有区别的,这是个很大的坑!!!

 

1)在centerOS6下:

1) 首先,在linux系统的/etc/init.d/目录下创建nginx文件,使用如下命令:

vi /etc/init.d/nginx

 

在脚本中添加如下命令:

#!/bin/bash

# nginx Startup script for the Nginx HTTP Server

# it is v.0.0.2 version.

# chkconfig: - 85 15

# description: Nginx is a high-performance web and proxy server.

#       It has a lot of features, but it's not for everyone.

# processname: nginx

# pidfile: /usr/local/nginx/logs/nginx.pid

# config: /usr/local/nginx/conf/nginx.conf

nginxd=/home/szjz/nginx/sbin/nginx

nginx_config=/home/szjz/nginx/conf/nginx.conf

nginx_pid=/home/szjz/nginx/logs/nginx.pid

RETVAL=0

prog="nginx"

# Source function library.

. /etc/rc.d/init.d/functions

# Source networking configuration.

. /etc/sysconfig/network

# Check that networking is up.

[ "${NETWORKING}" = "no" ] && exit 0

[ -x $nginxd ] || exit 0

# Start nginx daemons functions.

start() {

if [ -e $nginx_pid ];then

  echo "nginx already running...."

  exit 1

fi

  echo -n $"Starting $prog: "

  daemon $nginxd -c ${nginx_config}

  RETVAL=$?

  echo

  [ $RETVAL = 0 ] && touch /var/lock/subsys/nginx

  return $RETVAL

}

# Stop nginx daemons functions.

stop() {

    echo -n $"Stopping $prog: "

    killproc $nginxd

    RETVAL=$?

    echo

    [ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /home/szjz/nginx/logs/nginx.pid

}

# reload nginx service functions.

reload() {

  echo -n $"Reloading $prog: "

  #kill -HUP `cat ${nginx_pid}`

  killproc $nginxd -HUP

  RETVAL=$?

  echo

}

# See how we were called.

case "$1" in

start)

    start

    ;;

stop)

    stop

    ;;

reload)

    reload

    ;;

restart)

    stop

    start

    ;;

status)

    status $prog

    RETVAL=$?

    ;;

*)

    echo $"Usage: $prog {start|stop|restart|reload|status|help}"

    exit 1

esac

exit $RETVAL

 

2) 保存脚本文件后设置文件的执行权限:

chmod a+x /etc/init.d/nginx

 

nginx服务加入chkconfig管理列表:

chkconfig --add /etc/init.d/nginx

 

再次查看
chkconfig --list
显示的情况应该是这样的
tomcat 0:off 1:off 2:off 3:off 4:off 5:off 6:off

 

然后chkconfignginx on设置开机启动
chkconfig --list
tomcat 0:off 1:off 2:on 3:on 4:on 5:on 6:off

这是后看到的情况变了,这时候就达到了开机就启动nginx服务了

 

 

2centerOS7以上:

centos 7以上是用Systemd进行系统初始化的,SystemdLinux系统中最新的初始化系统(init),它主要的设计目标是克服sysvinit 固有的缺点,提高系统的启动速度。关于Systemd的详情介绍在这里

Systemd服务文件以.service结尾,比如现在要建立nginx为开机启动,如果用yum install命令安装的,yum命令会自动创建nginx.service文件,直接用命令

设置开机启动即可。
在这里我是用源码编译安装的,所以要手动创建nginx.service服务文件。
开机没有登陆情况下就能运行的程序,存在系统服务(system)里,即:

/lib/systemd/system

 

具体步骤如下:

 

1)在系统服务目录里创建nginx.service文件

vi /lib/systemd/system/nginx.service

内容如下:

[Unit]

Description=nginx

After=network.target

  

[Service]

Type=forking

ExecStart=/home/szjz/nginx/sbin/nginx

ExecReload=/home/szjz/nginx/sbin/nginx -s reload

ExecStop=/home/szjz/nginx/sbin/nginx -s quit

PrivateTmp=true

  

[Install]

WantedBy=multi-user.target

 

2)设置开机启动

systemctl enable nginx.service

 

3)其他命令

启动nginx服务

systemctl start nginx.service

 

查看服务当前状态

systemctl status nginx.service

 

查看所有已启动的服务

systemctl list-units --type=service

9.其他nginx的命令

 

重启: ./nginx -s reload

关闭: ./nginx -s stop

强杀: kill -9 (nginx进程id)

三、安装jdk

1、下载jdk

2、解压

tar -zxvf  jdk-7u79-linux-x64.gz

3、设置环境变量

vi /etc/profile.d/java.sh  (每次linux启动时会去检查这个目录下的sh文件)

JAVA_HOME=/home/szjz/jdk1.7.0_79

PATH=$JAVA_HOME/bin:$PATH

export JAVA_HOME PATH

 

:wq!  保存

 

4.让环境变量生效

source /etc/profile (或者重启linux系统)

 

5.检验是否成功

echo $JAVA_HOME

java  -version

 

四、安装tomcat

1、下载

2、解压

tar -zxvf  apache-tomcat-7.0.68.tar.gz

3.启动tomcat

./bin/startup.sh

 

4.查看日志

logs/

cat catalina.out  (tail -f catalina.out)

 

5.其他操作

停止tomcat   ./bin/shutdown.sh

 

6.设置开机启动

 

centos的/etc/init.d/tomcat中配置如下

 

Vi /etc/init.d/tomcat
--------------tomcat 文件 START-------------------
#!/bin/bash
#
# tomcat startup script for the Tomcat server
#
# chkconfig: 345 80 20
# description: start the tomcat deamon
#
# Source function library
. /etc/rc.d/init.d/functions
prog=tomcat
#下面这句需要给成你自己的jdk路径(bin的上一层)
JAVA_HOME=/usr/java/jdk1.7.0_79
export JAVA_HOME
#下面这句需要给成你自己tomcat目录(bin的上一层)
CATALANA_HOME=/usr/local/yuzhilongx/apache-tomcat-7.0.62
export CATALINA_HOME
case "$1" in
start)
echo "Starting Tomcat..."
$CATALANA_HOME/bin/startup.sh
;;
stop)
echo "Stopping Tomcat..."
$CATALANA_HOME/bin/shutdown.sh
;;
restart)
echo "Stopping Tomcat..."
$CATALANA_HOME/bin/shutdown.sh
sleep 2
echo
echo "Starting Tomcat..."
$CATALANA_HOME/bin/startup.sh
;;
*)
echo "Usage: $prog {start|stop|restart}"
;;
esac
exit 0
--------------tomcat 文件 END-------------------

 

再把 tomcat 修改为可运行的文件
chmod a+x tomcat
查看服务器开机启动项情况查找tomcat的情况
chkconfig --list
如果没有找到tomcat项
使用chkconfig命令把 tomcat 命令加入到系统启动队列中: chkconfig --add tomcat
再次查看
chkconfig --list
显示的情况应该是这样的
tomcat 0:off 1:off 2:off 3:off 4:off 5:off 6:off
然后chkconfig tomcat on设置开机启动
chkconfig --list
tomcat 0:off 1:off 2:on 3:on 4:on 5:on 6:off

这是后看到的情况变了,这时候就达到了开机就启动tomcat服务了

 

 

 

7.访问tomcat

浏览器输入 http://192.168.7.103:8080

 

如何内网正常但 还不能访问的话,尝试关闭linux的防火墙

 

8.关闭防火墙

centerOS6

临时关闭:

service iptables  start/stop  

/etc/init.d/iptables stop  

出现三个OK,临时关闭成功!

 

永久关闭:

chkconfig iptables off

 

查看防火墙

命令: /etc/init.d/iptables status

关闭后查看状态,应该显示 firewall is not running

 

 

centerOS7

临时关闭防火墙 sudo systemctl stop firewalld.service

开机关闭防火墙 sudo systemctl disable firewalld.service

 

 

查看默认防火墙状态

firewall-cmd --state

关闭后显示notrunning,开启后显示running

 

 

 

 

五、负载均衡

1.先讲下nginx的反向代理:

Nginx作为反向代理服务器,实现负载均衡。首先浏览器发起请求,到达Nginx,由Nginx将请求地址转发给相应的tomcat服务器,再由tomcat服务器将结果返回给NginxNginx将结果再转发给浏览器。

在这过程中,对于浏览器来说,并不知道后端的存在, 相对于Tomact来说,当前的客户端是Nginx服务器。这就完成了一个代理的过程。

 

直接上nginx.conf

user  nobody;

worker_processes  1;

events {

    worker_connections  1024;

}

http {

    include mime.types;

    default_type application/octet-stream;

    server {

        listen       8090;

location / {

index index.html index.htm;

proxy_pass http://192.168.7.103:8080;

   }

    }

}

 

 

2.nginx的负载均衡:

按照第四个步骤安装了两台tomcat,分别是

192.168.0.103:8080

192.168.0.102:8081

 

直接上nginx.conf

 

user  nobody;

worker_processes  1;

events {

    worker_connections  1024;

}

http {

    include mime.types;

    default_type application/octet-stream;

    #均衡策略

    #none 轮询(权重由weight决定)

    #ip_hash

    #fair (需要安装第三方插件)

    #url_hash (需要安装第三方插件)

    upstream mytest{

# weight:权重,值越高负载越大

server 192.168.7.103:8080 weight=7;

 

# max_fails:达到指定次数认为服务器挂掉;

# fail_timeout:挂掉之后过多久再去测试是否已恢复

server 192.168.7.102:8081 weight=3 max_fails=2 fail_timeout=60s;  

    }

 

    server {

        listen       8090;

location / {

index index.html index.htm;

proxy_pass http://mytest;

   }

    }

}

 

 

 

最后验证:

 linux下nginx和tomcat负载均衡配置

linux下nginx和tomcat负载均衡配置

 

 

 

其他负载的策略类似。。。。