基于Nginx实现Nacos集群配置和应用

  这一篇笔记记录了在通过Nginx作为负载均衡器,然后实现Nacos集群配置的相关内容。官方文档:《集群部署说明》

1、集群部署架构图

  这里,会选择使用了Nginx作为代理,为Nacos集群提供统一对外的访问。

2、环境准备
  1. 三台虚拟机,Linux系统,IP地址分别是:192.168.1.8/9/10
  2. 准备JDK环境
  3. 分别下载并解压nacos-server-1.3.2.tar.gz文件,请参考前面内容。
3、集群配置

  重命名根目录/conf/cluster.conf.example文件为cluster.conf,然后配置集群中的nacos服务节点,格式:IP:PORT,如下所示:

# ip:port
192.168.1.8:8848
192.168.1.9:8848
192.168.1.10:8848
4、启动集群

  分别在三台服务器上,启动服务,命令如下:

#在根目录下执行
./bin/startup.sh -p embedded
5、验证

  启动成功后,登录其中一个注册服务中心,比如:http://192.168.1.8:8848/nacos,然后打开集群管理-节点列表菜单,可以看见如下内容:

  这时候如果在Spring cloud项目中使用注册发现,需要进行如下配置:

spring.cloud.nacos.discovery.server-addr=192.168.1.8:8848, 192.168.1.8:8848, 192.168.1.8:8848

  查看集群状态时,只能通过其中一个Nacos服务的地址查看集群的情况。为了统一这种访问方式,屏蔽Nacos服务的访问地址,这里引入Nginx,通过反向代理实现访问方式的统一。

6、Nginx安装配置

  请参考《Keepalived+Nginx搭建高可用Web集群》

7、Nginx负载均衡配置

  在Nginx根目录/conf目录下,有nginx.conf文件,添加如下配置即可:

 首先,添加在http内添加upstream配置,如下所示:

upstream nacosserver {
	server 192.168.1.8:8848;
	server 192.168.1.9:8848;
	server 192.168.1.10:8848;
}

  这里选择了默认的负载均衡策略。然后,再配置代理路径,把访问/nacos/**的路径,通过http://nacosserver/nacos/代理,其中nacosserver是上面定义的名称。如下所示:

location /nacos/ {
	proxy_pass http://nacosserver/nacos/;
}

  最后,修改打印日志。这个可以不做,这里主要是为了访问集群时,可以通过日志判断,确实通过负载均衡把请求分发到了多个服务器。 具体如下:

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for" $upstream_addr';

access_log  logs/access.log  main;

  nginx.conf默认配置,去掉注释,然后在合适的位置增加$upstream_addr’即可。

这里nginx监听端口号改成了8080

  修改完配置,启动或重新加载配置文件即可,命令:

#这里没有注册成服务,所以使用这种方法启动。
/usr/local/nginx/sbin/nginx

#或重新加载文件
/usr/local/nginx/sbin/nginx -s reload
8、验证Nginx

  这时候,访问http://192.168.1.8:8080/nacos,通过默认密码登录后,刷新几次页面。然后去查看nginx的访问日志,如下所示:

192.168.1.87 - - [22/Oct/2020:17:22:50 +0800] "PUT /nacos/v1/ns/instance/beat?app=qriver-nacos-server&namespaceId=public&port=8001&clusterName=DEFAULT&ip=192.168.254.1&serviceName=DEFAULT_GROUP%40%40qriver-nacos-server&encoding=UTF-8 HTTP/1.1" 200 75 "-" "Nacos-Java-Client:v1.2.1" "-" 192.168.1.9:8848
192.168.1.87 - - [22/Oct/2020:17:22:55 +0800] "PUT /nacos/v1/ns/instance/beat?app=qriver-nacos-server&namespaceId=public&port=8001&clusterName=DEFAULT&ip=192.168.254.1&serviceName=DEFAULT_GROUP%40%40qriver-nacos-server&encoding=UTF-8 HTTP/1.1" 200 64 "-" "Nacos-Java-Client:v1.2.1" "-" 192.168.1.8:8848
192.168.1.87 - - [22/Oct/2020:17:23:00 +0800] "PUT /nacos/v1/ns/instance/beat?app=qriver-nacos-server&namespaceId=public&port=8001&clusterName=DEFAULT&ip=192.168.254.1&serviceName=DEFAULT_GROUP%40%40qriver-nacos-server&encoding=UTF-8 HTTP/1.1" 200 64 "-" "Nacos-Java-Client:v1.2.1" "-" 192.168.1.10:8848
192.168.1.87 - - [22/Oct/2020:17:23:05 +0800] "PUT /nacos/v1/ns/instance/beat?app=qriver-nacos-server&namespaceId=public&port=8001&clusterName=DEFAULT&ip=192.168.254.1&serviceName=DEFAULT_GROUP%40%40qriver-nacos-server&encoding=UTF-8 HTTP/1.1" 200 75 "-" "Nacos-Java-Client:v1.2.1" "-" 192.168.1.9:8848
192.168.1.87 - - [22/Oct/2020:17:23:10 +0800] "PUT /nacos/v1/ns/instance/beat?app=qriver-nacos-server&namespaceId=public&port=8001&clusterName=DEFAULT&ip=192.168.254.1&serviceName=DEFAULT_GROUP%40%40qriver-nacos-server&encoding=UTF-8 HTTP/1.1" 200 64 "-" "Nacos-Java-Client:v1.2.1" "-" 192.168.1.8:8848
192.168.1.87 - - [22/Oct/2020:17:23:10 +0800] "DELETE /nacos/v1/ns/instance?app=qriver-nacos-server&namespaceId=public&port=8001&clusterName=DEFAULT&ip=192.168.254.1&ephemeral=true&serviceName=DEFAULT_GROUP%40%40qriver-nacos-server&encoding=UTF-8 HTTP/1.1" 200 2 "-" "Nacos-Java-Client:v1.2.1" "-" 192.168.1.10:8848

  通过打印的日志,我们可以确定确实轮询访问了每个nacos服务。

9、应用中配置

  这时候如果在Spring cloud项目中使用注册发现,只需要配置统一的访问入口即可,配置如下:

spring.cloud.nacos.discovery.server-addr=192.168.1.8:8080
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐