固定链接 基于滴滴云DC2+Nginx搭建负载均衡方案

基于滴滴云DC2+Nginx搭建负载均衡方案

基于滴滴云DC2+Nginx搭建负载均衡方案

本文是滴滴云开源工具教程系列文章的一篇。

Nginx是一款轻量级、高性能的Web服务器,专为高流量应用场景而设计。

本文主要介绍它的健康检查和负载均衡机制。健康检查和负载均衡是相辅相成,健康检查能够及时标记出服务异常的后端RS,使得数据面负载到可用的RS上,提高系统的可靠性和高可用。

Nginx支持丰富的第三方模块,这里示例以ngx_http_upstream_round_robin(简称RR)做为负载均衡模块,以ngx_http_proxy_module(检查proxy)作为后端代理模块。

健康检查有两种方式:
1)ngx_http_proxy_module模块和ngx_http_upstream_module模块(这是Nginx自带模块)
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_next_upstream

2)nginx_upstream_check_module模块(淘宝技术团队开发)
https://github.com/yaoweibin/nginx_upstream_check_module

Nginx的upstream目前支持5种方式的负载算法:

  • 轮询(默认)
    每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除

  • weight
    指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况

  • ip_hash
    每个请求按访问ip的hash结果分配,每个访客固定访问一个后端服务器,可以解决session的问题

  • fair(第三方)
    按后端服务器的响应时间来分配请求,响应时间短的优先分配

  • url_hash(第三方)
    按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效

部署步骤:

1) 在滴滴云官网,可以申请多个DC2实例,节省费用:

2) 场景说明:

比如,这里示例四个滴滴云DC2实例分别为:10.255.10.12(Client)、10.255.44.122(Nginx Proxy)、10.255.15.111(RS1)、10.255.24.133(RS2),这里的滴滴云DC2实例需要处在同一个VPC即可,不必同一子网。

3) 配置Nginx负载均衡和健康检查功能:
通过yum install nginx就可以在DC2实例内安装Nginx服务,Nginx默认是以 conf/nginx.conf作为启动配置的,我们可以根据自己的需求在nginx.conf(默认路径是/etc/nginx/nginx.conf)中配置负载均衡和健康检查。

nginx.conf内容如下(Note:以下所有配置仅仅为测试所用,不代表线上环境真实所用,真正的线上环境需要更多配置和优化):

修改配置文件后,nginx -s reload平滑重启Nginx,即可生效。

4) ngx_http_upstream_check_module
该模块可以为Tengine提供主动式后端服务器健康检查的功能,该模块在Tengine-1.4.0版本以前没有默认开启,它可以在配置编译选项的时候开启:./configure –with-http_upstream_check_module

5) 通过curl http://localhost/status?format=json,查看健康检查状态:

小结:

滴滴云为用户提供了SLB,给用户提供了高可用和高可靠性的负载均衡产品,用户也可以自己选择使用Nginx搭建自定义的网络,Nginx提供了丰富的第三方模块,部署灵活,基于DC2+Nginx搭建负载均衡网络也是不错的选择。

您的留言将激励我们越做越好