什么是动态负载均衡

      nginx-upsync-module 提供了动态的负载均衡,动态更新上游的服务器不需要 reload nginx ,它的功能是拉取 consul 的后端 server 的列表,并更新 Nginx 的路由信息。此模块不依赖于任何第三方模块。 consul 作为 Nginx 的 db,利用 consul 的 KV 服务,每个 Nginx work 进程独立的去拉取各个 upstream 的配置,并更新各自的路由。
挂了第三方模块无法结束进程或者是当前进程尚未结束。
nginx -s reload 是平滑重启,不会强制结束正在工作的连接,需要等所有连接都结束才会重启。想象一个场景上线繁忙,想要多添加几台服务器处理更多的 流量改配置文件并重新启动 Nginx 可能并不总是很方便。 例如,当遇到大流量和高负载,重启 Nginx 并在此时重新加载配置会进一步增加系统负载,并可能暂时降低性能。

什么是consul

  1. Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件 。
  2. Consul提供的一些关键特性:    

          service discovery:consul通过DNS或者HTTP接口使服务注册和服务发现 变的很容易,一些外部服务。  

         health checking:健康检测使consul可以快速的警告在集群中的操作和服务发现的集成,可以防止请求转发到故障的服务上面。  

         key/value storage:一个用来存储动态配置的系统。提供简单的HTTP接口, 可以在任何地方操作。

     3、consul 端口说明

            consul对外提供的端口,不同的端口有不同的作用,了解即可

kkfileview负载均衡 consul负载均衡_nginx

准备工作

一、安装nginx-upsync-module模块步骤如下

1、如果之前使用的是yum进行安装的nginx,则需要重新下载一份相同版本的nginx


kkfileview负载均衡 consul负载均衡_kkfileview负载均衡_02

第一步下载与自己服务器上nginx相同版本的nginx

2、下载nginx-upsync-module ,并解压

kkfileview负载均衡 consul负载均衡_kkfileview负载均衡_03

 3、执行make不要执行make install(但是如果以前安装nginx是使用yum安装的则需要加上make install)

kkfileview负载均衡 consul负载均衡_kkfileview负载均衡_04

4、重命名 nginx 旧版本二进制文件,即 sbin 目录下的 nginx(期间 nginx 并不会停止服务)

kkfileview负载均衡 consul负载均衡_服务器_05

5、如果之前是使用yum install nginx命令安装的,然后拷贝一份新编译的二进制文件到安装目录 ,新的文件在objs目录下

kkfileview负载均衡 consul负载均衡_kkfileview负载均衡_06

6、在源码目录执行 make upgrade 开始升级

kkfileview负载均衡 consul负载均衡_kkfileview负载均衡_07

7、再次查看

nginx -V

 

kkfileview负载均衡 consul负载均衡_服务器_08

二、安装consul

1)第一种方式 使用docker 容器

docker pull consul 

docker run -itd -p 8700:8500 --name consul consul

浏览器上访问

kkfileview负载均衡 consul负载均衡_kkfileview负载均衡_09

2)第二种方法

consul agent  -server  -bootstrap-expect 1 -data-dir /tmp/consul -node=ali      -bind=192.168.0.3    -ui   -client=0.0.0.0

参数含义:
agent  
-server表示启动的是一个服务
-bootstrap-expect 1 表示等待多少个节点再启动,这里1个,就是自己一个就启动了
-node=texun_1 就是给consul服务起个别名为ali_1
-bind=192.168.0.3  绑定内网ip (通过ifconfig查看)
-data-dir /opt/data1  数据存储目录为/opt/data1
 -ui 启动默认ui界面
 -client  consul绑定在哪个client地址上,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1,可指定允许客户端使用什么ip去访问

具体操作如下: 

kkfileview负载均衡 consul负载均衡_服务器_10

 

kkfileview负载均衡 consul负载均衡_Nginx_11

kkfileview负载均衡 consul负载均衡_Nginx_12

 

kkfileview负载均衡 consul负载均衡_nginx_13

三、 nginx配置文件写法如下: 根据端口来写具体配置

upstream swoole_test { 
    upsync 127.0.0.1:8500/v1/kv/upstreams/swoole_test upsync_timeout=6m         upsync_interval=500ms upsync_type=consul strong_dependency=off; 
    upsync_dump_path /usr/local/nginx/conf/servers_test.conf; 
    include /usr/local/nginx/conf/servers_test.conf; 
} 

upsync模块会去consul拉取最新的upstream信息并存到本地的文件中 

upsync_timeout 配置从consul拉取上游服务器的超时时间

upsync_interval 配置从consul拉取上游服务器的间隔时间 

upsync_type 指定使用配置服务器的类型,当前是consul 

strong_dependency 启动时是否强制依赖配置服务器,如果配置为on,则拉取失败,nginx同样会启用失败 

upsync_dump_path 指定从consul拉取的上游服务器后持久化到的位置,这样即使 

Consul服务器出问题了,本地同样会有备份

查看所有已经存储的k/v 
curl http://127.0.0.1:8700/v1/kv/?recurse

删除 
curl -X DELETE http://127.0.0.1:8500/

1、nginx配置如下: 

kkfileview负载均衡 consul负载均衡_服务器_14

kkfileview负载均衡 consul负载均衡_Nginx_15

2、执行添加9502端口 

kkfileview负载均衡 consul负载均衡_nginx_16

3、添加是否成功可以通过浏览器查看或者使用命令查看


kkfileview负载均衡 consul负载均衡_Nginx_17

浏览器查看方式

 


kkfileview负载均衡 consul负载均衡_kkfileview负载均衡_18

命令查看方式

4、接下来将配置文件上传至服务器并重启

kkfileview负载均衡 consul负载均衡_服务器_19

5、查看consul启动后的情况:

kkfileview负载均衡 consul负载均衡_服务器_20


启动consul后默认会监听5个端口:

8300: replication、leader farwarding的端口

8301: lan cossip的端口

8302: wan gossip的端口

8500: web ui界面的端口

8600: 使用dns协议查看节点信息的端口

可参考下图查看端口的意思: