如何保证服务高可用

252 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第17天,点击查看活动详情

场景

  • 以前开发一个程序很简单只需要实现功能就可以了。但是随着用户指数级别的增长我们不得不将单机服务升级为集群服务。升级的方式有很多中,为了节约成本我们可以选nginx的负载均衡策略。

nginx+lua

  • nginx我们之前都是拿他当作服务接口转发的工具来使用的实际上他有两个特点:方向代理+静态资源服务器管理
  • 安装也非常简答,下载后直接nginx 运行即可,这里不做多解释

服务代理

  • nginx的配置只要你看得懂json格式的数据那么基本就没啥问题了。我们只需要配置坚挺的端口和代理的路径,和实际转发的路径,基本配置这三个就可以完成一个路径的转发了。
 server {
        listen 8080;
        server_name localhost;
        location / {
            proxy_pass   http://127.0.0.1:8081;
            #root   html;
            #index index.html index.htm;
        }
    }
  • 就像上面的配置一样,我们将本地的8081端口代理到了8080端口。代理远程端口只需要修改独赢的IP就行了。

静态资源代理

  • 上面我们说了除了服务代理之外。nginx还可以作为静态资源服务器使用。
 server{
        listen 90;
        server_name localhost;
        location / {
            root H:\xinguan\threeYear;
            index index.html;
        }
    }
  • 同样是使用了HTTP下的SERVER 。 这段代码表示将本地H:\xinguan\threeYear这个文件夹作为本地90端口的入口。我们通过localhost:90/index.html就能访问到本地的H:\xinguan\threeYear\index.html文件了。

负载均衡

  • 负载均衡就是我们目前采用的解压的一种策略。我们通过配置一个集群,然后设置我们的负载策略,比如通过IP负载,或者随机负载的方式,分摊服务器的压力
 upstream redis {
            hash $remote_addr consistent;
            # $binary_remote_addr;
            server 127.0.0.1:6379 weight=5 max_fails=3 fail_timeout=30s;
 server 127.0.0.1:6379 weight=1 max_fails=3 fail_timeout=30s;
        }
        server {
            listen 6379;#redis服务器监听端口
            proxy_connect_timeout 10s;
            proxy_timeout 300s;#设置客户端和代理服务之间的超时时间,如果5分钟内没操作将自动断开。
            proxy_pass redis;
        }
  • 有的时候我们服务并不仅仅是单节点服务。如果是分布式的话我们需要对服务进行负载均衡策略。这个时候我们就无法仅仅代理服务了。需要我们添加负载策略。我们通过upstream 来定义服务,并对服务进行策略定义。最后我们在server中直接时候用upstream的服务名就可以了。其中的weight就是对集群中服务轮询的权重设置。