nginx配置nacos集群代理机制
说明:五台主机
nacos-a 192.168.20.11
nacos-b 192.168.20.12
nacos-c 192.168.20.13
nacos-mysql 192.168.20.14
nacos-nginx 192.168.20.15
所有安装包位置: /data/tarapps/
所有脚本启动位置: /data/bin/
所有安装目录位置: /data/proc/
所有软件日志位置: /data/logs/
一:nginx转换
在nginx配置文件里添加(子配置文件nacos.conf)
upstream nacoscluster {
server 192.168.20.11:8848 weight=3 ;
server 192.168.20.12:8848 weight=1 ;
server 192.168.20.13:8848 weight=2 ;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://nacoscluster;
root /nacos/;
}
}
浏览器访问http://nacos-nginx/nacos/
nginx主配置文件
worker_processes auto; #nginx工作线程数
worker_cpu_affinity auto ;
#配置CPU亲和性
##使用命令 ps -eo pid,ni,pri,pcpu,psr,comm|grep nginx|awk '{++s[$(NF-1)]}END{for (i in s)print "core-id",i,"\t",s[i]}'|sort -nr -k 3 查看 cpu亲和性
events {
worker_connections 1000; #设置nginx并发量为32w
#并发=(worker_processes*worker_connections)
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
log_format pre '$remote_addr - $remote_user [$time_local] host: $host "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#设置日志格式: main
access_log /data/logs/nginx/access.log main;
charset utf-8;
server_tokens off; #关闭nginx的错误版本提示
sendfile on; #使用sendfile系统调用来传输文件
keepalive_timeout 65; #keepalive 超时时间
gzip on; #开启gzip压缩,减少流量传输但是会加大CPU压力
client_header_buffer_size 4k; #客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,分页大小可以用命令getconf PAGESIZE 取得。
server_names_hash_bucket_size 128;
large_client_header_buffers 4 4k;
client_max_body_size 2048m;
include conf.d/*.conf;
}
二:gRPC代理机制
nginx在1.3版本之后就开始支持gRPC代理通讯,但是并不适合长连接的操作,你现在如果使用了nginx实现gRPC代理,最终无法完成所有微服务注册的
在Nacos 2.0之后的把呢不能是为了提高服务注册与发现管理的性能,才用了gRPC协议,所以在进行服务代理时就可以利用HAProxy代理组件来实现Nacos集群管理
HAProxy是一款高可用组件,可以有效地实现集群服务节点的负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的单例软件,开发者可以直接通过HAProxy官方(https://haproxy.org/)免费获取
将haproxy包放入到nginx主机上,解压到/data/proc目录中并进入目录中
先查看自己的内核版本uname -r 然后进行编译
[root@nacos-nginx haproxy-2.5.4]# uname -r
3.10.0-1160.el7.x86_64
编译:
[root@nacos-nginx haproxy-2.5.4]# make TARGET=3100 ARCH=x86_64 PREFIX=/data/prog/haproxy
说明:TARGET=3100是内核版本3.10.0-1160.el7.x86_64
安装:
[root@nacos-nginx ~]# make install PREFIX=/data/prog/haproxy
haproxy配置文件
[root@nacos-nginx haproxy]# vim haproxy.cfg
#全局配置项:
global #全局配置
log 127.0.0.1 local0 #启用日志
nbproc 1 #监控进程个数
maxconnrate 300 #进程每秒所能创建的最大连接数
maxcomprate 300 #压缩速率
maxsessrate 500 #进程每秒能创建的会话数量
#chroot /data/proc/haproxy #HAProxy部署路径
pidfile /data/proc/haproxy/haproxy.pid #pid文件存储路径
maxconn 30000 #进程所能接受的最大并发连接数
user haproxy #启动用户名
group haproxy #启动用户组
daemon #后台运行模式
stats socket /data/proc/haproxy/stats #开始统计Socket
#默认配置项:
defaults #默认配置
log global #全局日志配置
mode http #http处理模式
option httplog #日志类别
option dontlognull #不记录健康日志信息
retries 3 #失败重试次数
#option http-use-htx #启用HTTP/2
option redispatch #允许重新分配session
timeout connect 5m #连接超时
timeout client 5m #客户端超时
timeout server 5m #服务端超时
timeout check 10s #超时检查
timeout http-keep-alive 100s #保持HTTP连接
#管理控制台:
listen admin_stats #管理控制台
stats enable #启用管理控制台
bind 0.0.0.0:9999 #监控端口设置
mode http #管理控制台模式
log global #日志配置
maxconn 10 #最大连接数
stats uri /admin #登陆监控子路径配置
stats realm welcome\ Haproxy #登录提示信息
stats auth admin:admin #监控的账号密码
stats admin if TRUE #启用管理员模式
option httplog #http日志记录
stats refresh 30s #监控刷新时间
stats hide-version #隐藏页面版本号
#代理转发配置:
frontend nacos_cluster #代理集群配置(名称自定义)
bind :9848 #代理端口
mode http #代理模式
log global #日志配置
maxconn 8000 #最大连接数
default_backend nacos_cluster_nodes #代理节点名称(名称自定义)
#集群节点控制:
backend nacos_cluster_nodes #集群节点(名称自定义)
mode http #代理模式
server nacos-a 192.168.20.11:9848 check #集群节点
server nacos-b 192.168.20.12:9848 check #集群节点
server nacos-c 192.168.20.13:9848 check #集群节点
说明: nacos-a nacos-b nacos-c是一种集群标识,自定义名称
创建一个用户haproxy,然后启动
[root@nacos-nginx haproxy]# useradd haproxy
[root@nacos-nginx haproxy]# /data/prog/haproxy/sbin/haproxy -f /data/prog/haproxy/haproxy.cfg
然后在浏览器上 http://nacos-nginx:9999/admin
账号密码都是admin
项目启动之后微服务就可以通过当前的GRPC代理实现了服务的注册
如果集群有问题的话,就查询一下集群的命名日志nanaming-server.log