☰
Nacos 3.x集成PostgreSQL数据库实战指南
2026/11/3 7:30:21 网站建设 项目流程

1. Nacos 3.x 集成PostgreSQL数据库实战指南

在微服务架构中,服务发现和配置管理是两大核心需求。Nacos作为阿里巴巴开源的服务发现和配置管理平台,已经成为众多企业的首选方案。本文将详细介绍如何为Nacos 3.x版本集成PostgreSQL数据库支持,并构建高可用的Nacos集群环境。

1.1 为什么选择PostgreSQL作为Nacos的存储后端

Nacos默认支持Derby和MySQL数据库,但在实际生产环境中,PostgreSQL凭借其强大的功能、优异的性能和可靠性,成为越来越多企业的选择。PostgreSQL的主要优势包括:

  • 完整的事务支持
  • 丰富的索引类型(B-tree、Hash、GiST、SP-GiST、GIN、BRIN)
  • 强大的JSON支持
  • 可扩展性强,支持自定义函数和数据类型
  • 成熟的社区和商业支持

1.2 环境准备清单

在开始之前,请确保准备好以下环境:

软件/工具版本要求备注
Nacos3.1.1核心组件
操作系统CentOS 7推荐生产环境使用
Docker26.1.4容器化部署
Docker Composev5.0.2容器编排
PostgreSQL18.1数据库服务
JavaJDK 17插件编译环境
Maven3.6+项目构建工具

2. PostgreSQL插件编译与配置

2.1 插件源码获取

由于官方提供的PostgreSQL插件是使用Java 21编译的,而Nacos 3.1.1官方推荐使用Java 17运行环境,因此我们需要从源码重新编译适配Java 17的版本。

获取源码的两种方式:

  1. 通过Git克隆仓库:
git clone https://github.com/lilinhai/nacos-datasource-plugin-ext
  1. 直接下载发布包:
wget https://github.com/lilinhai/nacos-datasource-plugin-ext/archive/refs/tags/3.1.1.zip unzip 3.1.1.zip

提示:如果遇到网络问题,可以考虑使用镜像源或者开发工具内置的Git功能进行克隆。

2.2 本地构建插件

在编译之前,需要确保Java环境设置为JDK 17:

  1. 检查Java版本:
java -version
  1. 如果显示不是Java 17,可以使用以下命令切换(假设已安装多版本JDK):
export JAVA_HOME=/path/to/jdk17 export PATH=$JAVA_HOME/bin:$PATH
  1. 开始构建插件:
mvn clean package -DskipTests -Dgpg.skip=true -Dmaven.javadoc.skip=true

构建完成后,你会在target目录下找到生成的JAR文件:nacos-postgresql-datasource-plugin-ext-3.1.1.jar

注意事项:构建过程中可能会下载大量依赖,请确保网络畅通。如果遇到依赖下载失败,可以尝试配置Maven镜像源。

3. Docker镜像定制

3.1 准备构建材料

创建一个工作目录,存放以下文件:

  1. application.properties:Nacos配置文件
  2. Dockerfile:镜像构建文件
  3. 编译好的PostgreSQL插件JAR文件

目录结构如下:

/app/ ├── application.properties ├── Dockerfile └── nacos-postgresql-datasource-plugin-ext-3.1.1.jar

3.2 关键配置文件详解

3.2.1 application.properties

这是Nacos的核心配置文件,我们需要特别关注数据库相关配置:

# 数据库平台类型 spring.sql.init.platform=${SPRING_DATASOURCE_PLATFORM:} # 数据库连接配置 db.num=1 db.url.0=jdbc:postgresql://${POSTGRESQL_SERVICE_HOST}:${POSTGRESQL_SERVICE_PORT:5432}/${POSTGRESQL_SERVICE_DB_NAME}?currentSchema=nacos&useUnicode=true&tcpKeepAlive=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&reWriteBatchedInserts=true&ApplicationName=nacos_java db.user.0=${POSTGRESQL_SERVICE_USER} db.password.0=${POSTGRESQL_SERVICE_PASSWORD} db.pool.config.driverClassName=org.postgresql.Driver # 连接池配置 db.pool.config.connectionTimeout=${DB_POOL_CONNECTION_TIMEOUT:30000} db.pool.config.validationTimeout=10000 db.pool.config.maximumPoolSize=20 db.pool.config.minimumIdle=2
3.2.2 Dockerfile

Dockerfile定义了如何构建自定义的Nacos镜像:

FROM nacos/nacos-server:v3.1.1 # 复制配置文件 COPY application.properties /home/nacos/conf/ # 复制PostgreSQL插件 COPY nacos-postgresql-datasource-plugin-ext-3.1.1.jar /home/nacos/plugins/ # 启动命令 CMD ["sh", "-c", "bin/docker-startup.sh"]

企业实践:在生产环境中,建议将基础镜像替换为内部镜像仓库的地址,例如:FROM your-registry.com/nacos/nacos-server:v3.1.1

3.3 构建自定义镜像

执行以下命令构建镜像:

docker build -t nacos-postgresql:3.1.1 .

构建完成后,验证镜像是否创建成功:

docker images | grep nacos-postgresql

4. PostgreSQL数据库准备

4.1 启动PostgreSQL容器

使用Docker快速启动一个PostgreSQL实例:

docker run -d \ --name postgres \ -e POSTGRES_PASSWORD=mysecretpassword \ -e POSTGRES_USER=myuser \ -e POSTGRES_DB=mydatabase \ -e PGDATA=/var/lib/postgresql/data/pgdata \ -p 5432:5432 \ -v ~/docker/postgres/data:/var/lib/postgresql/data \ --restart unless-stopped \ postgres:latest

4.2 初始化Nacos数据库结构

Nacos需要在PostgreSQL中创建专用的schema和表结构。以下是两种初始化方式:

方式1:使用命令行工具
docker run --rm --add-host=host.docker.internal:host-gateway -e PGPASSWORD=mysecretpassword postgres:latest \ psql -h host.docker.internal -U myuser -d mydatabase -c " CREATE SCHEMA IF NOT EXISTS nacos; GRANT ALL ON SCHEMA nacos TO myuser; GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA nacos TO myuser; GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA nacos TO myuser; ALTER USER myuser SET search_path TO nacos,public; "
方式2:使用图形化工具(如Navicat)

执行以下SQL语句:

CREATE SCHEMA IF NOT EXISTS nacos; GRANT ALL ON SCHEMA nacos TO myuser; GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA nacos TO myuser; GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA nacos TO myuser; ALTER USER myuser SET search_path TO nacos,public;

4.3 导入Nacos表结构

从Nacos官方GitHub仓库获取PostgreSQL版本的SQL脚本(nacos-pg-v3.1.1.sql),并在nacos schema下执行。

关键点:必须确保SQL脚本在nacos schema下执行,因为我们在application.properties中已经指定了currentSchema=nacos参数。

5. Nacos集群部署

5.1 集群目录结构准备

创建集群所需的目录结构:

mkdir -p /app/nacos-cluster cd /app/nacos-cluster mkdir -p logs/{node1,node2,node3} data/{node1,node2,node3}

5.2 Docker Compose安装

确保已安装最新版Docker Compose:

sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose docker-compose --version

5.3 集群编排文件配置

创建docker-compose.yml文件,定义3个Nacos节点:

version: '3.8' services: nacos-node1: image: nacos-postgresql:3.1.1 container_name: nacos-node1 hostname: nacos-node1 restart: unless-stopped ports: - "8848:8848" - "8080:8080" - "9848:9848" environment: - MODE=cluster - NACOS_APPLICATION_PORT=8848 - PREFER_HOST_MODE=hostname - SPRING_DATASOURCE_PLATFORM=postgresql - POSTGRESQL_SERVICE_HOST=host.docker.internal - POSTGRESQL_SERVICE_PORT=5432 - POSTGRESQL_SERVICE_DB_NAME=mydatabase - POSTGRESQL_SERVICE_USER=myuser - POSTGRESQL_SERVICE_PASSWORD=mysecretpassword - NACOS_SERVERS=nacos-node1:8848,nacos-node2:8848,nacos-node3:8848 - NACOS_AUTH_ENABLE=false - JVM_XMS=512m - JVM_XMX=512m - JVM_XMN=256m extra_hosts: - "host.docker.internal:host-gateway" volumes: - ./logs/node1:/home/nacos/logs - ./data/node1:/home/nacos/data networks: - nacos-net nacos-node2: image: nacos-postgresql:3.1.1 container_name: nacos-node2 hostname: nacos-node2 restart: unless-stopped ports: - "8849:8848" - "8081:8080" - "9849:9848" environment: - MODE=cluster - NACOS_APPLICATION_PORT=8848 - PREFER_HOST_MODE=hostname - SPRING_DATASOURCE_PLATFORM=postgresql - POSTGRESQL_SERVICE_HOST=host.docker.internal - POSTGRESQL_SERVICE_PORT=5432 - POSTGRESQL_SERVICE_DB_NAME=mydatabase - POSTGRESQL_SERVICE_USER=myuser - POSTGRESQL_SERVICE_PASSWORD=mysecretpassword - NACOS_SERVERS=nacos-node1:8848,nacos-node2:8848,nacos-node3:8848 - NACOS_AUTH_ENABLE=false - JVM_XMS=512m - JVM_XMX=512m - JVM_XMN=256m extra_hosts: - "host.docker.internal:host-gateway" volumes: - ./logs/node2:/home/nacos/logs - ./data/node2:/home/nacos/data depends_on: - nacos-node1 networks: - nacos-net nacos-node3: image: nacos-postgresql:3.1.1 container_name: nacos-node3 hostname: nacos-node3 restart: unless-stopped ports: - "8850:8848" - "8082:8080" - "9850:9848" environment: - MODE=cluster - NACOS_APPLICATION_PORT=8848 - PREFER_HOST_MODE=hostname - SPRING_DATASOURCE_PLATFORM=postgresql - POSTGRESQL_SERVICE_HOST=host.docker.internal - POSTGRESQL_SERVICE_PORT=5432 - POSTGRESQL_SERVICE_DB_NAME=mydatabase - POSTGRESQL_SERVICE_USER=myuser - POSTGRESQL_SERVICE_PASSWORD=mysecretpassword - NACOS_SERVERS=nacos-node1:8848,nacos-node2:8848,nacos-node3:8848 - NACOS_AUTH_ENABLE=false - JVM_XMS=512m - JVM_XMX=512m - JVM_XMN=256m extra_hosts: - "host.docker.internal:host-gateway" volumes: - ./logs/node3:/home/nacos/logs - ./data/node3:/home/nacos/data depends_on: - nacos-node2 networks: - nacos-net networks: nacos-net: driver: bridge ipam: config: - subnet: 172.30.0.0/16

5.4 启动集群

执行以下命令启动整个集群:

docker-compose up -d

查看集群状态:

docker-compose ps

查看实时日志:

docker-compose logs -f

6. 集群验证与运维

6.1 访问Nacos控制台

三个节点的访问地址分别为:

  • Node1: http://your-server-ip:8848/nacos
  • Node2: http://your-server-ip:8849/nacos
  • Node3: http://your-server-ip:8850/nacos

默认登录账号:nacos/nacos

6.2 集群状态检查

在控制台的"集群管理"->"节点列表"中,应该能看到三个节点都处于健康状态。

6.3 防火墙配置

如果服务器启用了防火墙,需要开放必要的端口:

sudo firewall-cmd --permanent --add-port=8848-8850/tcp sudo firewall-cmd --permanent --add-port=9848-9850/tcp sudo firewall-cmd --reload

6.4 常用管理命令

# 查看所有容器状态 docker-compose ps # 重启整个集群 docker-compose restart # 重启单个节点 docker-compose restart nacos-node1 # 查看实时日志 docker-compose logs -f nacos-node1 # 停止集群 docker-compose down # 强制重建容器 docker-compose up -d --force-recreate

7. 生产环境建议

  1. 数据库高可用:考虑使用PostgreSQL的主从复制或集群方案,如Patroni或Citus

  2. 资源分配:根据实际负载调整JVM参数,生产环境建议:

    - JVM_XMS=2g - JVM_XMX=2g - JVM_XMN=1g
  3. 监控告警:配置Prometheus监控Nacos和PostgreSQL的关键指标

  4. 定期备份:建立Nacos配置和PostgreSQL数据的定期备份机制

  5. 安全加固:

    • 启用Nacos的身份认证
    • 配置PostgreSQL的访问控制
    • 使用网络策略限制数据库访问来源

通过以上步骤,我们成功构建了一个基于PostgreSQL的高可用Nacos集群。这种架构不仅提供了更好的数据可靠性和性能,还能满足企业级应用的高可用需求。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询