前言

Nacos 是一个开源的服务发现和配置管理平台,它支持动态服务发现、配置管理、服务健康检查和元数据管理等功能。使用 Docker 部署 Nacos 可以快速实现服务注册与发现的高可用性。本文将详细介绍如何在 Docker 环境下部署 Nacos,并配置高可用服务注册与发现。

环境准备

在开始部署之前,请确保您的系统已满足以下要求:

  • 服务器环境:至少 2 核 CPU 和 4GB 内存。
  • Docker 环境:Docker 版本需为 1.13.1 以上。

搭建Nacos操作过程

1. 拉取Nacos镜像

docker pull nacos/nacos-server:v2.1.2

2. 创建配置数据库

Nacos 使用 MySQL 作为配置数据库,因此需要创建数据库和表。以下是创建数据库和表的 SQL 脚本:

”`sql CREATE DATABASE nacos_config; USE nacos_config;

CREATE TABLE config_info ( data_id VARCHAR(255) NOT NULL, group VARCHAR(255), content LONGTEXT NOT NULL, md5 VARCHAR(35), gmt_create TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, gmt_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, src_user VARCHAR(255), src_ip VARCHAR(50), app_name VARCHAR(128), tenant_id VARCHAR(128), PRIMARY KEY (data_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE config_info_aggr ( data_id VARCHAR(255) NOT NULL, group VARCHAR(255), content LONGTEXT NOT NULL, md5 VARCHAR(35), gmt_create TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, gmt_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, app_name VARCHAR(128), tenant_id VARCHAR(128), PRIMARY KEY (data_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE config_info_beta ( data_id VARCHAR(255) NOT NULL, group VARCHAR(255), content LONGTEXT NOT NULL, md5 VARCHAR(35), gmt_create TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, gmt_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, app_name VARCHAR(128), tenant_id VARCHAR(128), PRIMARY KEY (data_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE config_info_history ( data_id VARCHAR(255) NOT NULL, group VARCHAR(255), content LONGTEXT NOT NULL, md5 VARCHAR(35), gmt_create TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, gmt_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, app_name VARCHAR(128), tenant_id VARCHAR(128), PRIMARY KEY (data_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE config_beta_info ( data_id VARCHAR(255) NOT NULL, group VARCHAR(255), content LONGTEXT NOT NULL, md5 VARCHAR(35), gmt_create TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, gmt_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, app_name VARCHAR(128), tenant_id VARCHAR(128), PRIMARY KEY (data_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE config_param ( id INT NOT NULL AUTO_INCREMENT, data_id VARCHAR(255) NOT NULL, content LONGTEXT NOT NULL, md5 VARCHAR(35), gmt_create TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, gmt_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE monitor_config_info ( data_id VARCHAR(255) NOT NULL, group VARCHAR(255), content LONGTEXT NOT NULL, md5 VARCHAR(35), gmt_create TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, gmt_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, app_name VARCHAR(128), tenant_id VARCHAR(128), PRIMARY KEY (data_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE monitor_config_beta ( data_id VARCHAR(255) NOT NULL, group VARCHAR(255), content LONGTEXT NOT NULL, md5 VARCHAR(35), gmt_create TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, gmt_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, app_name VARCHAR(128), tenant_id VARCHAR(128), PRIMARY KEY (data_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE monitor_config_history ( data_id VARCHAR(255) NOT NULL, group VARCHAR(255), content LONGTEXT NOT NULL, md5 VARCHAR(35), gmt_create TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, gmt_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, app_name VARCHAR(128), tenant_id VARCHAR(128), PRIMARY KEY (data_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE tenant_info ( id INT NOT NULL AUTO_INCREMENT, tenant_id VARCHAR(128) NOT NULL, tenant_name VARCHAR(128) NOT NULL, tenant_desc VARCHAR(256), create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, used BOOLEAN NOT NULL, env_id VARCHAR(128), config_id VARCHAR(128), resource_group_id VARCHAR(128), resource_group_name VARCHAR(128), tenant_unit VARCHAR(128), PRIMARY KEY (id), UNIQUE KEY uk_tenant_id (tenant_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE user_role ( id INT NOT NULL AUTO_INCREMENT, user_id VARCHAR(128) NOT NULL, role VARCHAR(32) NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE users ( id INT NOT NULL AUTO_INCREMENT, user_name VARCHAR(50) NOT NULL, user_password VARCHAR(50) NOT NULL, user_type VARCHAR(10) NOT NULL, tenant_id VARCHAR(128) DEFAULT NULL, create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY uk_user_name (user_name) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE roles ( id INT NOT NULL AUTO_INCREMENT, role VARCHAR(32) NOT NULL, resource_group_id VARCHAR(128), resource_group_name VARCHAR(128), data_id VARCHAR(128), tenant_id VARCHAR(128), PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE permissions ( id INT NOT NULL AUTO_INCREMENT, user_id VARCHAR(128) NOT NULL, resource_group_id VARCHAR(128), resource_group_name VARCHAR(128), data_id VARCHAR(128), tenant_id VARCHAR(128), operation VARCHAR(10) NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE resources ( id INT NOT NULL AUTO_INCREMENT, resource VARCHAR(255) NOT NULL, resource_group VARCHAR(128), tenant_id VARCHAR(128), PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE roles_resources ( id INT NOT NULL AUTO_INCREMENT, role_id INT NOT NULL, resource_id INT NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE groups ( id INT NOT NULL AUTO_INCREMENT, group_name VARCHAR(128) NOT NULL, data_id VARCHAR(128) NOT NULL, tenant_id VARCHAR(128), PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE app_groups ( id INT NOT NULL AUTO_INCREMENT, app_name VARCHAR(128) NOT NULL, data_id VARCHAR(128) NOT NULL, group_id INT NOT NULL, tenant_id VARCHAR(128), PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE data_change ( id INT NOT NULL AUTO_INCREMENT, data_id VARCHAR(128) NOT NULL, content LONGTEXT NOT NULL, user_id VARCHAR(128), operate_type VARCHAR(10) NOT NULL, gmt_create TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, gmt_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, tenant_id VARCHAR(128), PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE tenant ( id INT NOT NULL AUTO_INCREMENT, tenant_id VARCHAR(128) NOT NULL, tenant_name VARCHAR(128) NOT NULL, tenant_desc VARCHAR(256), create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, used BOOLEAN NOT NULL, resource_group_id VARCHAR(128), resource_group_name VARCHAR(128), config_id VARCHAR(128), config_beta_id VARCHAR(128), config_history_id VARCHAR(128), monitor_config_id VARCHAR(128), monitor_config_beta_id VARCHAR(128), monitor_config_history_id VARCHAR(128), tenant_unit VARCHAR(128), PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE users_groups ( id INT NOT NULL AUTO_INCREMENT, user_id VARCHAR(128) NOT NULL, group_id INT NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE users_applications ( id INT NOT NULL AUTO_INCREMENT, user_id VARCHAR(128) NOT NULL, app_id INT NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE app ( id INT NOT NULL AUTO_INCREMENT, app_name VARCHAR(128) NOT NULL, app_desc VARCHAR(256), app_type VARCHAR(32), create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY uk_app_name (app_name) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE app_instance ( id INT NOT NULL AUTO_INCREMENT, app_name VARCHAR(128) NOT NULL, ip VARCHAR(50) NOT NULL, port INT NOT NULL, healthy BOOLEAN NOT NULL, start_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE app_instance_mapping ( id INT NOT NULL AUTO_INCREMENT, app_name VARCHAR(128) NOT NULL, ip VARCHAR(50) NOT NULL, port INT NOT NULL, instance_id INT NOT NULL, app_id INT NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE config_data_change ( id INT NOT NULL AUTO_INCREMENT, data_id VARCHAR(128) NOT NULL, content LONGTEXT NOT NULL, user_id VARCHAR(128), operate_type VARCHAR(10) NOT NULL, gmt_create TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, gmt_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, tenant_id VARCHAR(128), PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE config_beta_change ( id INT NOT NULL AUTO_INCREMENT, data_id VARCHAR(128) NOT NULL, content LONGTEXT NOT NULL, user_id VARCHAR(128), operate_type VARCHAR(10) NOT NULL, gmt_create TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, gmt_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, tenant_id VARCHAR(128), PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE config_history_change ( id INT NOT NULL AUTO_INCREMENT, data_id VARCHAR(128) NOT NULL, content LONGTEXT NOT NULL, user_id VARCHAR(128), operate_type VARCHAR(10) NOT NULL, gmt_create TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, gmt_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, tenant_id VARCHAR(128), PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE config_monitor_change ( id INT NOT NULL AUTO_INCREMENT, data_id VARCHAR(128) NOT NULL, content LONGTEXT NOT NULL, user_id VARCHAR(128), operate_type VARCHAR(10) NOT NULL, gmt_create TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, gmt_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, tenant_id VARCHAR(128), PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE config_beta_monitor_change ( id INT NOT NULL AUTO_INCREMENT, data_id VARCHAR(128) NOT NULL, content LONGTEXT NOT NULL, user_id VARCHAR(128), operate_type VARCHAR(10) NOT NULL, gmt_create TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, gmt_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, tenant_id VARCHAR(128), PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE config_history_monitor_change ( id INT NOT NULL AUTO_INCREMENT, data_id VARCHAR(128) NOT NULL, content LONGTEXT NOT NULL, user_id VARCHAR(128), operate_type VARCHAR(10) NOT NULL, gmt_create TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, gmt_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, tenant_id VARCHAR(128), PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE config_beta_history_change ( id INT NOT NULL AUTO_INCREMENT, data_id VARCHAR(128) NOT NULL, content LONGTEXT NOT NULL, user_id VARCHAR(128), operate_type VARCHAR(10) NOT NULL, gmt_create TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, gmt_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, tenant_id VARCHAR(128), PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE config_beta_monitor_history_change ( id INT NOT NULL AUTO_INCREMENT, data_id VARCHAR(128) NOT NULL, content LONGTEXT NOT NULL, user_id VARCHAR(128), operate_type VARCHAR(10) NOT NULL, gmt_create TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, gmt_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, tenant_id VARCHAR(128), PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE config_history_beta_change ( id INT NOT NULL AUTO_INCREMENT, data_id VARCHAR(128) NOT NULL, content LONGTEXT NOT NULL, user_id VARCHAR(128), operate_type VARCHAR(10) NOT NULL, gmt_create TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, gmt_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, tenant_id VARCHAR(128), PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE config_history_monitor_beta_change ( id INT NOT NULL AUTO_INCREMENT, data_id VARCHAR(128) NOT NULL, content LONGTEXT NOT NULL, user_id VARCHAR(128), operate_type VARCHAR(10) NOT NULL, gmt_create TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, gmt_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, tenant_id VARCHAR(128), PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE config_monitor_beta_change ( id INT NOT NULL AUTO_INCREMENT, data_id VARCHAR(128) NOT NULL, content LONGTEXT NOT NULL, user_id VARCHAR(128), operate_type VARCHAR(10) NOT NULL, gmt_create TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, gmt_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, tenant_id VARCHAR(128), PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE config_monitor_history_beta_change ( id INT NOT NULL AUTO_INCREMENT, data_id VARCHAR(128) NOT NULL, content LONGTEXT NOT NULL, user_id VARCHAR(128), operate_type VARCHAR(10) NOT NULL, gmt_create TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, gmt_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, tenant_id VARCHAR(128), PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE config_beta_monitor_history_beta_change ( id INT NOT NULL AUTO_INCREMENT, data_id VARCHAR(128) NOT NULL, content LONGTEXT NOT NULL, user_id VARCHAR(128), operate_type VARCHAR(10) NOT NULL, gmt_create TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, `gmt_modified