1. 项目概述
在微服务架构盛行的当下,服务发现与配置管理已成为系统设计的核心需求。Nacos作为阿里巴巴开源的动态服务发现、配置和服务管理平台,凭借其轻量级、高可用和易扩展的特性,在众多微服务解决方案中脱颖而出。本文将基于CentOS7操作系统,详细演示Nacos 2.2.3版本的单机环境搭建过程,并重点配置MySQL持久化存储,确保配置数据不会因服务重启而丢失。
对于中小型团队或项目初期,单机版Nacos完全能够满足开发测试需求。相比集群部署,单机模式具有部署简单、资源占用少等优势,特别适合快速搭建本地开发环境或POC验证。而通过MySQL持久化配置,即使Nacos服务重启,所有注册的服务实例和配置信息都能完整保留,大大提升了开发调试的便利性。
2. 环境准备与依赖安装
2.1 系统环境检查
首先确保你的CentOS7系统已做好基础准备:
# 检查系统版本 cat /etc/redhat-release # 更新系统包 sudo yum update -y # 安装常用工具 sudo yum install -y wget curl vim net-tools注意:建议使用全新的CentOS7系统进行操作,避免已有环境造成端口冲突或依赖问题。如果是在公司内网环境,可能需要先配置yum代理。
2.2 Java环境安装
Nacos 2.2.3需要JDK 1.8或以上版本运行。推荐安装OpenJDK:
# 安装OpenJDK 8 sudo yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel # 验证安装 java -version javac -version如果系统已安装其他Java版本,可以通过以下命令切换默认版本:
sudo alternatives --config java sudo alternatives --config javac2.3 MySQL数据库安装
为Nacos配置持久化存储,我们需要先安装MySQL 5.7+:
# 添加MySQL Yum仓库 sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm # 禁用MySQL 8.0仓库,启用5.7仓库 sudo yum-config-manager --disable mysql80-community sudo yum-config-manager --enable mysql57-community # 安装MySQL 5.7 sudo yum install -y mysql-community-server # 启动MySQL服务 sudo systemctl start mysqld sudo systemctl enable mysqld安装完成后,需要获取初始密码并修改:
# 获取临时密码 sudo grep 'temporary password' /var/log/mysqld.log # 使用临时密码登录 mysql -uroot -p # 修改root密码 ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码'; # 密码策略设置(开发环境可降低复杂度要求) SET GLOBAL validate_password_policy=LOW;3. Nacos安装与配置
3.1 下载与解压Nacos
从官方仓库获取Nacos 2.2.3发布包:
# 创建安装目录 sudo mkdir -p /opt/nacos sudo chown $(whoami):$(whoami) /opt/nacos cd /opt/nacos # 下载Nacos(如网络问题可尝试国内镜像) 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 cd nacos3.2 初始化MySQL数据库
在MySQL中创建Nacos专用的数据库和用户:
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;然后导入Nacos提供的SQL脚本初始化表结构:
mysql -unacos -pNacos@123 nacos_config < conf/mysql-schema.sql安全提示:生产环境请使用更复杂的密码,并限制访问IP。此处示例密码仅用于演示。
3.3 配置MySQL持久化
编辑Nacos的配置文件启用MySQL存储:
vim conf/application.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&useUnicode=true&useSSL=false&serverTimezone=UTC db.user.0=nacos db.password.0=Nacos@123注意:如果MySQL与Nacos不在同一主机,请确保MySQL已配置远程访问权限,并检查防火墙设置。
4. 启动与验证Nacos服务
4.1 启动Nacos服务
Nacos提供了多种启动方式,单机模式推荐使用内置的startup脚本:
# 以单机模式启动 sh bin/startup.sh -m standalone启动成功后,可以通过日志查看运行状态:
tail -f logs/start.out当看到"Nacos started successfully in stand alone mode"日志时,表示启动成功。
4.2 访问控制台
Nacos默认监听8848端口,访问地址为:
http://服务器IP:8848/nacos默认登录账号密码均为nacos。首次登录后,建议立即修改默认密码。
4.3 服务注册测试
通过Nacos提供的API测试服务注册功能:
# 注册服务实例 curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=example-service&ip=127.0.0.1&port=8080' # 查询服务列表 curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/service/list'4.4 配置管理测试
测试配置发布与获取功能:
# 发布配置 curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs" -d "dataId=example.properties&group=DEFAULT_GROUP&content=server.port=8080" # 获取配置 curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=example.properties&group=DEFAULT_GROUP"5. 系统配置优化
5.1 防火墙配置
如果启用了firewalld,需要开放Nacos相关端口:
sudo firewall-cmd --zone=public --add-port=8848/tcp --permanent sudo firewall-cmd --reload5.2 设置开机自启
创建systemd服务文件实现开机自启:
sudo vim /etc/systemd/system/nacos.service添加以下内容:
[Unit] Description=Nacos Server After=network.target [Service] Type=forking ExecStart=/opt/nacos/nacos/bin/startup.sh -m standalone ExecStop=/opt/nacos/nacos/bin/shutdown.sh Restart=on-failure User=$(whoami) Group=$(whoami) [Install] WantedBy=multi-user.target然后启用服务:
sudo systemctl daemon-reload sudo systemctl enable nacos sudo systemctl start nacos5.3 JVM参数调优
根据服务器配置调整JVM参数,编辑启动脚本:
vim bin/startup.sh找到JAVA_OPT配置,根据实际情况调整:
JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"提示:对于4GB内存的服务器,建议Xms和Xmx设置为2g;8GB内存可设置为4g。避免设置过大导致系统内存不足。
6. 常见问题排查
6.1 启动失败问题
问题现象:启动时报错"Unable to start embedded Tomcat"
可能原因:
- 端口8848被占用
- Java环境不兼容
- 数据库连接失败
解决方案:
# 检查端口占用 netstat -tlnp | grep 8848 # 检查Java版本 java -version # 检查数据库连接 mysql -unacos -pNacos@123 -h127.0.0.1 -e "use nacos_config; show tables;"6.2 MySQL连接问题
问题现象:日志中出现"Communications link failure"
可能原因:
- MySQL服务未启动
- 用户名密码错误
- 远程访问权限未开启
解决方案:
# 检查MySQL服务状态 sudo systemctl status mysqld # 验证数据库连接 mysql -unacos -pNacos@123 -h127.0.0.1 # 检查用户权限 SELECT host, user FROM mysql.user;6.3 控制台无法访问
问题现象:服务已启动但无法访问8848端口
可能原因:
- 防火墙未开放端口
- 服务器安全组限制
- Nacos绑定IP配置错误
解决方案:
# 检查防火墙 sudo firewall-cmd --list-ports # 检查Nacos绑定IP grep "server.ip" conf/application.properties # 默认应为0.0.0.0或服务器实际IP7. 进阶配置建议
7.1 数据备份策略
虽然配置了MySQL持久化,但仍需定期备份数据:
# 简单备份脚本示例 mysqldump -unacos -pNacos@123 nacos_config > /opt/nacos_backup/nacos_config_$(date +%Y%m%d).sql建议将备份脚本加入crontab,实现自动备份:
0 2 * * * /usr/bin/mysqldump -unacos -pNacos@123 nacos_config > /opt/nacos_backup/nacos_config_$(date +\%Y\%m\%d).sql7.2 监控配置
为Nacos添加基础监控:
使用Spring Boot Actuator端点:
management.endpoints.web.exposure.include=health,info,metrics management.endpoint.health.show-details=always通过Prometheus监控:
metrics.enabled=true metrics.export.prometheus.enabled=true
7.3 安全加固
生产环境必须进行安全加固:
- 修改默认账号密码
- 启用HTTPS
- 配置IP白名单
- 定期审计日志
# 日志审计示例 grep "login" logs/access_log.2023-*.log | awk '{print $1}' | sort | uniq -c | sort -nr