什么是动态负载均衡
nginx-upsync-module 提供了动态的负载均衡,动态更新上游的服务器不需要 reload nginx ,它的功能是拉取 consul 的后端 server 的列表,并更新 Nginx 的路由信息。此模块不依赖于任何第三方模块。 consul 作为 Nginx 的 db,利用 consul 的 KV 服务,每个 Nginx work 进程独立的去拉取各个 upstream 的配置,并更新各自的路由。
挂了第三方模块无法结束进程或者是当前进程尚未结束。
nginx -s reload 是平滑重启,不会强制结束正在工作的连接,需要等所有连接都结束才会重启。想象一个场景上线繁忙,想要多添加几台服务器处理更多的 流量改配置文件并重新启动 Nginx 可能并不总是很方便。 例如,当遇到大流量和高负载,重启 Nginx 并在此时重新加载配置会进一步增加系统负载,并可能暂时降低性能。
什么是consul
- Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件 。
- Consul提供的一些关键特性:
service discovery:consul通过DNS或者HTTP接口使服务注册和服务发现 变的很容易,一些外部服务。
health checking:健康检测使consul可以快速的警告在集群中的操作和服务发现的集成,可以防止请求转发到故障的服务上面。
key/value storage:一个用来存储动态配置的系统。提供简单的HTTP接口, 可以在任何地方操作。
3、consul 端口说明
consul对外提供的端口,不同的端口有不同的作用,了解即可
准备工作
一、安装nginx-upsync-module模块步骤如下
1、如果之前使用的是yum进行安装的nginx,则需要重新下载一份相同版本的nginx
第一步下载与自己服务器上nginx相同版本的nginx
2、下载nginx-upsync-module ,并解压
3、执行make不要执行make install(但是如果以前安装nginx是使用yum安装的则需要加上make install)
4、重命名 nginx 旧版本二进制文件,即 sbin 目录下的 nginx(期间 nginx 并不会停止服务)
5、如果之前是使用yum install nginx命令安装的,然后拷贝一份新编译的二进制文件到安装目录 ,新的文件在objs目录下
6、在源码目录执行 make upgrade 开始升级
7、再次查看
nginx -V
二、安装consul
1)第一种方式 使用docker 容器
docker pull consul
docker run -itd -p 8700:8500 --name consul consul
浏览器上访问
2)第二种方法
- 官网:https://www.consul.io/downloads.html 下载consul,并上传到服务器,并解压
- 启动consul
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去访问
具体操作如下:
三、 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配置如下:
2、执行添加9502端口
3、添加是否成功可以通过浏览器查看或者使用命令查看
浏览器查看方式
命令查看方式
4、接下来将配置文件上传至服务器并重启
5、查看consul启动后的情况:
启动consul后默认会监听5个端口:
8300: replication、leader farwarding的端口
8301: lan cossip的端口
8302: wan gossip的端口
8500: web ui界面的端口
8600: 使用dns协议查看节点信息的端口
可参考下图查看端口的意思: