传统感念:每次修改完nginx配置文件,要重启nginx

动态感念:每次修改完nginx配置信息,不需要重启,nginx实时读取配置信息。

Nginx: 反向代理和负载均衡

Consul:是用go编写(谷歌),实现对动态负载均衡注册与发现功能

SpringCloud支持  Zookeeper、Eureka、Consul服务注册与发现。

服务注册:服务实现者可以通过HTTP API或DNS方式,将服务注册到Consul。

服务发现:服务消费者可以通过HTTP API或DNS方式,从Consul获取服务的IP和PORT。

故障检测:支持如TCP、HTTP等方式的健康检查机制,从而当服务有故障时自动摘除。

K/V存储:使用K/V存储实现动态配置中心,其使用HTTP长轮询实现变更触发和配置更改。

多数据中心:支持多数据中心,可以按照数据中心注册和发现服务,即支持只消费本地机房服务,使用多数据中心集群还可以避免单数据中心的单点故障。

Raft算法:Consul使用Raft算法实现集群数据一致性。

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

实现动态负载均衡原理:

1、搭建ConsulServer专门存放负载均衡注册配置信息

2、Nginx间隔时间动态获取最新的ConsulServer配置信息

注意事项:Nginx1.9

Consul环境搭建:

1、下载consul_0.7.5_linux_amd64.zip

wgethttps://releases.hashicorp.com/consul/0.7.5/consul_0.7.5_linux_amd64.zip

2、解压consul_0.7.5_linux_amd64.zip

unzip consul_0.7.5_linux_amd64.zip

如果解压出现该错误

-bash: unzip: 未找到命令

解决办法

yum -yinstall unzip

3、

执行以下 ./consul 出现以下信息就说明安装成功

4、启动consul

我的linux ip地址为:10.11.3.161

./consul agent -dev -ui -node=consul-dev -client=10.11.3.161

如果出现

问题,解决方案:如果出现该问题说明你的ip(111.231.55.111)是公网ip,不能用公网ip,要用内网ip。

出现这些情况,则说明启动成功了。

5、关闭防火墙

firewall-cmd --zone=public --add-port=8500/tcp --permanent

systemctl stop firewalld.service

6、浏览器访问111.22.55.111:8500

则说明consul安装完成。

二、安装Nginx

1、下载Nginx

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

2、解压Nginx

tar -zxvfnginx-1.9.10.tar.gz

3、配置Nginx

groupadd nginx

useradd -g nginx -s /sbin/nologin nginx

mkdir -p /var/tmp/nginx/client/

mkdir -p /usr/local/nginx

配置结束后,要先进行三、安装nginx-upsync-module,然后再进行第4、编译nginx

(三、安装nginx-upsync-module

1、下载nginx-upsync-module

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

下载下来的是master.zip

2、解压nginx-upsync-module(master.zip)

unzip master.zip

如果解压出现该错误

-bash: unzip: 未找到命令

解决办法

yum -yinstall unzip

)

4、编译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

编译的是报错

./configure: error: SSL modules require the OpenSSL library.

解决办法

yum -y install opensslopenssl-devel

5、Upstream动态配置

##动态去consul 获取注册的真实反向代理地址

upstream abing{

server 127.0.0.1:11111;

upsync192.168.212.134:8500/v1/kv/upstreams/itmayieduupsync_timeout=6mupsync_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_passhttp://abing;

###nginx与上游服务器(真实访问的服务器)超时时间后端服务器连接的超时时间_发起握手等候响应超时时间

proxy_connect_timeout1s;

###nginx发送给上游服务器(真实访问的服务器)超时时间

proxy_send_timeout1s;

###nginx接受上游服务器(真实访问的服务器)超时时间

proxy_read_timeout1s;

index  index.html index.htm;

}

}
6、创建upsync_dump_path

mkdir /usr/local/nginx/conf/servers/

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

7、启动consul
临时关闭防火墙systemctl stopfirewalld

我的linuxIp地址192.168.212.131

./consul agent -dev -ui -node=consul-dev -client=192.168.212.131

8、添加nginxUpstream服务

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

curl-X PUT http://192.168.212.134:8500/v1/kv/upstreams/itmayiedu/192.168.212.1:8081

curl-X PUT http://192.168.212.134:8500/v1/kv/upstreams/itmayiedu/192.168.212.1:8081

2.使用postmen 发送put请求

http://192.168.212.134:8500/v1/kv/upstreams/itmayiedu/192.168.212.1:8081

http://192.168.212.134:8500/v1/kv/upstreams/itmayiedu/192.168.212.1:8081

负载均衡信息参数

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

9、启动Nginx

启动:
cd /usr/local/nginx/sbin
./nginx
nginx服务启动后默认的进程号会放在/usr/local/nginx/logs/nginx.pid文件
cat nginx.pid 查看进程号

关闭:
kill -TERM pid  快速停止服务
kill -QUIT pid  平缓停止服务
kill -9 pid     强制停止服务

重启:
cd /usr/local/nginx
./nginx -HUP pid

./nginx -s reload

/usr/local/webserver/nginx/sbin/nginx -s reload # 重新载入配置文件
/usr/local/webserver/nginx/sbin/nginx -s reopen # 重启 Nginx
/usr/local/webserver/nginx/sbin/nginx -s stop # 停止 Nginx

./nginx -v  显示nginx的版本号
./nginx -V  显示nginx的版本号和编译信息
./nginx -t  检查nginx配置文件的正确性
./nginx -t  检查nginx配置文件的正确定及配置文件的详细配置内容
./nginx -s  向主进程发送信号,如:./nginx -s reload 配置文件变化后重新加载配置文件并重启nginx服务
./nginx -p  设置nginx的安装路径
./nginx -c  设置nginx配置文件的路径
---------------------
作者:阿兵的小屋
来源:CSDN
原文:https://blog.csdn.net/qq_29247945/article/details/80787014
版权声明:本文为博主原创文章,转载请附上博文链接!

Consul+upsync+Nginx实现动态负载均衡 摘自https://blog.csdn.net/qq_29247945/article/details/80787014的更多相关文章

  1. 基于Consul+Upsync+Nginx实现动态负载均衡

    基于Consul+Upsync+Nginx实现动态负载均衡 1.Consul环境搭建 下载consul_0.7.5_linux_amd64.zip到/usr/local/src目录 cd /usr/l ...

  2. Nginx 配置location root 转自https://blog.csdn.net/rofth/article/details/78581617

    nginx指定文件路径有两种方式root和alias,root与alias主要区别在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到服务器文件上. 最基本的区别 ...

  3. 【Nginx】基于Consul+Upsync+Nginx实现动态负载均衡

    一.Http动态负载均衡 什么是动态负载均衡 动态负载均衡实现方案 常用服务器注册与发现框架 二.Consul快速入门 Consul环境搭建 三.nginx-upsync-module nginx-u ...

  4. Consul+upsync+Nginx实现动态负载均衡

    上一篇文章 <C# HttpClient 使用 Consul 发现服务> 解决了内部服务之间的调用问题, 对外提供网关服务还没有解决, 最后我选择了 nginx-upsync-module ...

  5. 从源码解析Nginx对 Native aio支持_运维_youbingchen的博客-CSDN博客 https://blog.csdn.net/youbingchen/article/details/51767587

    从源码解析Nginx对 Native aio支持_运维_youbingchen的博客-CSDN博客 https://blog.csdn.net/youbingchen/article/details/ ...

  6. centos6.5 系统乱码解决 i18n --摘自http://blog.csdn.net/yangkai_hudong/article/details/19033393

    二.终端. gedit 显示乱码 #vi /etc/sysconfig/i18n 将LANG="en_US.UTF-8" SYSFONT="latarcyrheb-sun ...

  7. nginx+tomcat实现集群,redis实现session共享,软连接实现文件共享:http://blog.csdn.net/hua1586981/article/details/78132710

    转载 2017年02月08日 16:52:41 730 相信很多人都听过nginx,这个小巧的东西慢慢地在吞食apache和IIS的份额.那究竟它有什么作用呢?可能很多人未必了解. 说到反向代理,可能 ...

  8. Nginx 实现动态负载均衡(Nginx-1.10.1 + Consul v0.6.4)

    一直也没有找到合适的类似Socat + Haproxy 的组合能用在Nginx,后来发现了Nginx的几个模块,但是也存在各种不足. 而且Nginx 在大流量的情况下nginx -s reload 是 ...

  9. 《nginx 三》实现nginx的动态负载均衡——实战

    Http动态负载均衡 什么是动态负载均衡 传统的负载均衡,如果Upstream参数发生变化,每次都需要重新加载nginx.conf文件, 因此扩展性不是很高,所以我们可以采用动态负载均衡,实现Upst ...

随机推荐

  1. 【转载】 5G+边缘计算,着眼可见的未来 【边缘计算】

    原文地址: https://www.cnblogs.com/upyun/p/10641489.html ------------------------------------------------ ...

  2. 安装12C小问题及pdb表空间配置

    安装12C小问题及pdb表空间配置 一.安装 1.RPM包 #安装12C需要安装的rpm包,官网搜索,做个记录 bc binutils-2.23.52.0.1-12.el7(x86_64) compa ...

  3. python中的list按照某一列进行排序的方法

    如题,python中的list着实很好用,我有如下一个list 可以看出list中的每一个元素是由字符串,两个新的list,以及一个float组成,现在想根据这最后一个float对这个list进行排序 ...

  4. react状态提升问题::::

    父组件传值给子组件,只需要在组件上写上naverightstates={this.state.naverightstates},然后在子组件里面引用this.props.naverightstates ...

  5. J2EE中几个常用的名词解释

      1.web容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接和容器中的环境变量接接口互,不必关注其它系统问题.主要有WEB服务器来实现.例如:TOM ...

  6. poj-3666 【对dp子状态无后效性的理解】

    题目链接 错解: #include <cstdio> #include <cstring> #include <algorithm> #include <io ...

  7. ACM-ICPC 2018 沈阳赛区网络预赛-D:Made In Heaven(K短路+A*模板)

    Made In Heaven One day in the jail, F·F invites Jolyne Kujo (JOJO in brief) to play tennis with her. ...

  8. 顺平讲try catch finally throw throws(精华)

    try catch finally  有点像if else语句 还有像javascript的服务器执行成功后的回调函数,success:function(){ 进行处理 }; throws的意思是将异 ...

  9. unzip命令

    unzip命令用于解压缩由zip命令压缩的“.zip”压缩包. 语法 unzip(选项)(参数) 选项 -c:将解压缩的结果显示到屏幕上,并对字符做适当的转换: -f:更新现有的文件: -l:显示压缩 ...

  10. apache geode 试用

    使用docker 运行,文档参考的官方的5 分钟学习文档 拉取镜像 docker pull apachegeode/geode 启动 docker run -it -p 10334:10334 -p ...