Nginx系列教程(12) - HTTP动态负载均衡(二)

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: Nginx系列教程(12) - HTTP动态负载均衡(二)

在上一章《Nginx系列教程(11) - HTTP动态负载均衡(一)》我们了解到了负载均衡按静态和动态分为三种:

  • Consul+Consul-template 每次发现配置更改需要raload nginx,重启Nginx。
  • Consul+OpenResty 实现无需raload动态负载均衡
  • Consul+upsync+Nginx 实现无需raload动态负载均衡

并介绍了常用的服务注册于发现框架,并以Consul做了简单的安装与使用介绍。

动态负载均衡示意图如下:

本文我们主要来讲解三方应用nginx-upsync-module来实现动态负载均衡。

注意:如果按照本文操作,必须把之前Nginx的环境清除,重新安装 ! Nginx版本必须1.9以上。

1.nginx-upsync-module简介

Upsync是新浪微博开源的基于Nginx实现动态配置的三方模块。Nginx-Upsync-Module的功能是拉取Consul后端server的列表,并动态更新Nginx的路由信息。此模块不依赖于任何第三方模块。Consul作为Nginx的DB,利用Consul的KV服务,每个Nginx Work进程独立的去拉取各个upstream的配置,并更新各自的路由。

2.nginx-upsync-module安装

2.1 下载

1.下载Nginx (作用:实现反向代理、负载负载库)

wget http://nginx.org/download/nginx-1.9.10.tar.gz

2.下载Consul (作用:对动态负载均衡均配置实现注册)

wget https://releases.hashicorp.com/consul/0.7.1/consul_0.7.1_linux_amd64.zip

3.下载nginx-upsync-module (作用:nginx动态获取最新upstream信息)

wget https://github.com/weibocom/nginx-upsync-module/archive/master.zip

2.2 安装(按步骤执行)

2.2.1 步骤一:安装nginx-upsync-module

下载后,压缩包的名字叫master.zip

unzip master.zip

解压完成后会在当前目录生成一个文件夹:nginx-upsync-module-master,下面安装Nginx的时候会用到这个目录。

2.2.2 步骤二:安装Nginx:

首先解压:

tar -zxvf nginx-1.9.10.tar.gz

配置Nginx:

groupadd nginx
useradd -g nginx -s /sbin/nologin nginx
mkdir -p /var/tmp/nginx/client/
mkdir -p /usr/local/nginx

编译Nginx:(注意最后--add-module=../nginx-upsync-module-master,配的路径便是nginx-upsync-module解压的目录路径)

cd nginx-1.9.10
./configure   --prefix=/usr/local/nginx   --user=nginx   --group=nginx   --with-http_ssl_module   --with-http_flv_module   --with-http_stub_status_module   --with-http_gzip_static_module   --with-http_realip_module   --http-client-body-temp-path=/var/tmp/nginx/client/   --http-proxy-temp-path=/var/tmp/nginx/proxy/   --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/   --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi   --http-scgi-temp-path=/var/tmp/nginx/scgi   --with-pcre --add-module=../nginx-upsync-module-master
make && make install

编译如果报错:./configure: error: SSL modules require the OpenSSL library.

解决办法:

yum -y install openssl openssl-devel

2.安装Consul:

unzip master.zip
unzip consul_0.7.1_linux_amd64.zip

如果解压出现该错误:-bash: unzip: 未找到命令,解决办法:

yum -y install unzip

2.3 配置

2.3.1 Upstream动态配置
##动态去consul 获取注册的真实反向代理地址
upstream xxx{
     server 127.0.0.1:11111;
     upsync 192.168.162.130:8500/v1/kv/upstreams/xxx upsync_timeout=6m upsync_interval=500ms upsync_type=consul strong_dependency=off;
     upsync_dump_path /usr/local/nginx/conf/servers/servers_test.conf;
 }
 server {
     listen       80;
     server_name  localhost;
     location / {
         proxy_pass http://xxx;
         index  index.html index.htm;
     }
 }
  • upsync指令指定从consul哪个路径拉取上游服务器配置;
  • upsync_timeout配置从consul拉取上游服务器配置的超时时间;
  • upsync_interval配置从consul拉取上游服务器配置的间隔时间;
  • upsync_type指定使用consul配置服务器;
  • strong_dependency配置nginx在启动时是否强制依赖配置服务器,如果配置为on,则拉取配置失败时nginx启动同样失败。
  • upsync_dump_path指定从consul拉取的上游服务器后持久化到的位置,这样即使consul服务器出问题了,本地还有一个备份。

注意:替换 consul 注册中心地址

2.3.2 创建upsync_dump_path
mkdir /usr/local/nginx/conf/servers/

upsync_dump_path指定从consul拉取的上游服务器后持久化到的位置,这样即使consul服务器出问题了,本地还有一个备份。

2.4 启动

2.4.1 启动Consul

首先关闭防火墙,我的linux Ip地址192.168.162.130:

./consul agent -dev -ui -node=consul-dev -client=192.168.162.130
2.4.2 启动Nginx
./nginx

运行成功!

2.5 测试

两台tomcat服务器,端口分别是8081和8082,下面通过HTTP PUT的方式注册到Console Server。Nginx服务会检测到Upstream有改变,便会自动写入上游服务器列表。下面是注册的两种方式:

1. 使用linux命令方式发送put请求

curl -X PUT http://192.168.162.130:8500/v1/kv/upstreams/xxx/192.168.162.1:8081
curl -X PUThttp://192.168.162.130:8500/v1/kv/upstreams/xxx/192.168.162.1:8082

或使用postmen 发送put请求:

http://192.168.162.130:8500/v1/kv/upstreams/xxx/192.168.162.1:8081 
http://192.168.162.130:8500/v1/kv/upstreams/xxx/192.168.162.1:8082

postman请求如下:

两个服务已经注册上了

2.启动两台tomcat (8081和8082),如果不知道怎么启动多个tomcat,可以参考文章:《Linux配置多个Tomcat同时运行以及tomcat 的端口介绍》

/usr/local/tomcat8081/bin/startup.sh 
/usr/local/tomcat8082/bin/startup.sh

3.浏览器输入http://192.168.162.130/

刷新:

会发下8081和8082 tomat会轮询访问。

4.如果想让8081的权重大一些,比如要8081访问3次,8082才访问1次,如何设置呢?

答:可以在Consul控制台设置,先贴出标准格式:

{"weight":3, "max_fails":2, "fail_timeout":10, "down":0}

设置8081权重为3,点击UPDATE:

设置8082权重为1,点击UPDATE:

连续刷新页面,我们会发下tomcat8081出现3次,tomcat8082出现1次,轮流显现。

总结

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
29天前
|
缓存 应用服务中间件 网络安全
Nginx中配置HTTP2协议的方法
Nginx中配置HTTP2协议的方法
69 7
|
19天前
|
关系型数据库 MySQL Java
Servlet+MySQL增删改查 原文出自[易百教程] 转载请保留原文链接: https://www.yiibai.com/geek/1391
对于任何项目开发,创建,读取,更新和删除(CRUD)记录操作是应用程序的一个最重要部分。
56 20
|
15天前
|
安全 数据安全/隐私保护
IP地址https证书免费申请教程
本教程详细介绍如何免费申请IP地址HTTPS证书,涵盖准备、申请、审核、下载与部署阶段。从确认IP地址、选择CA、注册账户到验证控制权,最后完成证书部署,确保数据传输安全。注意证书有效期较短,需及时续签。
|
16天前
|
负载均衡 前端开发 应用服务中间件
负载均衡指南:Nginx与HAProxy的配置与优化
负载均衡指南:Nginx与HAProxy的配置与优化
39 3
|
1月前
|
安全 网络安全 数据安全/隐私保护
政务内网实现https访问教程
政务内网实现HTTPS访问需经过多个步骤:了解HTTPS原理,选择并申请适合的SSL证书,配置SSL证书至服务器,设置端口映射与访问控制,测试验证HTTPS访问功能,注意证书安全性和兼容性,定期备份与恢复。这些措施确保了数据传输的安全性,提升了政务服务的效率与安全性。
|
1月前
|
安全 网络安全 数据安全/隐私保护
内网IP地址实现HTTPS加密访问教程
在内网环境中,为确保数据传输的安全性,绑定SSL证书搭建HTTPS服务器至关重要。本文介绍了内网IP地址的前期准备、申请SSL证书的步骤以及客户端配置方法。具体包括选择合适的CA、注册账号、提交申请、下载证书,并在客户端导入根证书,确保通信数据的安全加密。推荐使用JoySSL提供的技术解决方案,确保内网设备通信安全。
内网IP地址实现HTTPS加密访问教程
|
5月前
|
JSON 网络协议 安全
《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(1)-HTTP和HTTPS基础知识
【7月更文挑战第16天】本文介绍了HTTP和HTTPS协议的基本概念与作用,强调了理解HTTP协议对使用抓包工具Fiddler的重要性。HTTP是用于Web浏览器与服务器间信息传输的协议,不加密,易被截取,不适合传输敏感信息。HTTPS是HTTP的安全版,通过SSL/TLS提供加密和服务器身份验证,确保数据安全。HTTP请求包括请求行、请求头、空行和可选的请求主体,响应则有响应行、响应头、空行和响应主体。HTTP协议无状态,而HTTPS解决了安全性问题,但也带来了额外的计算开销。Fiddler作为一个强大的抓包工具,可以帮助开发者和测试人员分析HTTP/HTTPS通信,理解请求和响应的结构。
86 4
《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(1)-HTTP和HTTPS基础知识
|
4月前
|
缓存 应用服务中间件 API
Nginx七层(应用层)反向代理:HTTP反向代理proxy_pass篇(三)
Nginx七层(应用层)反向代理:HTTP反向代理proxy_pass篇(三)
62 3
|
4月前
|
缓存 安全 应用服务中间件
Nginx七层(应用层)反向代理:HTTP反向代理proxy_pass篇(二)
Nginx七层(应用层)反向代理:HTTP反向代理proxy_pass篇(二)
111 1
|
4月前
|
运维 算法 应用服务中间件
运维系列.Nginx中使用HTTP压缩功能(一)
运维系列.Nginx中使用HTTP压缩功能(一)
81 1