nginx负载均衡高怎么用(Nginx + consul + upsync 完成动态负载均衡的方法详解)
nginx负载均衡高怎么用
Nginx + consul + upsync 完成动态负载均衡的方法详解目录
- 前置知识
- DNS域名解析过程
- 外网映射
- nginx 核心知识
- 什么是nginx
- 应用场景
- 名词解释
- Nginx + consul + upsync 完成动态负载均衡
DNS域名解析过程
- 在浏览器输入域名,访问后
- 在浏览器缓存中查找是否有对应的ip和端口,如果有直接访问对应ip和端口
- 浏览器缓存中没有则在本地host文件中查找是否有对应的~~
- 本地host文件中没有则去DSN服务器上查找
外网映射
顾名思义,就是将本地的ip地址,映射出一个公网ip,可以供所有主机(连接到互联网的计算机)访问
- 疑问:为什么需要使用外网映射
例如做微信支付时的第三方接口回调,微信回调你的接口必须是一个公网ip地址,不然他根本无法给你回调,导致你本地无法测试。这个时候你就需要外网映射来将自己的ip地址映射成一个公网(可供主机访问的网络)
- 疑问:如何实现外网映射?
通过第三方工具完成外网映射,例如natapp,ngrok,具体如何使用自行进入官网观看,
ngrok官网.
natapp官网.(推荐)
nginx 核心知识
什么是nginx
nginx是一款轻量级的web服务器/反向代理服务器,很小并且支持非常高的并发量
应用场景
http服务器 :做静态服务器、图片服务器
虚拟主机配置 :将一台服务器、拆分成多个网站部署。(可以通过配置不同的域名映射或者不同的端口来完成虚拟主机的配置)
反向代理: 使用反向代理隐藏真实ip地址
反向代理应用场景:
你有3台服务器分别提供不同的服务,这个时候使用nginx来配置通过域名映射来完成不同三台服务器的访问,或者通过端口也可以。可以隐藏3台提供服务器的真实ip地址,nginx通过内部转发到不同的服务器,抓包工具也只能获取到nginx服务器的ip地址(没有基点)。
负载均衡
安全配置
使用Nginx搭建API接口网关,解决网站跨域问题
实现网站静态资源和动态资源分离
实现防止DDOS(流量攻击)
名词解释
四层负载均衡
运行在运输层,常使用TCP协议
七层负载均衡
运行在应用层,常使用Http协议
负载均衡
作用: 能够减轻单台服务器的压力,故障转移(重试机制)如果一台服务器宕机了,直接轮询到下一台服务器、健康检查,在nginx中使用upstream配置上游服务器,nginx中
故障转移
如果访问其中一台服务器,发现服务宕机了,或者有延迟,可以配置故障转移直接切换到另一台服务器
### 连接到上游服务器的时间 proxy_connect_timeout 1s; ### 发送请求超时时间 proxy_send_timeout 1s; ### 接受相应超时时间 proxy_read_timeout 1s;
动态负载均衡
在upstream中的配置不再是静态的,而是在注册中心上动态拉取配置,达到动态负载均衡的功能。
Nginx + consul + upsync 完成动态负载均衡
1、安装centos7的基础环境
# 基础命令 # 安装netstat命令 yum install netstat # 查看所有tcp端口使用情况 netstat -ntlp # 查看当前服务进程 ps -ef 可选:[ | grep nginx] # 强制杀死端口对应的程序 kill -9 pid进程号 # 配置yum源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum update yum install -y yum-utils device-mapper-persistent-data lvm2 # 安装基本环境 yum install gcc-c++ yum install -y pcre pcre-devel yum install -y zlib zlib-devel yum install -y openssl openssl-devel yum install wget yum install unzip
2、安装consul (服务注册与发现)
# 下载它的安装包,wget -c 中的 -c 表示断点续传 wget -c https://releases.hashicorp.com/consul/1.8.5/consul_1.8.5_linux_amd64.zip # 解压压缩包 upzip unzip consul_1.8.5_linux_amd64.zip # 执行./consul命令,执行后出现 Usage: consul [--version] [--help] <command> [<args>] 这一行以及下面的一些参数则代表这个consul没问题 ./consul # 关闭防火墙 systemctl stop firewalld # 启动consul,这个ip填写自己计算机的ip,如果是虚拟机就填虚拟机的ip,centos查看ip地址可以用ip addr,window查看ip用 ipconfig ./consul agent -dev -ui -node=consul-dev -client=192.168.254.134 # 当然,也可以使用后台运行的方式,这样子输出的日志回到同级的nohup.out文件中 nohup ./consul agent -dev -ui -node=consul-dev -client=192.168.254.134 & # 访问consul 的web页面 192.168.254.134:8500 # 查看并关闭consul的后台进程,我这里写的19854是jobs -l查询到的进程pid jobs -l kill -9 19854
3、安装nginx 并且为其添加upsync模块
# 下载upsync模块并且将其解压 wget -c https://github.com/weibocom/nginx-upsync-module/archive/master.zip unzip nginx-upsync-module-master.zip # 下载nginx wget -c http://nginx.org/download/nginx-1.9.9.tar.gz # 解压到当前目录 tar -zxvf nginx-1.9.9.tar.gz # 配置一个nginx的用户以及用户组,-s /sbin/nologin nginx代表该用户是无法登录到主机的 groupadd nginx useradd -g nginx -s /sbin/nologin nginx # 这两个文件夹会在编译nginx时指定 mkdir -p /var/tmp/nginx/client/ mkdir -p /usr/local/nginx # 进入到nginx的解压后文件夹的目录下 cd nginx-1.9.9 # 编译 nginx ,--prefix 代表nginx安装的目录。其中指定了用户和用户组,以及上面创建的文件夹并且添加了upsync模块,由于upsync解压在nginx同级目录下,所以这里使用..来指定到它 ./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 ## 进入到刚刚nginx安装的目录,也就是/usr/local/nginx目录中,进入conf目录中编辑conf目录的文件内容 upstream myserver { server 127.0.0.1:11111;# 这个固定的,不用理 # springbootserver : key的值,upsync_timeout 超时时间3秒,upsync_interval 间隔时间 ,upsync_type 类型consul,strong_dependency 增强依赖 upsync 192.168.254.134:8500/v1/kv/upstreams/springbootserver upsync_timeout=3000ms upsync_interval=500ms upsync_type=consul strong_dependency=off; # 将拉取下来的配置文件放在以下配置的目录中 upsync_dump_path /usr/local/nginx-1.9.9/conf/upsync_dump.conf; } # 将server中的location指定为刚刚创建的upstream(上游服务器) location / { proxy_pass http://myserver; index index.html index.htm; } # 进入到sbin目录下,启动nginx ./nginx
4、进行测试
- 本机启动2个服务,分别为8080和8081,ip地址为192.168.0.116
- 使用linux命令为consul指定2个key value,192.168.254.134是consul的ip地址
# 使用curl 请求,一定要是put请求 curl -X PUT http://192.168.254.134:8500/v1/kv/upstreams/springbootserver/192.168.0.116:8080 curl -X PUT http://192.168.254.134:8500/v1/kv/upstreams/springbootserver/192.168.0.116:8081 #或者使用postman调用consul提供的api来添加key,value http://192.168.254.134:8500/v1/kv/upstreams/springbootserver/192.168.0.116:8081 # 甚至可以图形化界面进行操作,手动添加key value,手动添加时注意如果是创建文件夹需要在最后加一个正斜杠 : /
5、在consul图形化页面添加key对应的value来指定负载均衡的算法
{"weight":1, "max_fails":2, "fail_timeout":10, "down":0}
然后由于wget下载的速度有时候比较慢,这边上传了文件
文件链接
到此这篇关于Nginx + consul + upsync 完成动态负载均衡的文章就介绍到这了,更多相关Nginx + consul + upsync 动态负载均衡内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
- linux nginx搭建(Ubuntu使用nginx搭建webdav文件服务器的详细过程)
- nginx故障处理(详解Nginx启动失败的几种错误处理)
- linux部署flask项目(用uWSGI和Nginx部署Flask项目的方法示例)
- django框架全面讲解(Django uwsgi Nginx 的生产环境部署详解)
- 如何认识服务器(关于Nginx、Apache、Tomcat三个WEB服务器的区别和认知)
- nginx和apache(为什么 Nginx 比 Apache 更牛逼)
- nginx 重置端口号(详解如何修改nginx的默认端口)
- nginx宝塔配置修改(宝塔面板默认的404页面不生效怎么办Nginx?)
- nginx状态查询(使用goaccess分析nginx日志的详细方法)
- nginx设置https访问(基于Nginx实现HTTPS网站设置的步骤)
- nginx配置root后的路径打不开(详解nginx.conf 中 root 目录设置问题)
- nginx tomcat docker 负载均衡(Nginx+Tomcat实现负载均衡、动静分离的原理解析)
- nginx404错误页面设置(Nginx tp3.2.3 404问题解决方案)
- 做网站是使用nginx还是apache(web服务器软件Apache与Nginx的对比分析)
- nginx 一个域名对应多个项目(nginx前后端同域名配置的方法实现)
- nginx事件模型有几种(Python实现监控Nginx配置文件的不同并发送邮件报警功能示例)
- 网友抵制 多地取消 夏日祭 为何惹众怒(网友抵制多地取消)
- 兄弟萌,今年的七夕又取消了 思考 思考(今年的七夕又取消了)
- 七夕取消是什么梗(七夕取消是什么梗)
- 这竟然是捏出来的 20种橡皮泥玩法让你轻松hold住魔娃(这竟然是捏出来的)
- 自制橡皮泥(自制橡皮泥)
- 还在卖 禁药西布曲明网上论斤卖(还在卖禁药西布曲明网上论斤卖)
热门推荐
- sqlserver配置管理器不见了(SQL Server配置管理器无法连接到WMI提供程序)
- vue-websocket 组件教程(Vue+express+Socket实现聊天功能)
- python处理tcp包(Python3使用TCP编写一个简易的文件下载器功能)
- python如何用md5作为文档名(Python生成MD5值的两种方法实例分析)
- MongoDB命令与SQL语法对比
- treeview绑定xml
- html输入框的宽度怎么设置(html如何对span设置宽度)
- docker容器分配(Docker容器数据卷原理及使用方法解析)
- linuxdhcp服务器分配(Linux实现DHCP服务器的搭建)
- escape()、encodeURI()、encodeURIComponent()区别
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9