分布式锁系列3-使用nginx构建tomcat集群

nginx安装与配置

环境:在笔记本上的vmware中安装的centos7.6

nginx安装

使用root用户操作

1.安装yum-utils

yum install yum-utils

2.新建/etc/yum.repos.d/nginx.repo文件,内容如下

 

#vi /etc/yum.repos.d/nginx.repo
[root@localhost ~]# cat /etc/yum.repos.d/nginx.repo
[nx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key

3.配置mainline nginx

yum-config-manager --enable nginx-mainline

 4.安装nginx

yum install nginx

5.查看状态,重启nginx

service  nginx status  //查看nginx状态
service  nginx restart  //重启nginx

nginx配置

1.修改/etc/nginx/nginx.conf配置文件,负载两个tomcat

 

user  nginx;
worker_processes  1;

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


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/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  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;
    upstream nginxDemo {
    	server 192.168.64.1:8081;   #服务器地址1
    	server 192.168.64.1:8082;   #服务器地址2
    }
    server {
        listen 80;   #nginx端口

        location / {
            proxy_pass http://nginxDemo;
        }
    }
    include /etc/nginx/conf.d/*.conf;
}

2.重启nginx

systemctl nginx restart

3.打开浏览器,输入:http://192.168.10.151,报502 Bad Gateway

Nginx问题

问题

安装配置好nginx后,报502 Bad Gateway,如上图所示,查看/var/log/nginx/error.log,报错信息如下

2019/09/23 07:34:18 [crit] 7492#7492: *1 connect() to 192.168.64.1:8081 failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: , request: "GET / HTTP/1.1", upstream: "http://192.168.64.1:8081/", host: "127.0.0.1"
2019/09/23 07:34:18 [warn] 7492#7492: *1 upstream server temporarily disabled while connecting to upstream, client: 127.0.0.1, server: , request: "GET / HTTP/1.1", upstream: "http://192.168.64.1:8081/", host: "127.0.0.1"
2019/09/23 07:34:18 [crit] 7492#7492: *1 connect() to 192.168.64.1:8082 failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: , request: "GET / HTTP/1.1", upstream: "http://192.168.64.1:8082/", host: "127.0.0.1"
2019/09/23 07:34:18 [warn] 7492#7492: *1 upstream server temporarily disabled while connecting to upstream, client: 127.0.0.1, server: , request: "GET / HTTP/1.1", upstream: "http://192.168.64.1:8082/", host: "127.0.0.1"

解决问题:

网上查到是需要关闭SeLinux,以下两种解决方案

1.先执行以下命令,关闭

setsebool -P httpd_can_network_connect 1

2.修改配置文件,然后重启机器:

修改/etc/selinux/config 文件

将SELINUX=enforcing改为SELINUX=disabled

 

4.关闭SeLinux后,tomcat集群搭建完毕,测试调用http://192.168.10.151,发现库存有减少

jmeter压力测试

1.双击“jmeter.bat”,“Add”-"Threads"-"Thread Group",如下图所示

2.添加“HTTP Request”,如下图所示

 

3.配置并发线程数,200个请求

 

4.http request地址为:http://192.168.10.151/deduct_lock

 

5.配置完成后进行压力测试,经过nginx代理转发到两台tomcat,会出现重复扣减的值,导致库存超卖;synchronized锁为JVM锁,在分布式环境(多台应用服务器)下无法保持同步执行

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现nginxtomcat一起部署springboot项目并实现tomcat集群,需要进行以下步骤: 1. 部署springboot项目到tomcat上,并启动多个tomcat实例,这些实例需要在不同的端口上运行。 2. 配置nginx作为反向代理服务器,将所有请求转发到tomcat集群中的一个实例上。可以使用upstream模块来配置tomcat集群,如下所示: ```nginx http { upstream tomcat_cluster { server tomcat1_ip:tomcat1_port; server tomcat2_ip:tomcat2_port; server tomcat3_ip:tomcat3_port; } server { listen 80; server_name example.com; location / { proxy_pass http://tomcat_cluster; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } } ``` 在上面的配置中,tomcat_cluster是一个upstream实例,包含了所有tomcat实例的IP地址和端口号。nginx会将请求转发到tomcat_cluster中的一个实例上。 3. 配置session共享,以便在tomcat集群中的不同实例之间共享用户会话信息。可以使用memcached或redis等分布式缓存来实现session共享。 4. 配置负载均衡器,以便nginx可以根据不同的负载均衡算法来分配请求到不同的tomcat实例上。可以使用nginx自带的负载均衡模块或第三方模块,如nginx-upsync-module等。 5. 测试集群的可伸缩性和容错性,以确保tomcat集群可以在高负载和节点故障的情况下正常运行。 总结来说,要实现nginxtomcat一起部署springboot项目并实现tomcat集群,需要进行反向代理、session共享、负载均衡器等多方面的配置和测试。这样可以保证项目的高可用性和可伸缩性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值