nginx动态负载均衡、consul,upsync
记录一下nginx动态负载均衡,用到consul注册、发现服务中间件
consul启动
consul对外提供的端口, 不同的端口有不同的作用, 了解即可。
启动consul服务端
consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul -node=consulserver -bind=172.16.16.16 -http-port=8081 -ui -client=0.0.0.0
参数含义:
agent
-server表示启动的是一个服务
-bootstrap-expect 1 表示等待多少个节点再启动, 这里1个, 就是自己一个就启动了
-node=texun_1 就是给consul服务起个别名为consulserver
-bind=172.17.114.76 绑定内网ip 这里可以不填写,就默认本机
-data-dir /tmp/consul 数据存储目录为/tmp/consul
-http-port 要侦听的 HTTP API 端口。这会覆盖默认端口 8500。
-ui 启动默认ui界面
-client consul绑定在哪个client地址上, 这个地址提供HTTP、 DNS、 RPC等服务, 默认是127.0.0.1, 可指定允许客户端使用什么ip去访问
注意:
要关闭掉防火墙,要不然开不起来,或者打开对应的端口
nginx添加upsync模块
我用的是宝塔,参照的文章是这个:https://www.daniao.org/13274.html
建议安装编译版本,这样才会有/www/server/nginx/src的文件,到时要新增模块的时候也方便。
本人是先把upsync模块放在服务器上解压,然后重新安装nginx
查看有没有添加成功模块
nginx 配置
worker_processes 2;
worker_cpu_affinity auto; #自动绑定cpu跟进程的关系
events {
worker_connections 100000; #设置单个worker连接数
}
error_log /data/bogiang/code/nginx/upsync/log/error.log;
http {
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream swo_http_up {
server localhost:9501;
upsync 106.55.23.124:8081/v1/kv/upstreams/test upsync_timeout=6m upsync_interval=500ms upsync_type=consul strong_dependency=off;
upsync_dump_path /data/bogiang/code/nginx/upsync/servers_test.conf;
include /data/bogiang/code/nginx/upsync/servers_test.conf; #没有这个文件的话先创建好
}
server {
listen 80;
server_name localhost;
location /swoole {
proxy_pass http://swo_http_up;
}
location / {
autoindex on;
root /data/bogiang/code/nginx/upsync/;
}
}
}
解释:
127.0.0.1:8500/v1/kv/upstreams =》 连接consul的api资源地址
swoole_test =》 相当于我们自己在consul中自定义的key
upsync_timeout =》 超时时间6分钟
upsync_interval =》 定时获取信息的时间
upsync_type =》 类型
strong_dependency=on; =》 是否依赖consul运行
upsync_dump_path =》 拉取之后申请配置文件
添加服务
curl -X PUT -d '{"weight":1, "max_fails":2, "fail_timeout":10}' http://$consul_ip:$port/v1/kv/$dir1/$upstream_name/$backend_ip:$backend_port
[root@VM-16-16-centos upsync]# curl -X PUT -d '{"weight":1, "max_fails":2, "fail_timeout":10}' http://127.0.0.1:8081/v1/kv/upstreams/test/127.0.0.1:9001
true[root@VM-16-16-centos upsync]# curl -X PUT -d '{"weight":1, "max_fails":2, "fail_timeout":10}' http://127.0.0.1:8081/v1/kv/upstreams/test/127.0.0.1:9002
true[root@VM-16-16-centos upsync]# curl -X PUT -d '{"weight":1, "max_fails":2, "fail_timeout":10}' http://127.0.0.1:8081/v1/kv/upstreams/test/127.0.0.1:9003
true[root@VM-16-16-centos upsync]#
servers_test.conf文件: