天天看點

nacos叢集搭建 (docker compose方案)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 '建立時間',
  `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 是否開啟叢集嵌入式存儲模式

embedded

預設 : 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
           

等待啟動完成。。

nacos叢集搭建 (docker compose方案)nacos叢集搭建(docker compose方案)

叢集模式

官方推薦三種模式:

http://ip1:port/openAPI 直連ip模式,機器挂則需要修改ip才可以使用。

http://VIP:port/openAPI 挂載VIP模式,直連vip即可,下面挂server真實ip,可讀性不好。

http://nacos.com:port/openAPI 域名 + VIP模式,可讀性好,而且換ip友善,推薦模式

實作架構圖:

nacos叢集搭建 (docker compose方案)nacos叢集搭建(docker compose方案)

說明:上圖的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

nacos叢集搭建 (docker compose方案)nacos叢集搭建(docker compose方案)

如遇問題,請與本人取得聯系哈~ 記得給個贊

nacos叢集搭建 (docker compose方案)nacos叢集搭建(docker compose方案)

Jeesoul本着開源宗旨,分享各類語言技術。沒有學不會,隻有不願學。歡迎大家一起交流學習!