nacos叢集搭建(docker compose方案)
随時保持最新版本:目前版本為 nacos:1.4.0
準備
說明:本文需要掌握 linux、docker、docker-compose 、nginx相關知識
-
至少三台linux機器
(安裝docker,docker-compose,安裝教程:關注公衆号:Jeesoul開源)
- 機器之間均可互相通路
開始
- 準備三台機器
- 10.0.0.5
- 10.0.0.6
- 10.0.0.7
本次鏡像版本:nacos/nacos-server:1.4.0(nacos:nacos-server/latest)
目前為最新版(2020-12-04)
- 采用外部mysql資料庫
- nacos 1.4.0 sql位址
- https://github.com/alibaba/nacos/blob/1.4.0/distribution/conf/nacos-mysql.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.
*/
/******************************************/
/* 資料庫全名 = nacos_config */
/* 表名稱 = 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(255) DEFAULT NULL,
`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(20) DEFAULT NULL COMMENT 'source ip',
`app_name` varchar(128) DEFAULT NULL,
`tenant_id` varchar(128) DEFAULT '' COMMENT '租戶字段',
`c_desc` varchar(256) DEFAULT NULL,
`c_use` varchar(64) DEFAULT NULL,
`effect` varchar(64) DEFAULT NULL,
`type` varchar(64) DEFAULT NULL,
`c_schema` text,
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';
/******************************************/
/* 資料庫全名 = nacos_config */
/* 表名稱 = config_info_aggr */
/******************************************/
CREATE TABLE `config_info_aggr` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`data_id` varchar(255) NOT NULL COMMENT 'data_id',
`group_id` varchar(255) NOT NULL COMMENT 'group_id',
`datum_id` varchar(255) NOT NULL COMMENT 'datum_id',
`content` longtext NOT NULL COMMENT '内容',
`gmt_modified` datetime NOT NULL COMMENT '修改時間',
`app_name` varchar(128) DEFAULT NULL,
`tenant_id` varchar(128) DEFAULT '' COMMENT '租戶字段',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租戶字段';
/******************************************/
/* 資料庫全名 = nacos_config */
/* 表名稱 = config_info_beta */
/******************************************/
CREATE TABLE `config_info_beta` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`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',
`beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',
`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(20) DEFAULT NULL COMMENT 'source ip',
`tenant_id` varchar(128) DEFAULT '' COMMENT '租戶字段',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';
/******************************************/
/* 資料庫全名 = nacos_config */
/* 表名稱 = config_info_tag */
/******************************************/
CREATE TABLE `config_info_tag` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`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',
`tag_id` varchar(128) NOT NULL COMMENT 'tag_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(20) DEFAULT NULL COMMENT 'source ip',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';
/******************************************/
/* 資料庫全名 = nacos_config */
/* 表名稱 = 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,
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';
/******************************************/
/* 資料庫全名 = nacos_config */
/* 表名稱 = 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容量資訊表';
/******************************************/
/* 資料庫全名 = nacos_config */
/* 表名稱 = his_config_info */
/******************************************/
CREATE TABLE `his_config_info` (
`id` bigint(64) unsigned NOT NULL,
`nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`data_id` varchar(255) NOT NULL,
`group_id` varchar(128) NOT NULL,
`app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
`content` longtext NOT NULL,
`md5` varchar(32) DEFAULT NULL,
`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`src_user` text,
`src_ip` varchar(20) DEFAULT NULL,
`op_type` char(10) DEFAULT NULL,
`tenant_id` varchar(128) DEFAULT '' COMMENT '租戶字段',
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='多租戶改造';
/******************************************/
/* 資料庫全名 = nacos_config */
/* 表名稱 = 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,
`password` varchar(500) NOT NULL,
`enabled` boolean NOT NULL
);
CREATE TABLE `roles` (
`username` varchar(50) NOT NULL,
`role` varchar(50) NOT NULL,
UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE
);
CREATE TABLE `permissions` (
`role` varchar(50) NOT NULL,
`resource` varchar(255) NOT NULL,
`action` varchar(8) NOT NULL,
UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE
);
INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);
INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');
編排cluster-ip.yaml檔案
分别在三台機器中建立cluster-ip.yaml檔案
# 建立nacos目錄 分别建立 nacos1、nacos2、naocs3
mkdir /usr/local/docker/nacos1
# 進入建立的naocs1目錄
cd /usr/local/docker/nacos1
# 建立檔案 cluster-ip.yaml
touch cluster-ip.yaml
# 建立目錄 init.d
mkdir init.d
# 進入init.d目錄
cd init.d
# 建立 custom.properties 檔案
touch custom.properties
# 進入建立的naocs1目錄
cd /usr/local/docker/nacos1
# 編輯cluster-ip.yaml
vi cluster-ip.yaml
version: "3"
services:
nacos:
container_name: nacos1
image: nacos/nacos-server:1.4.0
networks:
- nacos_net
environment:
- MODE=cluster # 叢集模式
- NACOS_SERVERS=10.0.0.5:8848 10.0.0.6:8848 10.0.0.7:8848 # 三台機器對應的伺服器外網:三台機器對應的nacos服務端口
- NACOS_SERVER_IP=10.0.0.6 # 目前本機伺服器外網
- SPRING_DATASOURCE_PLATFORM=mysql
- MYSQL_SERVICE_HOST=10.0.0.3 # mysql資料庫對應的ip
- MYSQL_SERVICE_PORT=3306 # mysql資料庫對應的端口
- MYSQL_SERVICE_DB_NAME=nacos_1.4.0 # 資料庫庫名
- MYSQL_SERVICE_USER=root # 資料庫使用者
- MYSQL_SERVICE_PASSWORD=123456 # 資料庫密碼
- MYSQL_DATABASE_NUM=1 # 資料源為1個
- JVM_XMS=256m
- JVM_XMX=256m
- JVM_XMN=256m
volumes:
- ./cluster-logs/nacos:/home/nacos/logs
- ./init.d/custom.properties:/home/nacos/init.d/custom.properties
ports:
- "8848:8848"
- "9555:9555"
restart: on-failure
networks:
nacos_net:
driver: bridge
注意:部分屬性和1.3.0之前不太一樣了,下面貼出1.4.0對應版本的屬性配置
屬性配置清單
屬性名稱 | 描述 | 選項 |
---|---|---|
MODE | 系統啟動方式: 叢集/單機 | cluster/standalone預設 cluster |
NACOS_SERVERS | 叢集位址 | p1:port1空格ip2:port2 空格ip3:port3 |
PREFER_HOST_MODE | 支援IP還是域名模式 | hostname/ip 預設 ip |
NACOS_SERVER_PORT | Nacos 運作端口 | 預設 8848 |
NACOS_SERVER_IP | 多網卡模式下可以指定IP | |
SPRING_DATASOURCE_PLATFORM | 單機模式下支援MYSQL資料庫 | mysql / 空 預設:空 |
MYSQL_SERVICE_HOST | 資料庫 連接配接位址 | |
MYSQL_SERVICE_PORT | 資料庫端口 | 預設 : 3306 |
MYSQL_SERVICE_DB_NAME | 資料庫庫名 | |
MYSQL_SERVICE_USER | 資料庫使用者名 | |
MYSQL_SERVICE_PASSWORD | 資料庫使用者密碼 | |
MYSQL_SERVICE_DB_PARAM | 資料庫連接配接參數 | default : characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true |
MYSQL_DATABASE_NUM | It indicates the number of database | 預設 :1 |
JVM_XMS | -Xms | 預設 :2g |
JVM_XMX | -Xmx | 預設 :2g |
JVM_XMN | -Xmn | 預設 :1g |
JVM_MS | -XX:MetaspaceSize | 預設 :128m |
JVM_MMS | -XX:MaxMetaspaceSize | 預設 :320m |
NACOS_DEBUG | 是否開啟遠端DEBUG | y/n 預設 :n |
TOMCAT_ACCESSLOG_ENABLED | server.tomcat.accesslog.enabled | 預設 :false |
NACOS_AUTH_SYSTEM_TYPE | 權限系統類型選擇,目前隻支援nacos類型 | 預設 :nacos |
NACOS_AUTH_ENABLE | 是否開啟權限系統 | 預設 :false |
NACOS_AUTH_TOKEN_EXPIRE_SECONDS | token 失效時間 | 預設 :18000 |
NACOS_AUTH_TOKEN | token | 預設 :SecretKey012345678901234567890123456789012345678901234567890123456789 |
NACOS_AUTH_CACHE_ENABLE | 權限緩存開關 ,開啟後權限緩存的更新預設有15秒的延遲 | 預設 : false |
MEMBER_LIST | 通過環境變量的方式設定叢集位址 | 例子:192.168.16.101:8847?raft_port=8807,192.168.16.101?raft_port=8808,192.168.16.101:8849?raft_port=8809 |
EMBEDDED_STORAGE | 是否開啟叢集嵌入式存儲模式 | 預設 : none |
進階配置
如果上面的屬性清單無法滿足你的需求時,可以挂載
custom.properties
到
/home/nacos/init.d/
目錄,然後在裡面像使用Spring Boot的
application.properties
檔案一樣配置屬性, 并且這個檔案配置的屬性優先級高于application.properties
啟動容器
分别啟動三台機器的nacos
# 進入建立的naocs1目錄
cd /usr/local/docker/nacos1
# 啟動指令
docker-compose -f cluster-ip.yaml up -d
等待啟動完成。。
叢集模式
官方推薦三種模式:
http://ip1:port/openAPI 直連ip模式,機器挂則需要修改ip才可以使用。
http://VIP:port/openAPI 挂載VIP模式,直連vip即可,下面挂server真實ip,可讀性不好。
http://nacos.com:port/openAPI 域名 + VIP模式,可讀性好,而且換ip友善,推薦模式
實作架構圖:
說明:上圖的VIP 為 virtual IP 即虛拟ip的意思
推薦 Keepalived+雙機熱備
通過Nginx配置真正的叢集
安裝nginx
自行百度(後期本人再專門提供安裝文檔)
nginx配置檔案
# 叢集點配置 三台機器 ip:port 配置
upstream cluster{
server 10.0.0.5:8848 weight=1 max_fails=2 fail_timeout=30s;
server 10.0.0.6:8848 weight=1 max_fails=2 fail_timeout=30s;
server 10.0.0.7:8848 weight=1 max_fails=2 fail_timeout=30s;
}
server{
listen 80;
server_name localhost;
large_client_header_buffers 4 16k; # 讀取大型用戶端請求頭的緩沖區的最大數量和大小
client_max_body_size 300m; #設定nginx能處理的最大請求主體大小。
client_body_buffer_size 128k; #請求主體的緩沖區大小。
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 8 32k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 64k;
location / {
proxy_pass http://cluster;
}
}
啟動nginx
ok
通路:http://10.0.0.3:8848/nacos/#/login
如遇問題,請與本人取得聯系哈~ 記得給個贊
Jeesoul本着開源宗旨,分享各類語言技術。沒有學不會,隻有不願學。歡迎大家一起交流學習!