1. 为什么选择Nacos 2.2.3单机部署?
在微服务架构中,服务发现和配置管理是两大核心需求。Nacos作为阿里巴巴开源的动态服务发现、配置和服务管理平台,已经成为云原生领域的标配组件。我选择Nacos 2.2.3版本进行部署,主要基于以下几个考虑:
首先,2.2.3是Nacos的稳定版本,相比早期版本修复了多个关键性bug。特别是在持久化方面,这个版本对MySQL的支持更加完善。其次,单机模式适合中小型项目快速验证和开发环境使用,避免了集群部署的复杂性。最后,CentOS7作为企业级Linux发行版,其稳定性和安全性已经过长期验证,是生产环境的常见选择。
提示:虽然Nacos最新版本已到3.x,但2.2.3版本在稳定性和兼容性上表现优异,特别适合需要长期运行的业务系统。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与前置条件
2.1 系统环境检查
在开始安装前,我们需要确保CentOS7系统满足以下要求:
- 操作系统:CentOS 7.6及以上(建议使用最小化安装)
- 内存:至少2GB(推荐4GB)
- 磁盘空间:至少10GB可用空间
- Java环境:JDK 1.8或以上
可以通过以下命令检查系统基本信息:
bash复制# 查看系统版本
cat /etc/redhat-release
# 查看内存和交换空间
free -h
# 查看磁盘空间
df -h
# 检查Java版本
java -version
2.2 安装必要依赖
Nacos运行需要Java环境支持,以下是安装步骤:
- 安装OpenJDK 8:
bash复制sudo yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
- 设置JAVA_HOME环境变量:
bash复制echo "export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk" >> ~/.bashrc
source ~/.bashrc
- 验证安装:
bash复制java -version
javac -version
3. MySQL数据库配置
3.1 MySQL安装与初始化
Nacos支持将配置数据持久化到MySQL,这比使用内置的Derby数据库更可靠,适合生产环境。以下是MySQL 5.7的安装步骤:
- 添加MySQL YUM仓库:
bash复制sudo rpm -Uvh https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
- 安装MySQL服务器:
bash复制sudo yum install -y mysql-community-server
- 启动MySQL服务:
bash复制sudo systemctl start mysqld
sudo systemctl enable mysqld
- 获取临时密码并修改:
bash复制grep 'temporary password' /var/log/mysqld.log
mysql_secure_installation
3.2 创建Nacos数据库
登录MySQL后执行以下SQL创建Nacos所需的数据库和用户:
sql复制CREATE DATABASE nacos_config CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'nacos'@'%' IDENTIFIED BY 'Nacos@123';
GRANT ALL PRIVILEGES ON nacos_config.* TO 'nacos'@'%';
FLUSH PRIVILEGES;
注意:生产环境中请使用更复杂的密码,并考虑限制访问IP。
4. Nacos安装与配置
4.1 下载与解压Nacos
从Nacos GitHub发布页面下载2.2.3版本:
bash复制wget https://github.com/alibaba/nacos/releases/download/2.2.3/nacos-server-2.2.3.tar.gz
tar -zxvf nacos-server-2.2.3.tar.gz -C /usr/local/
cd /usr/local/nacos
4.2 配置MySQL持久化
- 初始化数据库表结构:
bash复制mysql -u nacos -p nacos_config < conf/mysql-schema.sql
- 修改conf/application.properties配置:
properties复制# 启用MySQL持久化
spring.datasource.platform=mysql
# 配置MySQL连接
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=nacos
db.password=Nacos@123
4.3 防火墙配置
如果系统启用了防火墙,需要开放Nacos端口:
bash复制sudo firewall-cmd --zone=public --add-port=8848/tcp --permanent
sudo firewall-cmd --reload
5. 启动与验证Nacos服务
5.1 启动Nacos
Nacos支持多种启动方式,单机模式下建议使用:
bash复制sh bin/startup.sh -m standalone
检查启动日志:
bash复制tail -f logs/start.out
5.2 验证服务
- 检查进程:
bash复制ps -ef | grep nacos
- 访问Web界面:
code复制http://服务器IP:8848/nacos
默认账号密码都是nacos
5.3 服务注册测试
使用curl测试服务注册:
bash复制curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=test-service&ip=127.0.0.1&port=8080'
查询服务列表验证:
bash复制curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=test-service'
6. 常见问题排查
6.1 启动失败排查
如果Nacos启动失败,可以检查以下几个方面:
- 端口冲突:8848端口是否被占用
bash复制netstat -tlnp | grep 8848
- 内存不足:调整启动内存
bash复制vim bin/startup.sh
# 修改JVM参数
JAVA_OPT="${JAVA_OPT} -Xms512m -Xmx512m"
- MySQL连接问题:检查MySQL服务状态和连接配置
6.2 数据持久化验证
验证数据是否真正持久化到MySQL:
- 在Web界面创建配置
- 重启Nacos服务
- 检查配置是否仍然存在
- 直接查询MySQL数据库确认数据
sql复制USE nacos_config;
SELECT * FROM config_info;
7. 生产环境优化建议
虽然本文演示的是单机部署,但为了更接近生产环境,可以考虑以下优化:
- 监控配置:集成Prometheus监控
properties复制# application.properties中添加
management.endpoints.web.exposure.include=*
- 日志轮转:配置logback日志策略
xml复制<!-- conf/logback.xml中配置 -->
<appender name="nacosLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/nacos.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
<maxFileSize>100MB</maxFileSize>
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
- 定期备份:设置MySQL数据库自动备份
bash复制# 每天凌晨备份
0 0 * * * mysqldump -u nacos -p'Nacos@123' nacos_config > /backup/nacos_$(date +\%Y\%m\%d).sql
8. 实际使用中的经验分享
在多个项目中使用Nacos后,我总结了以下几点经验:
-
命名空间规划:建议按环境(dev/test/prod)划分命名空间,避免配置混乱
-
配置版本控制:重要配置变更前先导出备份,Nacos的配置历史功能有限
-
敏感配置加密:不要将数据库密码等敏感信息明文存储在配置中心
-
客户端兼容性:注意Nacos Server和Client版本的匹配,避免兼容性问题
-
健康检查:定期检查Nacos服务健康状态,可以编写简单的shell监控脚本
bash复制#!/bin/bash
response=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:8848/nacos/v1/ns/health)
if [ "$response" != "200" ]; then
echo "Nacos服务异常!" | mail -s "Nacos监控告警" admin@example.com
fi
对于需要更高可用性的场景,可以考虑升级到Nacos集群部署,但单机模式已经能满足大多数开发和测试环境的需求。MySQL持久化的配置确保了即使Nacos服务重启,配置数据也不会丢失,这对生产环境至关重要。
