Nacos集群搭建
1、Nacos生產(chǎn)環(huán)境下一定要部署為集群狀態(tài),其總體結(jié)構(gòu)圖如圖所示。
2、搭建集群
搭建集群的基本步驟:
- 搭建數(shù)據(jù)庫,初始化數(shù)據(jù)庫表結(jié)構(gòu)
- 下載nacos安裝包
- 配置nacos
- 啟動nacos集群
- nginx反向代理
2.1、初始化數(shù)據(jù)庫
Nacos默認數(shù)據(jù)存儲在內(nèi)嵌數(shù)據(jù)庫Derby中,不屬于生產(chǎn)可用的數(shù)據(jù)庫。
官方推薦的最佳實踐是使用帶有主從的高可用數(shù)據(jù)庫集群。這里我們以單點的數(shù)據(jù)庫為例來講解。首先新建一個數(shù)據(jù)庫,命名為nacos,而后導入下面的SQL:
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(50) 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'
;
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
'內(nèi)容',`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
='增加租戶字段';
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(50) 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'
;
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(50) 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'
;
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'
;
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 '聚合子配置最大個數(shù),,
0表示使用默認值'
,`max_aggr_size`
int(10) unsigned NOT NULL DEFAULT
'0' COMMENT '單個聚合數(shù)據(jù)的子配置大小上限,單位為字節(jié),
0表示使用默認值'
,`max_history_count`
int(10) unsigned NOT NULL DEFAULT
'0' COMMENT '最大變更歷史數(shù)量'
,`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容量信息表'
;
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(50) 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
='多租戶改造';
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 '聚合子配置最大個數(shù)'
,`max_aggr_size`
int(10) unsigned NOT NULL DEFAULT
'0' COMMENT '單個聚合數(shù)據(jù)的子配置大小上限,單位為字節(jié),
0表示使用默認值'
,`max_history_count`
int(10) unsigned NOT NULL DEFAULT
'0' COMMENT '最大變更歷史數(shù)量'
,`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'
);
2.2.下載nacos
nacos在GitHub上有下載地址:https://github.com/alibaba/nacos/tags,可以選擇任意版本下載。本例中才用1.4.1版本:
2.3.配置Nacos
將這個包解壓到任意非中文目錄下,如圖:
目錄說明:
- bin:啟動腳本
- conf:配置文件
進入nacos的conf目錄,修改配置文件cluster.conf.example,重命名為cluster.conf:
127.0.0.1:8845
127.0.0.1:8845
127.0.0.1.8846
127.0.0.1.8847
然后修改application.properties文件,添加數(shù)據(jù)庫配置
spring
.datasource
.platform
=mysqldb
.num
=1db
.url
.0=jdbc
:mysql
://127.0.0.1:3306/nacos
?characterEncoding
=utf8
&connectTimeout
=1000&socketTimeout
=3000&autoReconnect
=true&useUnicode
=true&useSSL
=false&serverTimezone
=UTC
db
.user
.0=root
db
.password
.0=123
2.4、啟動
將nacos文件夾復制三份,分別命名為:nacos1、nacos2、nacos3
然后分別修改三個文件夾中的application.properties,
nacos1:
server
.port
=8845
nacos2:
server
.port
=8846
nacos3:
server
.port
=8847
然后分別啟動三個nacos節(jié)點:
startup
.cmd
2.5.nginx反向代理
下載nginx并解壓到非中文目錄下:
修改conf/nginx.conf文件,配置如下:
upstream nacos
-cluster
{server
127.0.0.1:8845;server
127.0.0.1:8846;server
127.0.0.1:8847;
}server
{listen
80;server_name localhost
;location
/nacos
{proxy_pass http
://nacos
-cluster
;}
}
而后在瀏覽器訪問:http://localhost/nacos即可。
代碼中application.yml文件配置如下:
spring
:cloud
:nacos
:server
-addr
: localhost
:80 #
Nacos地址
2.6.優(yōu)化
- 實際部署時,需要給做反向代理的nginx服務器設置一個域名,這樣后續(xù)如果有服務器遷移nacos的客戶端也無需更改配置.
- Nacos的各個節(jié)點應該部署到多個不同服務器,做好容災和隔離
總結(jié)
以上是生活随笔為你收集整理的Nacos集群搭建的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。