作为阿里巴巴开源的动态服务发现、配置管理和服务管理平台,Nacos在微服务架构中扮演着重要角色。相比Windows环境,Linux服务器在生产环境中具有更高的稳定性、安全性和性能表现。我曾在多个分布式项目中部署Nacos集群,实测在Linux环境下其资源占用率比Windows低30%左右,特别是在高并发场景下表现更为出色。
本次部署将使用Nacos 2.0.3稳定版(截至2023年8月最新版本),这个版本在集群性能和CP协议支持方面有显著提升。下面这张表格对比了不同部署方式的特点:
| 部署方式 | 适用场景 | 资源占用 | 管理复杂度 | 生产推荐 |
|---|---|---|---|---|
| 单机模式 | 开发/测试环境 | 低 | 简单 | ❌ |
| 集群模式 | 生产环境 | 中等 | 中等 | ✅ |
| Docker容器部署 | 云原生环境 | 较低 | 较高 | ✅ |
| K8S Operator | 大规模K8S集群 | 高 | 复杂 | ✅ |
提示:虽然Docker部署更方便,但本文选择传统安装方式,因为这是理解Nacos运行机制的最佳途径,适合需要深度定制的场景。
我的测试环境是CentOS 7.9,但以下步骤同样适用于Ubuntu 20.04等主流Linux发行版。先确认系统是否满足这些硬性条件:
运行以下命令检查基础环境:
bash复制# 检查Java版本
java -version
# 检查内存
free -h
# 检查磁盘
df -h
如果未安装JDK,用这个命令快速安装OpenJDK 8:
bash复制# CentOS
sudo yum install -y java-1.8.0-openjdk-devel
# Ubuntu
sudo apt-get update && sudo apt-get install -y openjdk-8-jdk
生产环境必须开放以下端口:
配置命令示例:
bash复制sudo firewall-cmd --permanent --add-port=8848/tcp
sudo firewall-cmd --permanent --add-port=7848/tcp
sudo firewall-cmd --reload
推荐从Github官方仓库下载编译好的压缩包,避免源码编译的各种坑:
bash复制wget https://github.com/alibaba/nacos/releases/download/2.0.3/nacos-server-2.0.3.tar.gz
tar -zxvf nacos-server-2.0.3.tar.gz
cd nacos
目录结构说明:
code复制bin/ # 启动脚本
conf/ # 配置文件
logs/ # 日志文件
target/ # 核心jar包
最简单的启动方式(适用于开发测试):
bash复制sh bin/startup.sh -m standalone
启动后验证:
bash复制tail -f logs/start.out
# 看到"Nacos started successfully"即成功
访问控制台:
code复制http://服务器IP:8848/nacos
默认账号密码:nacos/nacos
集群模式需要修改conf/cluster.conf文件,列出所有节点IP:
bash复制echo "192.168.1.101:8848" >> conf/cluster.conf
echo "192.168.1.102:8848" >> conf/cluster.conf
echo "192.168.1.103:8848" >> conf/cluster.conf
然后修改conf/application.properties:
properties复制# 启用集群模式
nacos.standalone=false
# 数据库配置(推荐MySQL)
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8
db.user=nacos
db.password=your_strong_password
重要:必须使用外部数据库,默认内嵌Derby数据库不适合生产环境!
编辑bin/startup.sh,找到JVM配置部分:
bash复制JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g"
推荐配置(8GB内存机器):
code复制-Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m
修改conf/application.properties:
properties复制# 日志级别调整
logging.level.com.alibaba.nacos=INFO
# 日志分割配置
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.directory=logs
server.tomcat.accesslog.prefix=access_log
server.tomcat.accesslog.file-date-format=.yyyy-MM-dd
bash复制curl -X PUT 'http://127.0.0.1:8848/nacos/v1/auth/users?username=nacos&newPassword=新密码'
properties复制nacos.core.auth.enabled=true
nacos.core.auth.system.type=nacos
nacos.core.auth.plugin.nacos.token.secret.key=自定义密钥
Nacos提供以下监控接口:
code复制/nacos/actuator/health # 健康状态
/nacos/actuator/metrics # 性能指标
/nacos/actuator/prometheus # Prometheus格式指标
解决方法:
bash复制netstat -tunlp | grep 8848
kill -9 占用进程PID
检查步骤:
bash复制curl http://127.0.0.1:8848/nacos
排查方法:
bash复制telnet 其他节点IP 7848
对于配置数据,可以使用Nacos官方提供的API导出导入工具:
bash复制# 导出
curl -X GET "http://旧集群:8848/nacos/v1/cs/configs?export=true" > configs.zip
# 导入
curl -X POST "http://新集群:8848/nacos/v1/cs/configs?import=true" -H "Content-Type: multipart/form-data" -F "file=@configs.zip"
对于服务数据,建议通过控制台手动导出导入,或使用Nacos-Sync工具进行跨集群同步。
经过多个项目的实战检验,我总结出这些经验:
部署架构:
备份策略:
监控指标:
性能调优:
实际部署中遇到过最棘手的问题是网络分区导致脑裂,最终通过配置合适的集群选举超时时间(默认20s可调整为15s)解决了问题。建议在预发布环境充分测试各种故障场景下的集群表现。