Appearance
Docker Compose 部署 Nacos 高可用集群
1. 基础 Nacos 集群搭建
1.1. ./mysql/initdb.d/nacos-mysql.sql
SQL
/*
* Copyright 1999-2018 Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/******************************************/
/* 表名称 = config_info */
/******************************************/
CREATE TABLE `config_info` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`data_id` VARCHAR(255) NOT NULL COMMENT 'data_id',
`group_id` VARCHAR(128) DEFAULT NULL COMMENT 'group_id',
`content` LONGTEXT NOT NULL COMMENT 'content',
`md5` VARCHAR(32) DEFAULT NULL COMMENT 'md5',
`gmt_create` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`gmt_modified` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
`src_user` TEXT COMMENT 'source user',
`src_ip` VARCHAR(50) DEFAULT NULL COMMENT 'source ip',
`app_name` VARCHAR(128) DEFAULT NULL COMMENT 'app_name',
`tenant_id` VARCHAR(128) DEFAULT '' COMMENT '租户字段',
`c_desc` VARCHAR(256) DEFAULT NULL COMMENT 'configuration description',
`c_use` VARCHAR(64) DEFAULT NULL COMMENT 'configuration usage',
`effect` VARCHAR(64) DEFAULT NULL COMMENT '配置生效的描述',
`type` VARCHAR(64) DEFAULT NULL COMMENT '配置的类型',
`c_schema` TEXT COMMENT '配置的模式',
`encrypted_data_key` VARCHAR(1024) NOT NULL DEFAULT '' COMMENT '密钥',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`, `group_id`, `tenant_id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8
COLLATE = utf8_bin COMMENT ='config_info';
/******************************************/
/* 表名称 = config_info since 2.5.0 */
/******************************************/
CREATE TABLE `config_info_gray` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`data_id` VARCHAR(255) NOT NULL COMMENT 'data_id',
`group_id` VARCHAR(128) NOT NULL COMMENT 'group_id',
`content` LONGTEXT NOT NULL COMMENT 'content',
`md5` VARCHAR(32) DEFAULT NULL COMMENT 'md5',
`src_user` TEXT COMMENT 'src_user',
`src_ip` VARCHAR(100) DEFAULT NULL COMMENT 'src_ip',
`gmt_create` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'gmt_create',
`gmt_modified` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'gmt_modified',
`app_name` VARCHAR(128) DEFAULT NULL COMMENT 'app_name',
`tenant_id` VARCHAR(128) DEFAULT '' COMMENT 'tenant_id',
`gray_name` VARCHAR(128) NOT NULL COMMENT 'gray_name',
`gray_rule` TEXT NOT NULL COMMENT 'gray_rule',
`encrypted_data_key` VARCHAR(256) NOT NULL DEFAULT '' COMMENT 'encrypted_data_key',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_configinfogray_datagrouptenantgray` (`data_id`, `group_id`, `tenant_id`, `gray_name`),
KEY `idx_dataid_gmt_modified` (`data_id`, `gmt_modified`),
KEY `idx_gmt_modified` (`gmt_modified`)
) ENGINE = InnoDB
AUTO_INCREMENT = 1
DEFAULT CHARSET = utf8 COMMENT ='config_info_gray';
/******************************************/
/* 表名称 = config_tags_relation */
/******************************************/
CREATE TABLE `config_tags_relation` (
`id` BIGINT(20) NOT NULL COMMENT 'id',
`tag_name` VARCHAR(128) NOT NULL COMMENT 'tag_name',
`tag_type` VARCHAR(64) DEFAULT NULL COMMENT 'tag_type',
`data_id` VARCHAR(255) NOT NULL COMMENT 'data_id',
`group_id` VARCHAR(128) NOT NULL COMMENT 'group_id',
`tenant_id` VARCHAR(128) DEFAULT '' COMMENT 'tenant_id',
`nid` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT 'nid, 自增长标识',
PRIMARY KEY (`nid`),
UNIQUE KEY `uk_configtagrelation_configidtag` (`id`, `tag_name`, `tag_type`),
KEY `idx_tenant_id` (`tenant_id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8
COLLATE = utf8_bin COMMENT ='config_tag_relation';
/******************************************/
/* 表名称 = group_capacity */
/******************************************/
CREATE TABLE `group_capacity` (
`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`group_id` VARCHAR(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群',
`quota` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
`usage` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '使用量',
`max_size` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
`max_aggr_count` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值',
`max_aggr_size` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
`max_history_count` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
`gmt_create` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`gmt_modified` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_group_id` (`group_id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8
COLLATE = utf8_bin COMMENT ='集群、各Group容量信息表';
/******************************************/
/* 表名称 = his_config_info */
/******************************************/
CREATE TABLE `his_config_info` (
`id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'id',
`nid` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'nid, 自增标识',
`data_id` VARCHAR(255) NOT NULL COMMENT 'data_id',
`group_id` VARCHAR(128) NOT NULL COMMENT 'group_id',
`app_name` VARCHAR(128) DEFAULT NULL COMMENT 'app_name',
`content` LONGTEXT NOT NULL COMMENT 'content',
`md5` VARCHAR(32) DEFAULT NULL COMMENT 'md5',
`gmt_create` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`gmt_modified` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
`src_user` TEXT COMMENT 'source user',
`src_ip` VARCHAR(50) DEFAULT NULL COMMENT 'source ip',
`op_type` CHAR(10) DEFAULT NULL COMMENT 'operation type',
`tenant_id` VARCHAR(128) DEFAULT '' COMMENT '租户字段',
`encrypted_data_key` VARCHAR(1024) NOT NULL DEFAULT '' COMMENT '密钥',
`publish_type` VARCHAR(50) DEFAULT 'formal' COMMENT 'publish type gray or formal',
`gray_name` VARCHAR(50) DEFAULT NULL COMMENT 'gray name',
`ext_info` LONGTEXT DEFAULT NULL COMMENT 'ext info',
PRIMARY KEY (`nid`),
KEY `idx_gmt_create` (`gmt_create`),
KEY `idx_gmt_modified` (`gmt_modified`),
KEY `idx_did` (`data_id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8
COLLATE = utf8_bin COMMENT ='多租户改造';
/******************************************/
/* 表名称 = tenant_capacity */
/******************************************/
CREATE TABLE `tenant_capacity` (
`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`tenant_id` VARCHAR(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID',
`quota` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
`usage` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '使用量',
`max_size` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
`max_aggr_count` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数',
`max_aggr_size` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
`max_history_count` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
`gmt_create` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`gmt_modified` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_tenant_id` (`tenant_id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8
COLLATE = utf8_bin COMMENT ='租户容量信息表';
CREATE TABLE `tenant_info` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`kp` VARCHAR(128) NOT NULL COMMENT 'kp',
`tenant_id` VARCHAR(128) DEFAULT '' COMMENT 'tenant_id',
`tenant_name` VARCHAR(128) DEFAULT '' COMMENT 'tenant_name',
`tenant_desc` VARCHAR(256) DEFAULT NULL COMMENT 'tenant_desc',
`create_source` VARCHAR(32) DEFAULT NULL COMMENT 'create_source',
`gmt_create` BIGINT(20) NOT NULL COMMENT '创建时间',
`gmt_modified` BIGINT(20) NOT NULL COMMENT '修改时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`, `tenant_id`),
KEY `idx_tenant_id` (`tenant_id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8
COLLATE = utf8_bin COMMENT ='tenant_info';
CREATE TABLE `users` (
`username` VARCHAR(50) NOT NULL PRIMARY KEY COMMENT 'username',
`password` VARCHAR(500) NOT NULL COMMENT 'password',
`enabled` BOOLEAN NOT NULL COMMENT 'enabled'
);
CREATE TABLE `roles` (
`username` VARCHAR(50) NOT NULL COMMENT 'username',
`role` VARCHAR(50) NOT NULL COMMENT 'role',
UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE
);
CREATE TABLE `permissions` (
`role` VARCHAR(50) NOT NULL COMMENT 'role',
`resource` VARCHAR(128) NOT NULL COMMENT 'resource',
`action` VARCHAR(8) NOT NULL COMMENT 'action',
UNIQUE INDEX `uk_role_permission` (`role`, `resource`, `action`) USING BTREE
);1.2. .env
Properties
NACOS_VERSION=v2.5.1
MYSQL_VERSION=8.4.41.3. nacos.env
Properties
PREFER_HOST_MODE=hostname
NACOS_SERVERS=nacos1:8848 nacos2:8848 nacos3:8848
SPRING_DATASOURCE_PLATFORM=mysql
MYSQL_SERVICE_HOST=nacos-mysql
MYSQL_SERVICE_DB_NAME=nacos
MYSQL_SERVICE_PORT=3306
MYSQL_SERVICE_USER=nacos
MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
NACOS_AUTH_ENABLE=true
JVM_XMS=256m
JVM_XMX=512m1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
Note:可以根据实际需要选择是否设置
JVM_XMS、JVM_XMX。
1.4. mysql.env
Properties
MYSQL_DATABASE=nacos
MYSQL_USER=nacos1.5. compose.yaml
YAML
name: nacos-cluster
services:
nacos1:
image: nacos/nacos-server:${NACOS_VERSION}
container_name: nacos1
hostname: nacos1
networks:
nacos-cluster:
ports:
- "8848:8848"
- "9848:9848"
volumes:
- ./cluster-logs/nacos1:/home/nacos/logs
env_file:
- ./nacos.env
environment:
- MYSQL_SERVICE_PASSWORD=${MYSQL_PASSWORD}
- NACOS_AUTH_IDENTITY_KEY=${NACOS_AUTH_IDENTITY_KEY}
- NACOS_AUTH_IDENTITY_VALUE=${NACOS_AUTH_IDENTITY_VALUE}
- NACOS_AUTH_TOKEN=${NACOS_AUTH_TOKEN}
restart: on-failure:3
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8848/nacos/v1/console/health/readiness"]
interval: 10s
timeout: 10s
retries: 3
start_period: 90s
depends_on:
nacos-mysql:
condition: service_healthy
nacos2:
image: nacos/nacos-server:${NACOS_VERSION}
container_name: nacos2
hostname: nacos2
networks:
nacos-cluster:
ports:
- "8858:8848"
- "9858:9848"
volumes:
- ./cluster-logs/nacos2:/home/nacos/logs
env_file:
- ./nacos.env
environment:
- MYSQL_SERVICE_PASSWORD=${MYSQL_PASSWORD}
- NACOS_AUTH_IDENTITY_KEY=${NACOS_AUTH_IDENTITY_KEY}
- NACOS_AUTH_IDENTITY_VALUE=${NACOS_AUTH_IDENTITY_VALUE}
- NACOS_AUTH_TOKEN=${NACOS_AUTH_TOKEN}
restart: on-failure:3
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8848/nacos/v1/console/health/readiness"]
interval: 10s
timeout: 10s
retries: 3
start_period: 90s
depends_on:
nacos-mysql:
condition: service_healthy
nacos3:
image: nacos/nacos-server:${NACOS_VERSION}
container_name: nacos3
hostname: nacos3
networks:
nacos-cluster:
ports:
- "8868:8848"
- "9868:9848"
volumes:
- ./cluster-logs/nacos3:/home/nacos/logs
env_file:
- ./nacos.env
environment:
- MYSQL_SERVICE_PASSWORD=${MYSQL_PASSWORD}
- NACOS_AUTH_IDENTITY_KEY=${NACOS_AUTH_IDENTITY_KEY}
- NACOS_AUTH_IDENTITY_VALUE=${NACOS_AUTH_IDENTITY_VALUE}
- NACOS_AUTH_TOKEN=${NACOS_AUTH_TOKEN}
restart: on-failure:3
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8848/nacos/v1/console/health/readiness"]
interval: 10s
timeout: 10s
retries: 3
start_period: 90s
depends_on:
nacos-mysql:
condition: service_healthy
nacos-mysql:
image: mysql:${MYSQL_VERSION}
container_name: nacos-mysql
networks:
nacos-cluster:
env_file:
- ./mysql.env
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
volumes:
- ./mysql/datadir:/var/lib/mysql
- ./mysql/initdb.d/nacos-mysql.sql:/docker-entrypoint-initdb.d/nacos-mysql.sql
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_0900_ai_ci
restart: on-failure:3
healthcheck:
test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ]
interval: 10s
timeout: 10s
retries: 3
start_period: 10s
networks:
nacos-cluster:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
Nacos 2.x 端口说明:
- 8848: 客户端 HTTP 接口默认端口(主端口)
- 9848: gRPC 通信端口(2.x 新增,用于客户端长连接)
- 9849: 集群节点间 Raft 通信端口(仅集群内部使用)
- 7848: JRaft 选举端口(仅集群内部使用)
1.6. 搭建集群
Bash
$ MYSQL_ROOT_PASSWORD=dyJxkjk99B1bp6fBqriV \
MYSQL_PASSWORD=815HqV3HgyZ8T3GG6Lr9 \
NACOS_AUTH_IDENTITY_KEY=nacos \
NACOS_AUTH_IDENTITY_VALUE=Rgwzkmb2dKfParcERFqB \
NACOS_AUTH_TOKEN=Zm9pS3ZDRXNLUW83Yzhpemp1b3ZlOWU3cGNodnJ6SDI= \
sudo -E docker compose up -d2. 使用 Nginx 代理 Nacos 集群
2.1. ./nginx/etc/nginx.conf
Nginx
user nginx;
worker_processes auto;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream nacos-http {
server nacos1:8848 max_fails=3 fail_timeout=30s;
server nacos2:8848 max_fails=3 fail_timeout=30s;
server nacos3:8848 max_fails=3 fail_timeout=30s;
hash $remote_addr consistent;
}
server {
listen 8848;
location / {
proxy_pass http://nacos-http;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 添加服务节点标识头
add_header X-Upstream-Node $upstream_addr always;
# WebSocket 支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
}
stream {
# log_format basic '$remote_addr [$time_local] '
# '$protocol $status $bytes_sent $bytes_received '
# '$session_time';
upstream nacos-grpc {
server nacos1:9848 max_fails=3 fail_timeout=30s;
server nacos2:9848 max_fails=3 fail_timeout=30s;
server nacos3:9848 max_fails=3 fail_timeout=30s;
hash $remote_addr consistent;
}
server {
listen 9848;
proxy_pass nacos-grpc;
}
}Caution:使用 Nginx 代理请求时,需要配置成 TCP 转发,不能配置 http2 转发,否则连接会被 Nginx 断开。
2.2. .env
在原 .env 中添加以下配置项:
Properties
NGINX_VERSION=1.27.42.3. compose.yaml
YAML
name: nacos-cluster
services:
nacos-nginx:
image: nginx:${NGINX_VERSION}
container_name: nacos-nginx
networks:
nacos-cluster:
ports:
- "8848:8848"
- "9848:9848"
volumes:
- ./nginx/etc/nginx.conf:/etc/nginx/nginx.conf
- ./cluster-logs/nginx:/var/log/nginx
restart: on-failure:3
depends_on:
nacos1:
condition: service_healthy
nacos2:
condition: service_healthy
nacos3:
condition: service_healthy
nacos1:
image: nacos/nacos-server:${NACOS_VERSION}
container_name: nacos1
hostname: nacos1
networks:
nacos-cluster:
volumes:
- ./cluster-logs/nacos1:/home/nacos/logs
env_file:
- ./nacos.env
environment:
- MYSQL_SERVICE_PASSWORD=${MYSQL_PASSWORD}
- NACOS_AUTH_IDENTITY_KEY=${NACOS_AUTH_IDENTITY_KEY}
- NACOS_AUTH_IDENTITY_VALUE=${NACOS_AUTH_IDENTITY_VALUE}
- NACOS_AUTH_TOKEN=${NACOS_AUTH_TOKEN}
restart: on-failure:3
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8848/nacos/v1/console/health/readiness"]
interval: 10s
timeout: 10s
retries: 3
start_period: 90s
depends_on:
nacos-mysql:
condition: service_healthy
nacos2:
image: nacos/nacos-server:${NACOS_VERSION}
container_name: nacos2
hostname: nacos2
networks:
nacos-cluster:
volumes:
- ./cluster-logs/nacos2:/home/nacos/logs
env_file:
- ./nacos.env
environment:
- MYSQL_SERVICE_PASSWORD=${MYSQL_PASSWORD}
- NACOS_AUTH_IDENTITY_KEY=${NACOS_AUTH_IDENTITY_KEY}
- NACOS_AUTH_IDENTITY_VALUE=${NACOS_AUTH_IDENTITY_VALUE}
- NACOS_AUTH_TOKEN=${NACOS_AUTH_TOKEN}
restart: on-failure:3
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8848/nacos/v1/console/health/readiness"]
interval: 10s
timeout: 10s
retries: 3
start_period: 90s
depends_on:
nacos-mysql:
condition: service_healthy
nacos3:
image: nacos/nacos-server:${NACOS_VERSION}
container_name: nacos3
hostname: nacos3
networks:
nacos-cluster:
volumes:
- ./cluster-logs/nacos3:/home/nacos/logs
env_file:
- ./nacos.env
environment:
- MYSQL_SERVICE_PASSWORD=${MYSQL_PASSWORD}
- NACOS_AUTH_IDENTITY_KEY=${NACOS_AUTH_IDENTITY_KEY}
- NACOS_AUTH_IDENTITY_VALUE=${NACOS_AUTH_IDENTITY_VALUE}
- NACOS_AUTH_TOKEN=${NACOS_AUTH_TOKEN}
restart: on-failure:3
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8848/nacos/v1/console/health/readiness"]
interval: 10s
timeout: 10s
retries: 3
start_period: 90s
depends_on:
nacos-mysql:
condition: service_healthy
nacos-mysql:
image: mysql:${MYSQL_VERSION}
container_name: nacos-mysql
networks:
nacos-cluster:
env_file:
- ./mysql.env
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
volumes:
- ./mysql/datadir:/var/lib/mysql
- ./mysql/initdb.d/nacos-mysql.sql:/docker-entrypoint-initdb.d/nacos-mysql.sql
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_0900_ai_ci
restart: on-failure:3
healthcheck:
test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ]
interval: 10s
timeout: 10s
retries: 3
start_period: 10s
networks:
nacos-cluster:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
差异对比
diff
...
name: nacos-cluster
services:
+ nacos-nginx:
+ image: nginx:${NGINX_VERSION}
+ container_name: nacos-nginx
+ networks:
+ nacos-cluster:
+ ports:
+ - "8848:8848"
+ - "9848:9848"
+ volumes:
+ - ./nginx/etc/nginx.conf:/etc/nginx/nginx.conf
+ - ./cluster-logs/nginx:/var/log/nginx
+ restart: on-failure:3
+ depends_on:
+ nacos1:
+ condition: service_healthy
+ nacos2:
+ condition: service_healthy
+ nacos3:
+ condition: service_healthy
+
nacos1:
image: nacos/nacos-server:${NACOS_VERSION}
container_name: nacos1
hostname: nacos1
networks:
nacos-cluster:
- ports:
- - "8848:8848"
- - "9848:9848"
volumes:
- ./cluster-logs/nacos1:/home/nacos/logs
env_file:
...
hostname: nacos2
networks:
nacos-cluster:
- ports:
- - "8858:8848"
- - "9858:9848"
volumes:
- ./cluster-logs/nacos2:/home/nacos/logs
env_file:
...
hostname: nacos3
networks:
nacos-cluster:
- ports:
- - "8868:8848"
- - "9868:9848"
volumes:
- ./cluster-logs/nacos3:/home/nacos/logs
env_file:
...