Subscribe
池塘🐟
Search
Sign up
php
laravel
mysql
docker
redis
rabbitmq
go
js
其他
nginx+consul实现动态负载均衡
###### nginx的负债均衡 一般使用upstrem来配置ip,当需要变更ip时候,需要修改配置文件,再重启nginx属于静态行为,基于此,我们引入动态负载均衡的概念。动态负载均衡是基于Nginx的upsync模块来做的。注:其实Nginx不一定非要结合consul来做动态负载均衡,也可以结合Redis来做,但是consul除了拥有和Redis类似的KV存储,还可以做服务的注册与发现、健康检查,因此相比之下,业内大多使用consul来做动态负载均衡。 #### 前提nginx需要先安装upsync扩展 ``修改Nginx配置文件 nginx.conf `` ``` worker_processes 4; worker_cpu_affinity auto; #自动绑定cpu跟进程的关系 events { worker_connections 100000; #设置单个worker连接数 } error_log logs/error.log error; http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream consul_server { # 定义一个默认的nginx服务 server 101.34.99.204:8000 max_fails=2 fail_timeout=30s; # 定义nginx连接consul_server获取动态upstream的consul_key,upsync_type为consul,每0.5秒从consul拉取一次配置信息 upsync 101.34.99.204:8500/v1/kv/upstream/consul_server upsync_type=consul upsync_interval=5ms upsync_timeout=1ms; # 定义动态获取consul_server负载均衡信息持久化在磁盘的位置 upsync_dump_path /etc/nginx/conf/consul_server.conf; # 引入生成的配置文件 include /etc/nginx/conf/consul_server.conf; # 下面三个配置是健康检查的配置 check interval=1000 rise=2 fall=2 timeout=3000 type=http default_down=false; check_http_send "HEAD / HTTP/1.0\r\n\r\n"; check_http_expect_alive http_2xx http_3xx; } server { listen 80; server_name localhost; root /www; location / { proxy_pass http://consul_server; } # 健康检查 - 查看负载均衡的列表 location /upstream_list { upstream_show; } # 健康检查 - 查看负载均衡的状态 location /upstream_status { check_status; access_log off; } } } ``` ######重启nginx `` 向consul注册Nginx服务器信息 `` ``` curl -X PUT -d '{"max_fails":2,"fail_timeout":10}' http://101.34.99.204:8500/v1/kv/upstream/consul_server/101.34.99.204:8080 curl -X PUT -d '{"max_fails":2,"fail_timeout":10}' http://101.34.99.204:8500/v1/kv/upstream/consul_server/101.34.99.204:8000 ``` ###动态负载均衡实现原理总结 1、Nginx加载配置文件nginx.conf 2、从consul中获取动态配置 ,生成一个动态负载均衡配置文件 swoft_server.conf; 3、Nginx使用该动态负载均衡配置文件,得到多个可用服务IP及端口号 4、Nginx开始负载均衡
提交评论
提交