本文将介绍如何在 Windows 下单机部署 Nacos 伪集群(和真实集群类似)。
准备一个 nginx 和三个 nacos 安装包(版本信息 nacos-server-2.2.3,nacos 至少需要三个节点),然后分别对 nacos 进行重命名,如下图:
三个 nacos 的端口分别为:
nacos-server-2.2.3-1 端口为 8748
nacos-server-2.2.3-2 端口为 8848
nacos-server-2.2.3-3 端口为 8948
Nacos 默认使用 Apache Derby 作为保存 Nacos 数据的数据库,我们需要修改配置,让 Nacos 使用 MySQL 来保存 Nacos 数据。
请参考 “Nacos 数据外部化”。
进入 nacos 安装目录的 conf 目录,拷贝 cluster.conf.example 重命名为 cluster.conf:
(1)nacos-server-2.2.3-1/conf/cluster.conf
10.87.10.89:8748 10.87.10.89:8848 10.87.10.89:8948
(2)nacos-server-2.2.3-2/conf/cluster.conf
10.87.10.89:8748 10.87.10.89:8848 10.87.10.89:8948
(3)nacos-server-2.2.3-3/conf/cluster.conf
10.87.10.89:8748 10.87.10.89:8848 10.87.10.89:8948
注意:cluster.conf 文件用来配置 nacos 的集群信息,其中每一行表示一个集群节点地址,上面配置了三个集群节点信息。
进入 nacos 安装目录的 conf 目录,编辑 application.properties 配置文件的 server.port 选项,修改 Nacos 端口。
注意:Nacos 默认端口是 8848,2.0 版本后另外还占用 9848,9849 两个端口,这两个是 gRPC 端口,用于服务端与客户端通讯,所以在单机上配置集群节点,节点要配置的端口不能连续,否则在启动时报端口占用的错误。
9848 端口:与主端口(8848)偏移量为 1000,用来客户端gRPC请求服务端口,用户客户端向服务端发起连接和请求
9849 端口:与主端口(8848)偏移量为 1001,用来服务端gRPC请求服务端口,用于服务间同步等
(1)nacos-server-2.2.3-1/conf/application.properties
#*************** Spring Boot Related Configurations ***************# ### Default web context path: server.servlet.contextPath=/nacos ### Include message field server.error.include-message=ALWAYS ### Default web server port: 看这里 server.port=8748
(2)nacos-server-2.2.3-2/conf/application.properties
#*************** Spring Boot Related Configurations ***************# ### Default web context path: server.servlet.contextPath=/nacos ### Include message field server.error.include-message=ALWAYS ### Default web server port: 看这里 server.port=8848
(3)nacos-server-2.2.3-3/conf/application.properties
#*************** Spring Boot Related Configurations ***************# ### Default web context path: server.servlet.contextPath=/nacos ### Include message field server.error.include-message=ALWAYS ### Default web server port: 看这里 server.port=8948
现在分别执行 Nacos 的 bin/startup.cmd 脚本,启动 Nacos 集群,如下:
(1)nacos-server-2.2.3-1
"nacos is starting with cluster" ,--. ,--.'| ,--,: : | Nacos 2.2.3 ,`--.'`| ' : ,---. Running in cluster mode, All function modules | : : | | ' ,'\ .--.--. Port: 8748 : | \ | : ,--.--. ,---. / / | / / ' Pid: 15128 | : ' '; | / \ / \. ; ,. :| : /`./ Console: http://10.87.10.89:8748/nacos/index.html ' ' ;. ;.--. .-. | / / '' | |: :| : ;_ | | | \ | \__\/: . .. ' / ' | .; : \ \ `. https://nacos.io ' : | ; .' ," .--.; |' ; :__| : | `----. \ | | '`--' / / ,. |' | '.'|\ \ / / /`--' / ' : | ; : .' \ : : `----' '--'. / ; |.' | , .-./\ \ / `--'---' '---' `--`---' `----' 2023-10-30 12:58:15,562 INFO The server IP list of Nacos is [10.87.10.89:8748, 10.87.10.89:8848, 10.87.10.89:8948] ... 2023-10-30 12:59:28,024 INFO Nacos is starting... 2023-10-30 12:59:28,806 INFO Nacos started successfully in cluster mode. use external storage
(2)nacos-server-2.2.3-2
"nacos is starting with cluster" ,--. ,--.'| ,--,: : | Nacos 2.2.3 ,`--.'`| ' : ,---. Running in cluster mode, All function modules | : : | | ' ,'\ .--.--. Port: 8848 : | \ | : ,--.--. ,---. / / | / / ' Pid: 12068 | : ' '; | / \ / \. ; ,. :| : /`./ Console: http://10.87.10.89:8848/nacos/index.html ' ' ;. ;.--. .-. | / / '' | |: :| : ;_ | | | \ | \__\/: . .. ' / ' | .; : \ \ `. https://nacos.io ' : | ; .' ," .--.; |' ; :__| : | `----. \ | | '`--' / / ,. |' | '.'|\ \ / / /`--' / ' : | ; : .' \ : : `----' '--'. / ; |.' | , .-./\ \ / `--'---' '---' `--`---' `----' 2023-10-30 12:58:32,780 INFO The server IP list of Nacos is [10.87.10.89:8748, 10.87.10.89:8848, 10.87.10.89:8948] ... 2023-10-30 12:59:46,519 INFO Nacos is starting... 2023-10-30 12:59:47,263 INFO Nacos started successfully in cluster mode. use external storage
(3)nacos-server-2.2.3-3
"nacos is starting with cluster" ,--. ,--.'| ,--,: : | Nacos 2.2.3 ,`--.'`| ' : ,---. Running in cluster mode, All function modules | : : | | ' ,'\ .--.--. Port: 8948 : | \ | : ,--.--. ,---. / / | / / ' Pid: 12988 | : ' '; | / \ / \. ; ,. :| : /`./ Console: http://10.87.10.89:8948/nacos/index.html ' ' ;. ;.--. .-. | / / '' | |: :| : ;_ | | | \ | \__\/: . .. ' / ' | .; : \ \ `. https://nacos.io ' : | ; .' ," .--.; |' ; :__| : | `----. \ | | '`--' / / ,. |' | '.'|\ \ / / /`--' / ' : | ; : .' \ : : `----' '--'. / ; |.' | , .-./\ \ / `--'---' '---' `--`---' `----' 2023-10-30 12:58:39,599 INFO The server IP list of Nacos is [10.87.10.89:8748, 10.87.10.89:8848, 10.87.10.89:8948] ... 2023-10-30 12:59:44,699 INFO Nacos is starting... 2023-10-30 12:59:45,699 INFO Nacos started successfully in cluster mode. use external storage
集群启动成功后,访问 http://127.0.0.1:8848/nacos 查看集群信息(注意,http://127.0.0.1:8748/nacos 和 http://127.0.0.1:8948/nacos 也能正常访问),如下图:
上面已经成功搭建了 Nacos 集群,在正式场景中不可能配置三个 Nacos 地址(127.0.0.1:8748、127.0.0.1:8848 和 127.0.0.1:8948),此时我们为了高可用,可以通过 Nginx 暴露一个端口,然后通过 Nginx 的配置实现负载均衡。如下图:
客户端请求 Nginx,然后 Nginx 通过负载均衡策略将请求路由到任何一台 Nacos 服务器。
Nginx 配置(nginx.conf)如下:
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; upstream nacoscluster { server 10.87.10.89:8748; server 10.87.10.89:8848; server 10.87.10.89:8948; } server { listen 8080; server_name localhost; location / { root html; index index.html index.htm; proxy_pass http://nacoscluster; } } }
注意,上面虽然配置了负载均衡高可用,但是还是不足。因为,nginx 是单机的,也有可能会宕机,最总的解决办法是 nginx + keepalived + nacos,读者可以自行尝试。