nginx与tomcat负载均衡

背景:四台机器(防火墙关闭)
kvm1:nginx代理
kvm2:tomcat多实例,放动态网页
kvm3:nginx配置多个虚拟主机,放静态网页
chen:客户端,用于访问测试,已经做好域名解析。
一、做tomcat多实例
1.1、三个实例的规划
实例一:工作端口 8081 (相当于原本的8080) 实例本身端口 8091(相当于8005)
网页位置 :/webapps1/ROOT/index.jsp
实例目录:/usr/local/tomcat/instance1
实例二:工作端口 8082 (相当于原本的8080) 实例本身端口 8092(相当于8005)
网页位置 :/webapps2/ROOT/index.jsp
实例目录:/usr/local/tomcat/instance2
实例三:工作端口 8083 (相当于原本的8080) 实例本身端口 8093(相当于8005)
网页位置 :/webapps3/ROOT/index.jsp
实例所在目录:/usr/local/tomcat/instance3
1.2、准备网页如下

[root@kvm2 ~]# cat /webapps1/ROOT/index.jsp
webapp1
[root@kvm2 ~]# cat /webapps2/ROOT/index.jsp
webapp2
[root@kvm2 ~]# cat /webapps3/ROOT/index.jsp
webapp3

1.3、分别修改各实例配置
在各配置文件目录下创建新目录:logs,temp,conf,work
创建后如下(此时):

[root@kvm2 tomcat]#mkdir instance1/{temp,conf,logs,work}
[root@kvm2 tomcat]#mkdir instance2/{temp,conf,logs,work}
[root@kvm2 tomcat]# mkdir instance3/{temp,conf,logs,work}

[root@kvm2 instance1]# ls /usr/local/tomcat/instance1
conf   logs  temp  work
[root@kvm2 instance1]# ls /usr/local/tomcat/instance2
conf   logs  temp  work
[root@kvm2 instance1]# ls /usr/local/tomcat/instance3
conf  logs  temp  webapps3  work

找到tomcat原本的配置文件分别放到个实例里并修改

[root@kvm2 ~ ]#cp /usr/local/tomcat/conf/* /usr/local/tomcat/instance1/conf/ -r
[root@kvm2 ~]#vim /usr/local/tomcat/instance1/conf/server.xml
<Server port="8091" shutdown="SHUTDOWN">
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Host name="localhost" appBase="/webapps1"
unpackWARs="true" autoDeploy="true">
#按规划修改Server port,Connector port和appBase
#实例二和实例三也照此修改

1.4、分别在各实例目录下给实例写启动脚本

#实例一的启动脚本
[root@kvm2 instance1]# cat ins1.sh 
#!/bin/bash
#instace1 script
export JAVA_OPTS='-Xms64m -Xmx128m'
#tomcat实例启动时最小分配的内存为64M,最大为128M
export CATALINA_HOME=/usr/local/tomcat
#tomcat的安装目录
export CATALINA_BASE=/usr/local/tomcat/instance1
#实例1的目录
case $1 in
start)
$CATALINA_HOME/bin/startup.sh
;;
stop)
$CATALINA_HOME/bin/shutdown.sh
;;
restart)
$CATALINA_HOME/bin/shutdown.sh
sleep 3
$CATALINA_HOME/bin/startup.sh
;;
esac
#实例二、三的脚本与一相同,照情况修改CATALINA_BASE(实例目录)即可。

给脚本执行权限

[root@kvm2 ~]#chmod +x /usr/local/tomcat/instance1/ins1.sh 
[root@kvm2 ~]#chmod +x /usr/local/tomcat/instance2/ins2.sh
[root@kvm2 ~]#chmod +x /usr/local/tomcat/instance3/ins3.sh 
[root@kvm2 ~]#/usr/local/tomcat/instance1/ins1.sh start
[root@kvm2 ~]#/usr/local/tomcat/instance2/ins2.sh start
[root@kvm2 ~]#/usr/local/tomcat/instance3/ins3.sh start
#查看启动情况
[root@kvm2 ~]#ss -antp | grep java | grep :80
[root@kvm2 ~]#ss -antp | grep java | grep :80
[root@kvm2 ~]# ss -antp | grep java | grep :80
LISTEN     0      100         :::8009                    :::*                   users:(("java",pid=25264,fd=55))
LISTEN     0      100         :::8080                    :::*                   users:(("java",pid=25264,fd=50))
LISTEN     0      100         :::8081                    :::*                   users:(("java",pid=26321,fd=50))
LISTEN     0      100         :::8082                    :::*                   users:(("java",pid=26278,fd=50))
LISTEN     0      100         :::8083                    :::*                   users:(("java",pid=26426,fd=50))
LISTEN     0      100         :::8085                    :::*                   users:(("java",pid=26071,fd=50))
#可以看到8081,8082,8083端口都已经启动,表示成功。
客户端测试:
[root@chen ~]# links --dump http://kvm2:8081
   webapp1
[root@chen ~]# links --dump http://kvm2:8082
   webapp2
[root@chen ~]# links --dump http://kvm2:8083
   webapp3
  #tomcat多实例成功

二、部署nginx虚拟主机(二进制nginx)
#如果使用httpd做html,本次实验中,需要要在httpd配置文件里监听非80端口
共部署三台,访问端口分别是9091,9092,9093
2.1、准备虚拟主机网页,内容如下

[root@kvm3 ~]# cat /web1/html/index.html 
html1
[root@kvm3 ~]# cat /web2/html/index.html 
html2
[root@kvm3 ~]# cat /web3/html/index.html 
html3

2.2、在/etc/nginx/conf.d/目录下配置虚拟主机

[root@kvm3 ~]# cat /etc/nginx/conf.d/web1.conf 
server {
    listen       9001;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /web1/html;
        index  index.html index.htm;
    }
}
[root@kvm3 ~]# cat /etc/nginx/conf.d/web2.conf 
server {
    listen       9002;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /web2/html;
        index  index.html index.htm;
    }
}
[root@kvm3 ~]# cat /etc/nginx/conf.d/web3.conf 
server {
    listen       9003;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /web3/html;
        index  index.html index.htm;
    }
}
#重新加载配置文件使虚拟主机生效
[root@kvm3 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@kvm3 ~]# nginx -s reload

客户端测试:

[root@chen ~]# links --dump http://kvm3:9001
   html1
[root@chen ~]# links --dump http://kvm3:9002
   html2
[root@chen ~]# links --dump http://kvm3:9003
   html3

三、配置nginx代理

#修改配置文件
[root@kvm1 ~]# vim /etc/nginx/nginx.conf 
#在http里设置upstream
upstream httpdsrv {
server 192.168.122.185:9001 weight=1 max_fails=2;
server 192.168.122.185:9002 weight=1 max_fails=2;
server 192.168.122.185:9003 weight=1 max_fails=2;
}
# kvm3的ip:192.168.122.185
  kvm2的ip:192.168.122.56
upstream tomcatsrv {
server 192.168.122.56:8081 weight=1 max_fails=2;
server 192.168.122.56:8082 weight=1 max_fails=2;
server 192.168.122.56:8083 weight=1 max_fails=2;
}
#在/etc/nginx/conf.d/default.conf中配置代理,主要修改如下
[root@kvm1 ~]# vim /etc/nginx/conf.d/default.conf
  location / {
        root /usr/share/nginx/html;
        index index.html;
 }

  location ~* \.html$ {
     proxy_pass http://httpdsrv;
     proxy_set_header x-real-ip $remote_addr;
}

    location ~* \.jsp$ {
       proxy_pass http://tomcatsrv;
       proxy_redirect off;
       proxy_set_header Host $host;
       proxy_set_header x-real-ip $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      #proxy_set_header X-Forwarded-Proto $schema;
   }
[root@kvm1 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@kvm1 ~]# nginx -s reload

客户端访问测试:

[root@chen ~]# links --dump http://kvm1/index.html
   html1
[root@chen ~]# links --dump http://kvm1/index.html
   html2
[root@chen ~]# links --dump http://kvm1/index.html
   html3
[root@chen ~]# links --dump http://kvm1/index.jsp
   webapp1
[root@chen ~]# links --dump http://kvm1/index.jsp
   webapp2
[root@chen ~]# links --dump http://kvm1/index.jsp
   webapp3

默认的调度算法是rr,如果想要访问同一个网页,可用ip_hash

[root@kvm1 ~]# vim /etc/nginx/nginx.conf 
upstream httpdsrv {
ip_hash;
server 192.168.122.185:9001 weight=1 max_fails=2;
server 192.168.122.185:9002 weight=1 max_fails=2;
server 192.168.122.185:9003 weight=1 max_fails=2;
}
[root@kvm1 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@kvm1 ~]# nginx -s reload
#客户端测试
[root@chen ~]# links --dump http://kvm1/index.html
   html3
[root@chen ~]# links --dump http://kvm1/index.html
   html3
[root@chen ~]# links --dump http://kvm1/index.html
   html3

猜你喜欢

转载自blog.csdn.net/weixin_42275939/article/details/82973009