Nacos集群搭建

打印 上一主题 下一主题

主题 552|帖子 552|积分 1656

集群结构图


官方给出的Nacos集群图:


其中包含3个nacos节点,然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx。

我们计划的集群结构:


三个nacos节点的地址:
节点ipportnacos1192.168.150.18845nacos2192.168.150.18846nacos3192.168.150.18847
搭建集群的基本步骤


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

初始化数据库


Nacos默认数据存储在内嵌数据库Derby中,不属于生产可用的数据库。
官方推荐的最佳实践是使用带有主从的高可用数据库集群,这里我们以单点的数据库为例来讲解。

首先新建一个数据库,命名为nacos,而后导入下面的SQL:
  1. CREATE TABLE `config_info` (
  2.   `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  3.   `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  4.   `group_id` varchar(255) DEFAULT NULL,
  5.   `content` longtext NOT NULL COMMENT 'content',
  6.   `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  7.   `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  8.   `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  9.   `src_user` text COMMENT 'source user',
  10.   `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  11.   `app_name` varchar(128) DEFAULT NULL,
  12.   `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  13.   `c_desc` varchar(256) DEFAULT NULL,
  14.   `c_use` varchar(64) DEFAULT NULL,
  15.   `effect` varchar(64) DEFAULT NULL,
  16.   `type` varchar(64) DEFAULT NULL,
  17.   `c_schema` text,
  18.   PRIMARY KEY (`id`),
  19.   UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
  20. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';
  21. /******************************************/
  22. /*   数据库全名 = nacos_config   */
  23. /*   表名称 = config_info_aggr   */
  24. /******************************************/
  25. CREATE TABLE `config_info_aggr` (
  26.   `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  27.   `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  28.   `group_id` varchar(255) NOT NULL COMMENT 'group_id',
  29.   `datum_id` varchar(255) NOT NULL COMMENT 'datum_id',
  30.   `content` longtext NOT NULL COMMENT '内容',
  31.   `gmt_modified` datetime NOT NULL COMMENT '修改时间',
  32.   `app_name` varchar(128) DEFAULT NULL,
  33.   `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  34.   PRIMARY KEY (`id`),
  35.   UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
  36. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段';
  37. /******************************************/
  38. /*   数据库全名 = nacos_config   */
  39. /*   表名称 = config_info_beta   */
  40. /******************************************/
  41. CREATE TABLE `config_info_beta` (
  42.   `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  43.   `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  44.   `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  45.   `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  46.   `content` longtext NOT NULL COMMENT 'content',
  47.   `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',
  48.   `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  49.   `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  50.   `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  51.   `src_user` text COMMENT 'source user',
  52.   `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  53.   `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  54.   PRIMARY KEY (`id`),
  55.   UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
  56. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';
  57. /******************************************/
  58. /*   数据库全名 = nacos_config   */
  59. /*   表名称 = config_info_tag   */
  60. /******************************************/
  61. CREATE TABLE `config_info_tag` (
  62.   `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  63.   `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  64.   `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  65.   `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
  66.   `tag_id` varchar(128) NOT NULL COMMENT 'tag_id',
  67.   `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  68.   `content` longtext NOT NULL COMMENT 'content',
  69.   `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  70.   `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  71.   `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  72.   `src_user` text COMMENT 'source user',
  73.   `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  74.   PRIMARY KEY (`id`),
  75.   UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
  76. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';
  77. /******************************************/
  78. /*   数据库全名 = nacos_config   */
  79. /*   表名称 = config_tags_relation   */
  80. /******************************************/
  81. CREATE TABLE `config_tags_relation` (
  82.   `id` bigint(20) NOT NULL COMMENT 'id',
  83.   `tag_name` varchar(128) NOT NULL COMMENT 'tag_name',
  84.   `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type',
  85.   `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  86.   `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  87.   `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
  88.   `nid` bigint(20) NOT NULL AUTO_INCREMENT,
  89.   PRIMARY KEY (`nid`),
  90.   UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
  91.   KEY `idx_tenant_id` (`tenant_id`)
  92. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation';
  93. /******************************************/
  94. /*   数据库全名 = nacos_config   */
  95. /*   表名称 = group_capacity   */
  96. /******************************************/
  97. CREATE TABLE `group_capacity` (
  98.   `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  99.   `group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群',
  100.   `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  101.   `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  102.   `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  103.   `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值',
  104.   `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  105.   `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  106.   `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  107.   `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  108.   PRIMARY KEY (`id`),
  109.   UNIQUE KEY `uk_group_id` (`group_id`)
  110. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';
  111. /******************************************/
  112. /*   数据库全名 = nacos_config   */
  113. /*   表名称 = his_config_info   */
  114. /******************************************/
  115. CREATE TABLE `his_config_info` (
  116.   `id` bigint(64) unsigned NOT NULL,
  117.   `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  118.   `data_id` varchar(255) NOT NULL,
  119.   `group_id` varchar(128) NOT NULL,
  120.   `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  121.   `content` longtext NOT NULL,
  122.   `md5` varchar(32) DEFAULT NULL,
  123.   `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  124.   `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  125.   `src_user` text,
  126.   `src_ip` varchar(50) DEFAULT NULL,
  127.   `op_type` char(10) DEFAULT NULL,
  128.   `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  129.   PRIMARY KEY (`nid`),
  130.   KEY `idx_gmt_create` (`gmt_create`),
  131.   KEY `idx_gmt_modified` (`gmt_modified`),
  132.   KEY `idx_did` (`data_id`)
  133. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造';
  134. /******************************************/
  135. /*   数据库全名 = nacos_config   */
  136. /*   表名称 = tenant_capacity   */
  137. /******************************************/
  138. CREATE TABLE `tenant_capacity` (
  139.   `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  140.   `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID',
  141.   `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  142.   `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  143.   `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  144.   `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数',
  145.   `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  146.   `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  147.   `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  148.   `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  149.   PRIMARY KEY (`id`),
  150.   UNIQUE KEY `uk_tenant_id` (`tenant_id`)
  151. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表';
  152. CREATE TABLE `tenant_info` (
  153.   `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  154.   `kp` varchar(128) NOT NULL COMMENT 'kp',
  155.   `tenant_id` varchar(128) default '' COMMENT 'tenant_id',
  156.   `tenant_name` varchar(128) default '' COMMENT 'tenant_name',
  157.   `tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc',
  158.   `create_source` varchar(32) DEFAULT NULL COMMENT 'create_source',
  159.   `gmt_create` bigint(20) NOT NULL COMMENT '创建时间',
  160.   `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间',
  161.   PRIMARY KEY (`id`),
  162.   UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
  163.   KEY `idx_tenant_id` (`tenant_id`)
  164. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';
  165. CREATE TABLE `users` (
  166.         `username` varchar(50) NOT NULL PRIMARY KEY,
  167.         `password` varchar(500) NOT NULL,
  168.         `enabled` boolean NOT NULL
  169. );
  170. CREATE TABLE `roles` (
  171.         `username` varchar(50) NOT NULL,
  172.         `role` varchar(50) NOT NULL,
  173.         UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE
  174. );
  175. CREATE TABLE `permissions` (
  176.     `role` varchar(50) NOT NULL,
  177.     `resource` varchar(255) NOT NULL,
  178.     `action` varchar(8) NOT NULL,
  179.     UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE
  180. );
  181. INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);
  182. INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');
复制代码
下载Nacos


nacos在GitHub上有下载地址:https://github.com/alibaba/nacos/tags,可以选择任意版本下载。

这里我用的是1.4.1版本:


配置Nacos


将这个包解压到任意非中文目录下,如图:

目录说明:

  • bin:启动脚本
  • conf:配置文件
进入nacos的conf目录,修改配置文件cluster.conf.example,重命名为cluster.conf:


然后添加内容:
  1. 192.168.211.1:8845
  2. 192.168.211.1.8846
  3. 192.168.211.1.8847
复制代码
修改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
复制代码
启动


将nacos文件夹复制三份,分别命名为:nacos1、nacos2、nacos3

然后分别修改三个文件夹中的application.properties,
nacos1:
  1. server.port=8845
  2. nacos.inetutils.ip-address=192.168.211.1
复制代码
nacos2:
  1. server.port=8846
  2. nacos.inetutils.ip-address=192.168.211.1
复制代码
nacos3:
  1. server.port=8847
  2. nacos.inetutils.ip-address=192.168.211.1
复制代码
然后分别启动三个nacos节点:
  1. startup.cmd
复制代码
nginx反向代理


下载nginx安装包解压到任意非中文目录下:

修改conf/nginx.conf文件,配置如下:
  1. upstream nacos-cluster {
  2.     server 192.168.211.1:8845;
  3.         server 192.168.211.1:8846;
  4.         server 192.168.211.1:8847;
  5. }
  6. server {
  7.     listen       80;
  8.     server_name  localhost;
  9.     location / {
  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地址
复制代码
优化


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


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

尚未崩坏

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表