yeskery

CentOS 下 Nginx + Tomcat 配置负载均衡及升级

为什么要做负载均衡?

当你网站是一个企业站、个人博客的时候,或者访问量比较小的时候,一台服务器完全应付的了,那就完全没必要做负载均衡。但是,如果你的网站是平台级别,用户至少百万级别了,一台服务器明显撑不住了,那就要考虑多台服务器,这个时候每个服务器分配多少用户,负载均衡是最好的解决方式。举个大的不是很恰当的栗子:淘宝网。

对于互联网服务,负载平衡器通常是一个软体程序,这个程序侦听一个外部端口,互联网用户可以通过这个端口来访问服务,而作为负载平衡器的软体会将用户的请求转发给后台内网服务器,内网服务器将请求的响应返回给负载平衡器,负载平衡器再将响应发送到用户,这样就向互联网用户隐藏了内网结构,阻止了用户直接访问后台(内网)服务器,使得服务器更加安全,可以阻止对核心网络栈和运行在其它端口服务的攻击。

当所有后台服务器出现故障时,有些负载平衡器会提供一些特殊的功能来处理这种情况。例如转发请求到一个备用的负载平衡器、显示一条关于服务中断的消息等。负载平衡器使得IT团队可以显著提高容错能力。它可以自动提供大量的容量以处理任何应用程序流量的增加或减少。(摘自维基百科)

怎么做?

这里我们用 Nginx 做负载均衡,nginx 是一款面向性能设计的 HTTP ,稳定性高的反向代理服务器,可以做负载均衡和 HTTP缓存。

vi /usr/local/nginx/conf/nginx.conf

  1. upstream mysite {
  2. server 192.168.198.128:8080;
  3. server 192.168.198.128:8090;
  4. }
  5. server {
  6. listen 80;
  7. server_name localhost;
  8. #charset koi8-r;
  9. #access_log logs/host.access.log main;
  10. location / {
  11. root html;
  12. index index.html index.htm;
  13. proxy_pass http://mysite;
  14. }

上边的 192.168.198.128:8080192.168.198.128:8090 对应的两个不同的网站页面,这里我只是在两个不同的 Tomcat 下放了两个静态页面,在浏览器输入 192.168.198.128 刷新,你会看到在这两个 Tomcat 之间一替一次切换请求。

nginx_tomcat_1

刷新:

nginx_tomcat_2

不同服务器分配不同的数量的用户

这样 nginx 也是支持的,只需要配置 upstream 节点不同服务器的权重就好了。我这里按 1:3 进行的演示配置。

  1. upstream mysite {
  2. server 192.168.198.128:8080 weight=1;
  3. server 192.168.198.128:8090 weight=3;
  4. }
  5. server {
  6. listen 80;
  7. server_name localhost;
  8. #charset koi8-r;
  9. #access_log logs/host.access.log main;
  10. location / {
  11. root html;
  12. index index.html index.htm;
  13. proxy_pass http://mysite;
  14. }

你听过「灾备」、「异地多活」、「双机热备」这些词么

大家都知道「不能把鸡蛋放在一个篮子里」,在我们开发中依然是如此,如果是稍微对系统数据及运行状态有要求的项目,千万可不能突然系统挂掉几分钟,这带来的后果是不可想象的。所以,在我们开发中就会有「灾备」这个词,我们要考虑到这些不可预防的事件发生,所以,往往我们会把系统部署到多台服务器上面,这就是「鸡蛋」的例子,也就是所谓的「双机热备」,以保证我们系统的高可用,当一个服务器挂掉,后边的这个完全有能力顶上去!

在上面的文章中我们已经配置了两台服务器实现负载均衡,并且可以自定义权重,其实这个时候 Nginx 是支持你去更新其中一个服务器的时候,它监测到这个服务器挂掉了,它把请求都转发到另一台服务器的。但是,我在翻看 Nginx 的 upstream 配置的时候发现有种更好的方式,就是配置备份服务器。

backup 是什么鬼

当然是备份的意思了。看到官网的配置(http://nginx.org/en/docs/http/ngx_http_upstream_module.html)是这个样子的:

nginx_tomcat_3

backup : marks the server as a backup server. It will be passed requests when the primary servers are unavailable.(标记为备用服务器。当主服务器不可用以后,请求会被传给这些服务器。)

这意思就是,只有当你的服务器挂掉的时候才会使用备份服务器,正常情况下不会访问到备份服务器,那好,我来测试一下,还记得我们上一篇负载均衡的配置么,我增加一个 Tomcat服务器3,然后,里边网页输出 这是网站3333333333

  1. upstream backend {
  2. server 192.168.198.128:8080 weight=1;
  3. server 192.168.198.128:8090 weight=4;
  4. server 192.168.198.128:8091 backup;
  5. }
  6. server {
  7. listen 80;
  8. server_name localhost;
  9. #charset koi8-r;
  10. #access_log logs/host.access.log main;
  11. location / {
  12. root html;
  13. index index.html index.htm;
  14. proxy_pass http://backend;
  15. }

我这里先做一个必要的小说明:

  • 192.168.198.128:8080 服务器下面会称为 服务器1 ,每五次请求会到这里一次;
  • 192.168.198.128:8090 服务器下面会称为 服务器2 ,每五次请求会到这里四次;
  • 192.168.198.128:8091 服务器下面会称为 服务器3 ,即备份服务器。

这个时候 服务器1服务器2服务器3 都正常启动,我刷新页面,会按照权重规则请求 服务器1服务器2,并不会请求 服务器3(备份服务器)

nginx_tomcat_4

接下来我把 服务器1 停掉,服务器2服务器3 都正常启动,我刷新页面,这个时候所有请求都是 服务器2,也并不会请求 服务器3(备份服务器)

nginx_tomcat_5

接下来我把 服务器1服务器2 都停掉,服务器3 正常启动,我刷新页面,所有请求都转发到 服务器3(备份服务器),看图片:

nginx_tomcat_6

我再次依次启动 服务器1服务器2,所有请求都又按照权重规则分配了。在你所有正常服务器都挂掉时,系统依然高可用,这就是备份服务器的用处!

总结:无痛更新

配置完备份服务器后,你再也不用再凌晨时分爬起床去更新服务器了,你想什么时间更新就什么时间更新,爱谁谁!真的可以做到无痛、无痛、无痛,不断网重启服务器。

本文内容来自:

  1. http://blog.mayongfa.cn/84.html
  2. https://blog.csdn.net/qq_38377190/article/details/80269296

评论

发表评论 点击刷新验证码

提示

该功能暂未开放