nacos集群搭建(docker compose方案)
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 '創(chuàng)建時間',
`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 '創(chuàng)建時間',
`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 '創(chuàng)建時間',
`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 '單個配置大小上限,單位為字節(jié),0表示使用默認值',
`max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大個數,,0表示使用默認值',
`max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '單個聚合數據的子配置大小上限,單位為字節(jié),0表示使用默認值',
`max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大變更歷史數量',
`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間',
`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 '單個配置大小上限,單位為字節(jié),0表示使用默認值',
`max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大個數',
`max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '單個聚合數據的子配置大小上限,單位為字節(jié),0表示使用默認值',
`max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大變更歷史數量',
`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間',
`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 '創(chuàng)建時間',
`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_config?#?數據庫庫名
??????-?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 | 系統(tǒng)啟動方式: 集群/單機 | 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 | 權限系統(tǒng)類型選擇,目前只支持nacos類型 | 默認 :nacos |
| NACOS_AUTH_ENABLE | 是否開啟權限系統(tǒng) | 默認 :false |
| NACOS_AUTH_TOKEN_EXPIRE_SECONDS | token 失效時間 | 默認 :18000 |
| NACOS_AUTH_TOKEN | token | 默認 :SecretKey012345678901234567890123456789012345678901234567890123456789 |
| NACOS_AUTH_CACHE_ENABLE | 權限緩存開關 ,開啟后權限緩存的更新默認有15秒的延遲 | 默認 : false |
| MEMBER_LIST | 通過環(huán)境變量的方式設置集群地址 | 例子: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 | 是否開啟集群嵌入式存儲模式 | embedded 默認 : none |
高級配置
如果上面的屬性列表無法滿足你的需求時,可以掛載custom.properties到/home/nacos/init.d/ 目錄,然后在里面像使用Spring Boot的application.properties文件一樣配置屬性, 并且這個文件配置的屬性優(yōu)先級高于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方便,推薦模式
實現(xiàn)架構圖:

說明:上圖的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;?????#?讀取大型客戶端請求頭的緩沖區(qū)的最大數量和大小
????????client_max_body_size?300m;?????#設置nginx能處理的最大請求主體大小。
????????client_body_buffer_size?128k;??#請求主體的緩沖區(qū)大小。?
??
??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

你的每一筆打賞金,就是我前進的動力
?
學習交流
本人性格開朗,善于交友,專注于Java學習、開發(fā),偶爾也會玩玩python爬蟲,很愿意與您成為好友,共同學習,共同探討,共同進步!也歡迎大家過來投稿!本人qq二維碼? ? ??? ? ? 本人微信二維碼
? ??
如有需要后期會創(chuàng)建學習分享交流群
