1.集群结构图

官方给出的Nacos集群图image-20210409210621117.png
其中包含3个nacos节点,然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx。
我们计划的集群结构:image-20210409211355037.png
三个nacos节点的地址:

节点 ip port
nacos1 192.168.150.1 8845
nacos2 192.168.150.1 8846
nacos3 192.168.150.1 8847

此处的IP是你自己服务的IP,不一定要按照我的来

2.搭建集群

搭建集群的基本步骤:

  • 搭建数据库,初始化数据库表结构
  • 下载nacos安装包
  • 配置nacos
  • 启动nacos集群
  • nginx反向代理

    2.1.初始化数据库

    Nacos默认数据存储在内嵌数据库Derby中,不属于生产可用的数据库。
    官方推荐的最佳实践是使用带有主从的高可用数据库集群。
    这里我们以单点的数据库为例来讲解。
    首先新建一个数据库,命名为nacos,而后导入下面的SQL ``plsql CREATE TABLEconfig_info(idbigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',data_idvarchar(255) NOT NULL COMMENT 'data_id',group_idvarchar(255) DEFAULT NULL,contentlongtext NOT NULL COMMENT 'content',md5varchar(32) DEFAULT NULL COMMENT 'md5',gmt_createdatetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',gmt_modifieddatetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',src_usertext COMMENT 'source user',src_ipvarchar(50) DEFAULT NULL COMMENT 'source ip',app_namevarchar(128) DEFAULT NULL,tenant_idvarchar(128) DEFAULT '' COMMENT '租户字段',c_descvarchar(256) DEFAULT NULL,c_usevarchar(64) DEFAULT NULL,effectvarchar(64) DEFAULT NULL,typevarchar(64) DEFAULT NULL,c_schematext, PRIMARY KEY (id), UNIQUE KEYuk_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(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’;

/**/ / 数据库全名 = 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(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’;

/**/ / 数据库全名 = 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(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=’多租户改造’;

/**/ / 数据库全名 = 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’);

  1. <a name="dktxH"></a>
  2. ## 2.2.下载nacos
  3. nacos在GitHub上有下载地址:[https://github.com/alibaba/nacos/tags](https://github.com/alibaba/nacos/tags),可以选择任意版本下载。<br />![image-20210409212119411.png](https://cdn.nlark.com/yuque/0/2022/png/26232854/1649596399411-fdfe49ec-2696-4ce4-926e-f37511496cea.png#clientId=u00bfb89f-59bf-4&crop=0&crop=0&crop=1&crop=1&from=drop&id=u805d9f5e&margin=%5Bobject%20Object%5D&name=image-20210409212119411.png&originHeight=351&originWidth=715&originalType=binary&ratio=1&rotation=0&showTitle=false&size=25073&status=done&style=none&taskId=ufd5dd9bd-53b7-4661-91a9-2f7adcef77e&title=)
  4. <a name="n0TGU"></a>
  5. ## 2.3.配置Nacos
  6. 将这个包解压到任意非中文目录下,如图:![image-20210402161843337.png](https://cdn.nlark.com/yuque/0/2022/png/26232854/1649596461859-21916d13-efc9-4d43-b698-7e95cca10987.png#clientId=u00bfb89f-59bf-4&crop=0&crop=0&crop=1&crop=1&from=drop&id=u20397352&margin=%5Bobject%20Object%5D&name=image-20210402161843337.png&originHeight=220&originWidth=525&originalType=binary&ratio=1&rotation=0&showTitle=false&size=8341&status=done&style=none&taskId=u95e8e673-ab98-4eeb-9f08-807b62eed2b&title=)<br />目录说明:
  7. - bin:启动脚本
  8. - conf:配置文件
  9. 进入nacos的conf目录,修改配置文件cluster.conf.example,重命名为cluster.conf:然后添加内容:![image-20210409212459292.png](https://cdn.nlark.com/yuque/0/2022/png/26232854/1649596584900-c55fa2c5-555f-4d86-82fe-fcddf1343cac.png#clientId=u00bfb89f-59bf-4&crop=0&crop=0&crop=1&crop=1&from=drop&id=u94bc3861&margin=%5Bobject%20Object%5D&name=image-20210409212459292.png&originHeight=330&originWidth=351&originalType=binary&ratio=1&rotation=0&showTitle=false&size=18292&status=done&style=none&taskId=ud5d80931-954b-40ab-a458-441e5f7a4cc&title=)<br />然后添加内容:
  10. ```plsql
  11. 127.0.0.1:8845
  12. 127.0.0.1:8846
  13. 127.0.0.1:8847

注意:此处的IP是你自己服务的IP,不一定要按照我的来! 可以在单节点运行时,到nacos控制台查看自己的节点IP,那么这里就配置一样的IP:

image-20210830170229215.png然后修改application.properties文件,添加数据库配置

  1. spring.datasource.platform=mysql
  2. db.num=1
  3. db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
  4. db.user.0=root
  5. db.password.0=123

这里的数据库地址、用户名、密码请根据实际情况配置。

2.4.启动

  1. nacos文件夹复制三份,分别命名为:nacos1nacos2nacos3 <br /> ![image-20210409213335538.png](https://cdn.nlark.com/yuque/0/2022/png/26232854/1649598339798-42614006-76ef-48ea-a2e4-86f07a5cf135.png#clientId=u00bfb89f-59bf-4&crop=0&crop=0&crop=1&crop=1&from=drop&id=u8522c5c2&margin=%5Bobject%20Object%5D&name=image-20210409213335538.png&originHeight=126&originWidth=368&originalType=binary&ratio=1&rotation=0&showTitle=false&size=5291&status=done&style=none&taskId=uc0a23cc7-4133-4636-b387-c0ac77de047&title=)<br />然后分别修改三个文件夹中的application.properties,<br />nacos1:
  1. server.port=8845

nacos2:

  1. server.port=8846

nacos3:

  1. server.port=8847

然后分别启动三个nacos节点:

  1. startup.cmd

2.5.nginx反向代理

资料提供的nginx安装包:
image-20210410103253355.png
解压到任意非中文目录下:

image-20210410103322874.png
修改conf/nginx.conf文件,配置如下:

  1. upstream nacos-cluster {
  2. server 127.0.0.1:8845;
  3. server 127.0.0.1:8846;
  4. server 127.0.0.1:8847;
  5. }
  6. server {
  7. listen 80;
  8. server_name localhost;
  9. location /nacos {
  10. proxy_pass http://nacos-cluster;
  11. }
  12. }

而后在浏览器访问:http://localhost/nacos即可。
代码中application.yml文件配置如下:

  1. spring:
  2. cloud:
  3. nacos:
  4. server-addr: localhost:80 # Nacos地址

2.6.优化

  • 实际部署时,需要给做反向代理的nginx服务器设置一个域名,这样后续如果有服务器迁移nacos的客户端也无需更改配置.
  • Nacos的各个节点应该部署到多个不同服务器,做好容灾和隔离