Java集群:单体架构升级到集群架构(一)使用NGINX建立集群
创始人
2025-06-01 08:35:39
0

对于大厂的IT技术人员来说,微服务架构是天天都在使用,滚瓜烂熟了。而对小厂的菜鸟程序员来说,我们天天做的都是CRUD,对我们来说集群、分布式、微服务也只是头脑中一个模糊的概念。我们写的大多是单体架构的系统,运行在一台服务器上,如果用户量增加了,服务器撑不住了,我们就加配置吧,反正阿里云腾讯云现在加配置也很容易。但是如果有一天(希望所有菜鸟都有这么一天),我们的用户数增加太快太多,使用最高配置的服务器还是撑不住,对我们来说这算不算是幸福的烦恼?――幸福的是老板,烦恼的却是我们。

这种情况下,我们想到了使用微服务,于我们开始学习spring cloud alibaba,就是不知道在我们学会之前,我们的服务器要崩溃多少次,就怕老板一生气把我们杀了祭天。所以说临时抱佛脚是不行的,学习要趁早!那么这时候,什么才是比较快的解决方法呢?我想可能就是使用集群架构。集群架构学起来相对容易,代码修改量也会少一些。

今天我们首先来建一个简单的集群,如下图所示:

总共三台电脑,一台安装NGINX,两台安装TOMCAT。这两个TOMCAT运行我们的单体应用程序,NGINX接受浏览器发来的请求,再把请求轮流转发给其中一台TOMCAT处理。如果您不理解这段话,也没关系,咱们开始动手操作,做完之后,你就明白了。没有三台电脑的同学,可以用虚拟机。要么就在一台电脑上操作也行,这时两个IP都要改成127.0.0.1

GitHub:  GitHub - Dengxd/JavaCluster  所有源码都在这里,GitHub经常连不上,要多刷新几次

安装NGINX

因为所有程序员都会用WINDOWS,而有部分程序员不会用LINUX,所以我选择了WINDOWS7来安装。

NGINX下载地址:nginx: download

Stable version是稳定版,选择这个版本。下载下来是一个文件nginx-1.22.1.zip,解压之后,如下图所示:

打开文件夹conf里面的nginx.conf文件,找到这几行:

server {listen       80;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {root   html;index  index.html index.htm;}

改成这样:

upstream mytomcat {server 192.168.1.200:8000;server 192.168.1.201:8001;}server {listen       80;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {proxy_pass http://mytomcat;}

保存一下,NGINX就配置好了。

在这几行代码里

server 192.168.1.200:8000;

server 192.168.1.201:8001;

这两行就是我们两个TOMCAT的IP和端口,如果你要多加几个TOMCAT,直接多加几行就可以了。如果你没有三台电脑,只在一台电脑上操作,就把两个IP地址都改成127.0.0.1

注意事项:在生产环境,server_name  localhost; 这一行要把localhost改成您的域名

mytomcat其实就是给集群起个名字,可以按自己的习惯取名,这个名字会用在这一行:proxy_pass http://mytomcat;

改完之后要测试配置文件nginx.conf是否正确

使用nginx –t 命令进行测试:

如上图,出现“syntax is ok”,“test is successful”就说明测试成功,如果没出现这两行,就说明nginx.conf有错误,要修改错误直至测试成功。

写个简单的单体程序

这个程序使用Spring boot框架,这货自带了TOMCAT,省了不少麻烦。程序的功能是在网页上显示端口号,要么显示8000,要么显示8001

主要代码如下:

static String port;
public static void main(String[] args) throws Exception{SpringApplication app = new SpringApplication(MainApplication.class);Environment env = app.run(args).getEnvironment();port=env.getProperty("server.port");//获取端口号System.out.println(port);
}@RequestMapping("/")
@ResponseBody
public String test(HttpServletRequest request, HttpServletResponse response){return port;//返回端口号
}

main方法在启动程序的时候获取端口号,test方法在用户访问时返回端口号

在两台业务服务器上运行程序

我们把程序打包,复制到两台Tomcat业务服务器上。

IP为182.168.1.200那台服务器用命令:java -jar ShowPort-1.0-SNAPSHOT.jar  --server.port=8000 启动程序。然后在服务器上用浏览器访问:http://localhost:8000/  ,如果网页显示8000,就说明程序正常:

IP为182.168.1.201那台服务器用命令:java -jar ShowPort-1.0-SNAPSHOT.jar  --server.port=8001 启动程序。然后在服务器上用浏览器访问:http://localhost:8001/  ,如果网页显示8001,就说明程序正常。

在NGINX服务器上启动NGINX

使用命令nginx启动服务:

注意:如果您想停止NGINX,不能直接关掉这个CMD窗口。您得再开一个CMD窗口,然后用命令nginx -s stop才能能关闭NGINX:

在NGINX服务器上测试集群

现在我们在NGINX那台服务器上启动浏览器,输入网址:http://localhost/   ,

可以看到网页显示8001 :

我们在浏览器里多开几个标签页,就会看到有的显示8000,有的显示8001

这样,我们的集群就配置成功了。下回我们来实现session共享。

相关内容

热门资讯

千方科技:9.56亿募资变更用... 12月26日晚,千方科技(002373)公告,为把握AI与交通深度融合的战略机遇,公司拟将原项目“下...
新年,预期的差异 核心观点:1.谁知未来?既是新年伊始,又是“十五五”开局,自然增添对经济的憧憬。然而,期许未必是必然...
宝马网红销冠张增威回应试行“一... 红星资本局12月28日消息,近日,宝马网红销冠张增威在个人社交平台发布视频内容,称自己在宝马销售中尝...
振芯科技三项议案被否!控股股东... 微成都报道 继4月底年度股东大会之后,振芯科技(300101)控股股东与创始团队董事会矛盾再次上演。...
236.88%,公募基金年度收... 截至12月26日,公募主动权益基金年内最高收益达到236.88%,不仅锁定年度冠军位置,还刷新纪录,...
展出米芾作品遭质疑 江西省博物... 中新网12月28日电 据江西省博物馆微信公众号消息,江西省博物馆28日发布声明称,近日,有观众质疑江...
重塑银保产品逻辑,海保人寿鑫玺... 近日,海保人寿旗下创新产品“鑫玺越(鑫享版)终身寿险”凭借其在财富规划与终身保障领域的卓越表现,成功...
吉宏股份:股东西藏永悦诗超企业... 新京报贝壳财经讯 吉宏股份(02603)发布公告,公司于近日收到控股股东、实际控制人庄浩女士及其一致...
锚定全球唯一,核聚变寡头,接住... 可控核聚变的信号枪,正中西部超导靶心!11月12日,合肥物质院等离子体所密集发布了13个亿的氚工厂招...
老乡别慌,涨上天了 图: Jean Jullien 我两年前聊过一位朋友,在巴厘岛盖房子,租给外国人挣租金。 这两天周末...