前言
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