Nacos使用详解

r囧r小猫 2024-03-16 09:17 111阅读 0赞

c44a0e75776f4768ae9bed6ddf2317c5.png

一、部署nacos

1、方式一(一般的windows和linux部署)

需要的nacos-server-1.4.1文件:https://download.csdn.net/download/yueyue763184/87822434?spm=1001.2014.3001.5503

一般的nacos部署方式教程:https://blog.csdn.net/yueyue763184/article/details/127966337?spm=1001.2014.3001.5501

2、方式二(使用docker部署,推荐使用)

1.拉取nacos-server镜像

  1. docker pull nacos/nacos-server

5b9adb8c694447848a21e9fa94e9c0dd.png

2.创建nacos相关mysql数据库配置表

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

413e69c5b31546f3b9cebaf349882aaf.png

3.创建挂载目录和编写配置文件

  1. mkdir -p /mydata/nacos/logs/
  2. mkdir -p /mydata/nacos/init.d/
  3. vim /mydata/nacos/init.d/custom.properties

custom.properties

  1. server.contextPath=/nacos
  2. server.servlet.contextPath=/nacos
  3. server.port=8848
  4. spring.datasource.platform=mysql
  5. db.num=1
  6. db.url.0=jdbc:mysql://mysql数据库的公网ip:3306/nacos_config? characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true #这里需要修改端口
  7. db.user=user #用户名
  8. db.password=pass #密码
  9. nacos.cmdb.dumpTaskInterval=3600
  10. nacos.cmdb.eventTaskInterval=10
  11. nacos.cmdb.labelTaskInterval=300
  12. nacos.cmdb.loadDataAtStart=false
  13. management.metrics.export.elastic.enabled=false
  14. management.metrics.export.influx.enabled=false
  15. server.tomcat.accesslog.enabled=true
  16. server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i
  17. nacos.security.ignore.urls=/,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/login,/v1/console/health/**,/v1/cs/**,/v1/ns/**,/v1/cmdb/**,/actuator/**,/v1/console/server/**
  18. nacos.naming.distro.taskDispatchThreadCount=1
  19. nacos.naming.distro.taskDispatchPeriod=200
  20. nacos.naming.distro.batchSyncKeyCount=1000
  21. nacos.naming.distro.initDataRatio=0.9
  22. nacos.naming.distro.syncRetryDelay=5000
  23. nacos.naming.data.warmup=true
  24. nacos.naming.expireInstance=true

4.启动nacos容器

  1. docker run --name nacos -d -p 8848:8848 --privileged=true --restart=always -e JVM_XMS=256m -e JVM_XMX=256m -e MODE=standalone -e PREFER_HOST_MODE=hostname -v /mydata/nacos/logs:/home/nacos/logs -v /mydata/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties nacos/nacos-server

4d5c85b6c1fd4b3086d61731ea844d99.png

二、权重配置

实际部署中会出现这样的场景:服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求。

但默认情况下NacosRule是同集群内随机挑选,不会考虑机器的性能问题。因此,Nacos提供了权重配置来控制访问频率,权重越大则访问频率越高。

在nacos控制台,找到user-service的实例列表,点击编辑,即可修改权重:

2d8173bb8fc0435699bc2ce7640cdd08.png b344987fbf364eecb608f380ac936c0b.png

三、环境隔离

Nacos提供了namespace来实现环境隔离功能。

  • nacos中可以有多个namespace
  • namespace下可以有group、service等
  • 不同namespace之间相互隔离,例如不同namespace的服务互相不可见

64e8ac5550b640d7a68952822073e55e.png

9b879e5f0ebc4369879236dca3a706aa.png

然后修改yaml文件

  1. spring:
  2. cloud:
  3. nacos:
  4. server-addr: localhost:8848
  5. discovery:
  6. cluster-name: HZ
  7. namespace: 7f5b1a4c-c714-461d-88c6-fe51c06782be # 命名空间,填ID

四、配置管理

1、统一配置管理

当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。

901088820d404814be72b1feca74c8a6.png

Nacos一方面可以将配置集中管理,另一方可以在配置变更时,及时通知微服务,实现配置的热更新。

6139c619f0734398adbbb9ed05649096.png 9d4dd257012c4c939bbda45e04fbb550.png

!注意:项目的核心配置,需要热更新的配置才有放到nacos管理的必要。基本不会变更的一些配置还是保存在微服务本地比较好。

微服务要拉取nacos中管理的配置,并且与本地的application.yml配置合并,才能完成项目启动。但如果尚未读取application.yml,又如何得知nacos地址呢?因此spring引入了一种新的配置文件bootstrap.yaml文件,会在application.yml之前被读取,流程如下:

ab942bd9707f458c9a6cb6fc7c0e86cf.png

1.引入nacos-config依赖

  1. <!--nacos配置管理依赖-->
  2. <dependency>
  3. <groupId>com.alibaba.cloud</groupId>
  4. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  5. </dependency>

2.添加bootstrap.yaml

  1. spring:
  2. application:
  3. name: userservice # 服务名称
  4. profiles:
  5. active: dev #开发环境,这里是dev
  6. cloud:
  7. nacos:
  8. server-addr: localhost:8848 # Nacos地址
  9. discovery:
  10. cluster-name: HZ # 集群名称
  11. namespace: 7f5b1a4c-c714-461d-88c6-fe51c06782be # 命名空间,填ID
  12. ephemeral: true # 设置为临时实例
  13. config:
  14. file-extension: yaml # 文件后缀名

" class="reference-link">c47591011d24453283c12c7ba33ebca0.png

3.拉取配置

b601de99e4e649958c5ba748dc19f19c.png

也可以通过如以下方法二的配置类获取nacos配置中的值。

2、配置热更新

1.方法一(@RefreshScope 注解)

1203a32055d2472ab43a6cb5f88c6c0d.png

2.方法二(配置类)

cadd08ea0bcb472785593ed60af4a2b0.png

3、配置共享

其实微服务启动时,会去nacos读取多个配置文件,例如:

  • [spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml
  • [spring.application.name].yaml,例如:userservice.yaml

[spring.application.name].yaml不包含环境,因此可以被多个环境共享。

优先级:

42dbd8c63bc2456da01657b2358d3360.png

五、使用docker搭建nacos集群

可以参考:https://blog.csdn.net/m0_58541541/article/details/123092485?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168510077816800192232954%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=168510077816800192232954&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-123092485-null-null.142^v88^control_2,239^v2^insert_chatgpt&utm_term=docker%E9%83%A8%E7%BD%B2nacos%E9%9B%86%E7%BE%A4&spm=1018.2226.3001.4187

  1. http {
  2. include /etc/nginx/mime.types;
  3. default_type application/octet-stream;
  4. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  5. '$status $body_bytes_sent "$http_referer" '
  6. '"$http_user_agent" "$http_x_forwarded_for"';
  7. access_log /var/log/nginx/access.log main;
  8. sendfile on;
  9. #tcp_nopush on;
  10. keepalive_timeout 65;
  11. #gzip on;
  12. include /etc/nginx/conf.d/*.conf;
  13. include /etc/nginx/conf.d/*.conf;
  14. upstream cluster{
  15. server nacos服务器IP:8848;
  16. server nacos服务器IP:8848;
  17. }
  18. server {
  19. listen 8080;
  20. server_name _;
  21. location / {
  22. proxy_pass http://cluster;
  23. }
  24. }
  25. }

发表评论

表情:
评论列表 (有 0 条评论,111人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Nacos 原理详解

    一. 背景 现如今市面上注册中心的轮子很多,我实际使用过的就有三款:Eureka、Nacos,Zookeeper、Consul 由于当前参与Nacos 集群的维护和开发工