概述
官方文档:https://nacos.io/zh-cn/docs/what-is-nacos.html
Nacos 定制软件致力于发现、定制软件定制软件配置和管理微服务。Nacos 定制软件提供了一组简单易用的特性集,定制软件快速实现动态服务发现、服务配置、定制软件服务元数据及流量管理。
Nacos 定制软件更敏捷和容易地构建、定制软件交付和管理微服务平台。 Nacos 是构建以“服务”定制软件为中心的现代应用架构 (定制软件例如微服务范式、定制软件云原生范式) 定制软件的服务基础设施。
服务(Service)是 Nacos 定制软件世界的一等公民。Nacos 定制软件支持几乎所有主流类型的“服务”的发现、配置和管理:
-
Kubernetes Service
-
gRPC & Dubbo RPC Service
-
Spring Cloud RESTful Service
Nacos 定制软件的关键特性包括:
-
定制软件服务发现和服务健康监测
Nacos 支持基于 DNS 和基于 RPC 定制软件的服务发现。定制软件服务提供者使用 原生SDK、OpenAPI、定制软件或一个独立的Agent TODO注册 Service 后,定制软件服务消费者可以使用DNS TODO 或HTTP&API定制软件查找和发现服务。
Nacos 定制软件提供对服务的实时定制软件的健康检查,定制软件阻止向不健康的主机或定制软件服务实例发送请求。Nacos 定制软件支持传输层 (PING 或 TCP)和应用层 (如 HTTP、MySQL、定制软件用户自定义)的健康检查。 对于复杂的云环境和网络拓扑环境中(如 VPC、边缘网络等)服务的健康检查,Nacos 提供了 agent 上报模式和服务端主动检测2种健康检查模式。Nacos 还提供了统一的健康检查仪表盘,帮助根据健康状态管理服务的可用性及流量。
-
动态配置服务
动态配置服务以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。
动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。
配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。
Nacos 提供了一个简洁易用的UI 管理所有的服务和应用的配置。Nacos 还提供包括配置版本跟踪、金丝雀发布、一键回滚配置以及客户端配置更新状态跟踪在内的一系列开箱即用的配置管理特性,可以更安全地在生产环境中管理配置变更和降低配置变更带来的风险。
-
动态 DNS 服务
动态 DNS 服务支持权重路由,可以更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。动态DNS服务还能更容易地实现以 DNS 协议为基础的服务发现,以消除耦合到厂商私有服务发现 API 上的风险。
Nacos 提供了一些简单的 DNS APIs TODO 管理服务的关联域名和可用的 IP:PORT 列表.
-
服务及其元数据管理
Nacos 能从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。
nacos整合
参考:https://blog.csdn.net/ZHANGLIZENG/article/details/119065077
依赖引入
<!-- nacos --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>2.2.1.RELEASE</version> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.2.1.RELEASE</version> </dependency>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
注意:
-
若使用示例的依赖版本号,Spring Boot版本要低于2.4,否则启动应用会报错。
-
SpringBoot、SpringCloud和nacos集成版本对应关系对照(版本若对应不上,应用可能会启动报错):
https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
配置Nacos
项目中默认配置文件是 application.properties ,Nacos 配置加在此配置文件中的话,应用启动会报连接 Nacos 失败,需要创建 bootstrap.properties 或 bootstrap.yml 配置文件(添加任意一个即可),下面以 bootstrap.yml为例:
spring: application: # 项目(微服务)名称 name: apm-mobile-android cloud: nacos: # nacos用户名 username: nacos # nacos用户密码 password: nacos # nacos服务器地址 server-addr: 10.0.7.115:18117 # nacos配置中心相关 config: # 开启nacos作为配置中心,默认值:true enabled: true # 作为配置中心的nacos服务器地址,默认值:${spring.cloud.nacos:server-addr} #server-addr: 10.0.7.115:18117 # 配置文件读取的nacos命名空间ID,默认值:public namespace: PROD # 配置文件在nacos命名空间中的分组,默认值:DEFAULT_GROUP group: apm # 配置文件的文件前缀(配置文件名称),默认值:${spring.application.name} prefix: ${spring.application.name} # 配置文件的文件后缀(文件类型),默认值:properties file-extension: properties # 配置内容的编码方式,默认值:UTF-8 encode: UTF-8 # 获取配置的超时时间,单位:ms,默认值:3000 timeout: 3000 # 开启监听和自动刷新,动态感知配置变化,默认值:true refresh-enabled: true # AccessKey #access-key: 123 # SecretKey #secret-key: 123 # 引入共享配置(同一分组) shared-configs: # 配置支持共享的 Data Id - data-id: comm.properties # 配置 Data Id 所在分组,缺省默认 DEFAULT_GROUP group: DEFAULT_GROUP # 配置Data Id 在配置变更时,是否动态刷新,缺省默认 false refresh: true # 引入扩展配置(同一分组或不同分组) extension-configs: # 配置支持共享的 Data Id - data-id: comm.properties # 配置 Data Id 所在分组,缺省默认 DEFAULT_GROUP group: DEFAULT_GROUP # 配置Data Id 在配置变更时,是否动态刷新,缺省默认 false refresh: true # nacos注册中心相关 discovery: # 开启nacos作为服务注册中心,默认值:true enabled: true # 作为注册中心的nacos服务器地址,默认值:${spring.cloud.nacos:server-addr} #server-addr: 10.0.7.115:18117 # 服务注册在nacso上的命名空间ID,默认值:public namespace: PROD
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
加载Nacos配置中心配置项
在初始化类中添加 @EnableDiscoveryClient
注解即可:
import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@EnableDiscoveryClient // 开启服务发现客户端,加载Nacos配置中心配置项@SpringBootApplicationpublic class SpringbootdemoApplication { public static void main(String[] args) { SpringApplication.run(SpringbootdemoApplication.class, args); new BootstrapManager(); }}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
Nacos配置中心配置项动态生效
前置条件:
-
bootstrap配置文件中nacos的配置项refresh-enabled: true(默认开启)
# 开启监听和自动刷新,动态感知配置变化,默认值:truespring.cloud.nacos.config.refresh-enabled=true
- 1
- 2
方式一:@Value + @RefreshScope 获取最新值
@RestController@RefreshScope // 配置项动态生效public class TestController { @NacosValue(value = "${test.data}", autoRefreshed = true) private String data; @Value(value = "${test.data}") private String datas; @GetMapping("test") public String test() { return "data :" + data + ",datas="+datas; }}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
方式二:通过applicationContext.getEnvironment.getProperty 获取最新值
@SpringBootApplicationpublic class NacosConfigSimpleApplication { public static void main(String[] args) throws InterruptedException { ConfigurableApplicationContext applicationContext = SpringApplication.run(NacosConfigSimpleApplication.class, args); //取到Spring的配置环境 while(true){ ConfigurableEnvironment environment = applicationContext.getEnvironment(); String username = environment.getProperty("user.name"); String age = environment.getProperty("user.age"); System.out.println("username:"+username+" | age:"+age); TimeUnit.SECONDS.sleep(1); } }}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
方式三:通过@NacosValue获取最新值
standalone使用,@NacosValue获取最新值nacos,配置信息需要写在配置类上
@Configuration@EnableNacosConfig(globalProperties = @NacosProperties(serverAddr = "127.0.0.1:8848"))@NacosPropertySource(dataId = "example", group="test",autoRefreshed = true)public class NacosConfiguration { }
- 1
- 2
- 3
- 4
@Controllerpublic class ConfigController { @NacosValue(value = "${test.data}", autoRefreshed = true) private boolean data; @RequestMapping(value = "/test", method = GET) @ResponseBody public boolean get() { return data; }}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
引入公共的配置文件
默认读取的配置文件是与服务名相同的配置文件的配置;若是还有其它公共的配置需要读取进来,就涉及到多个配置文件的读取。
在bootstrap配置文件中引入公共配置文件的方式:
-
方式一:拓展配置方式
可以引入与默认配置文件同一分组或不同分组的公共配置文件
-
使用 extension-configs 按数组的方式引入配置,设置data_id、group、refresh值
# 配置支持共享的 Data Idspring.cloud.nacos.config.extension-configs[0].data-id=comm.properties# 配置 Data Id 所在分组,缺省默认 DEFAULT_GROUPspring.cloud.nacos.config.extension-configs[0].group=DEFAULT_GROUP# 配置Data Id 在配置变更时,是否动态刷新,缺省默认 falsespring.cloud.nacos.config.extension-configs[0].refresh=true
- 1
- 2
- 3
- 4
- 5
- 6
-
使用 ext-configs 按数组的方式引入配置,设置data_id、group、refresh值
(ext-config 官方标记废弃;取而代之的是 extension-configs)
-
-
方式二:共享配置方式
只能引入与默认配置文件同一分组的公共配置文件
-
使用 shared-configs 按数组的方式引入配置,设置data_id、group、refresh值
# 配置支持共享的 Data Idspring.cloud.nacos.config.shared-configs[0].data-id=comm.properties# 配置 Data Id 所在分组,缺省默认 DEFAULT_GROUPspring.cloud.nacos.config.shared-configs[0].group=DEFAULT_GROUP# 配置Data Id 在配置变更时,是否动态刷新,缺省默认 falsespring.cloud.nacos.config.shared-configs[0].refresh=true
- 1
- 2
- 3
- 4
- 5
- 6
-
使用 shared-dataids 来指定要读取共享配置文件的 DataID ,多个文件用
,
分隔使用 refreshable-dataids 指定共享配置文件,支持自动刷新(shared-dataids 官方标记废弃;取而代之的是 shared-configs)
spring.cloud.nacos.config.shared-dataids=shareconfig1.yml,shareconfig2.ymlspring.cloud.nacos.config.refreshable-dataids=shareconfig1.yml,shareconfig2.yml
- 1
- 2
-
配置文件读取优先级:
- profile > 默认 > extension-configs(数组下标越大优先级越大) > shared-configs(数组下标越大优先级越大)
- 数组下标越大优先级越大 即 数组中后面引入的会覆盖前面引入的相同项
支持profile粒度的配置
spring-cloud-starter-alibaba-nacos-config在加载配置的时候,不仅仅加载了以dataid为 ${spring.application.name}.${file-extension:properties}
为前缀的文件,还加载了dataid为 ${spring.application.name}-${profile}.${file-extension:properties}
的基础配置。在日常开发环境中,若是遇到多套配置的情况,可以使用spring提供的 ${spring.profiles.active}
这个配置项配置选择哪个配置
#选择加载的文件为application-dev.propertiesspring.profiles.active=dev
- 1
- 2
注意:
-
只有默认的配置文件才能结合profile使用;除了默认配置文件,其它配置文件(例如:dev)都需要写上后缀。并且后缀必须跟配置的 boostrap.properties中 配置的扩展名(spring.cloud.nacos.config.file-extension=?)一致
-
默认配置文件:跟服务名spring.application.name相同的DataId的配置文件(无文件扩展名),称之为默认配置文件
部署nacos
docker stack 部署 nacos 集群
docker stack部署nacos集群的部署模板:docker-compose-swarm-nacos.yml
注:
- @nacos_image、@mysql_image 替换为实际的镜像
- @nacos_logs_path、@nacos_data_path替换为实际的存储路径
version: "3.5"services: nacos1: hostname: nacos1 container_name: nacos1 image: @nacos_image volumes: - @nacos_logs_path/nacos1:/home/nacos/logs ports: # 8848端口是Nacos对客户端提供服务的端口 - "32101:8848" expose: # 7848是Nacos集群通信端口,用于Nacos集群间进行选举,检测等 - "7848" environment: NACOS_REPLICAS: 3 MYSQL_SERVICE_HOST: nacos-mysql MYSQL_SERVICE_DB_NAME: nacos_devtest MYSQL_SERVICE_PORT: 3306 MYSQL_SERVICE_USER: nacos MYSQL_SERVICE_PASSWORD: nacos MODE: cluster NACOS_SERVER_PORT: 8848 PREFER_HOST_MODE: hostname NACOS_SERVERS: nacos1:8848 nacos2:8848 nacos3:8848 restart: always networks: - apps_net depends_on: - nacos-mysql deploy: labels: name: nacos1 placement: constraints: - node.role == manager nacos2: hostname: nacos2 image: @nacos_image container_name: nacos2 volumes: - @nacos_logs_path/nacos2:/home/nacos/logs expose: - "8848" - "7848" environment: NACOS_REPLICAS: 3 MYSQL_SERVICE_HOST: nacos-mysql MYSQL_SERVICE_DB_NAME: nacos_devtest MYSQL_SERVICE_PORT: 3306 MYSQL_SERVICE_USER: nacos MYSQL_SERVICE_PASSWORD: nacos MODE: cluster NACOS_SERVER_PORT: 8848 PREFER_HOST_MODE: hostname NACOS_SERVERS: nacos1:8848 nacos2:8848 nacos3:8848 restart: always networks: - apps_net depends_on: - nacos-mysql deploy: labels: name: nacos2 placement: constraints: - node.role == worker nacos3: hostname: nacos3 image: @nacos_image container_name: nacos3 volumes: - @nacos_logs_path/nacos3:/home/nacos/logs expose: - "8848" - "7848" environment: NACOS_REPLICAS: 3 MYSQL_SERVICE_HOST: nacos-mysql MYSQL_SERVICE_DB_NAME: nacos_devtest MYSQL_SERVICE_PORT: 3306 MYSQL_SERVICE_USER: nacos MYSQL_SERVICE_PASSWORD: nacos MODE: cluster NACOS_SERVER_PORT: 8848 PREFER_HOST_MODE: hostname NACOS_SERVERS: nacos1:8848 nacos2:8848 nacos3:8848 restart: always networks: - apps_net depends_on: - nacos-mysql deploy: labels: name: nacos3 placement: constraints: - node.role == worker nacos-mysql: hostname: nacos-mysql container_name: nacos-mysql image: @mysql_image volumes: - @nacos_data_path:/var/lib/mysql ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: nacos_devtest MYSQL_USER: nacos MYSQL_PASSWORD: nacos restart: always networks: - apps_net deploy: labels: name: mysql placement: constraints: - node.role == managernetworks: apps_net: # 引用已创建的网络。手动创建命令:docker network create -d overlay --attachable apps_net external: true
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
k8s 部署 nacos 集群
使用 k8s 的 helm 工具部署nacos集群的部署模板:
values.yaml
mysqlImage: "harbor.paic.com.cn/library/nacos-mysql:latest"nacosImage: "harbor.paic.com.cn/library/nacos-service:1.4.1"busyboxImage: "harbor.paic.com.cn/library/busybox:1.30.0"mysqlHost: "mysql"mysqlPort: "3306"mysqlDatabase: "nacos_devtest"mysqlRootPassword: passwordmysqlUser: nacosmysqlPassword: nacosnfsPath: /home/nacos/nacosDataPath: /home/nacos/dataservice_name: nacosnamespace: public
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
Chart.yaml
apiVersion: v1appVersion: "1.0"description: A Helm chart for Kubernetesname: nacosversion: 0.1.0maintainers:- name: name
- 1
- 2
- 3
- 4
- 5
- 6
- 7
templates文件夹下 configmap.yaml
---apiVersion: v1kind: ConfigMapmetadata: name: nacos-cm namespace: {{ .Values.namespace }}data: mysql.host: mysql mysql.port: "3306" mysql.db.name: {{ .Values.mysqlDatabase }} mysql.user: {{ .Values.mysqlUser }} mysql.password: {{ .Values.mysqlPassword }}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
templates文件夹下 mysql.yaml
apiVersion: v1kind: ReplicationControllermetadata: name: mysql namespace: {{ .Values.namespace }} labels: name: mysqlspec: replicas: 1 selector: name: mysql template: metadata: labels: name: mysql spec: containers: - name: mysql image: {{ .Values.mysqlImage }} ports: - containerPort: 3306 volumeMounts: - name: mysql-data mountPath: /var/lib/mysql env: - name: MYSQL_ROOT_PASSWORD value: {{ .Values.mysqlRootPassword }} - name: MYSQL_DATABASE value: {{ .Values.mysqlDatabase }} - name: MYSQL_USER value: {{ .Values.mysqlUser }} - name: MYSQL_PASSWORD value: {{ .Values.mysqlPassword }} volumes: - name: mysql-data hostPath: path: {{ .Values.nacosDataPath }} nodeSelector: nacos: nacos-mysql---apiVersion: v1kind: Servicemetadata: name: mysql namespace: {{ .Values.namespace }} labels: name: mysqlspec: ports: - port: 3306 targetPort: 3306 selector: name: mysql
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
templates文件夹下 nacos.yaml
###使用自建数据库;使用Ingress发布配置后台###---apiVersion: v1kind: Servicemetadata: name: nacos-headless namespace: {{ .Values.namespace }} labels: caas_service: nacos-headlessspec: ports: - port: 8848 name: server protocol: TCP targetPort: 8848 - port: 7848 name: rpc targetPort: 7848 clusterIP: None sessionAffinity: None type: ClusterIP publishNotReadyAddresses: true selector: caas_service: {{ .Values.service_name }}---apiVersion: apps/v1kind: StatefulSetmetadata: name: {{ .Values.service_name }} namespace: {{ .Values.namespace }}spec: serviceName: nacos-headless replicas: 3 template: metadata: labels: caas_service: {{ .Values.service_name }} annotations: pod.alpha.kubernetes.io/initialized: "true" spec: affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: "caas_service" operator: In values: - nacos-headless topologyKey: "kubernetes.io/hostname" containers: - name: k8snacos imagePullPolicy: Always image: {{ .Values.nacosImage }} resources: requests: memory: "2Gi" cpu: "500m" ports: - containerPort: 8848 name: client - containerPort: 7848 name: rpc livenessProbe: httpGet: path: /nacos port: 8848 initialDelaySeconds: 10 periodSeconds: 3 timeoutSeconds: 1 failureThreshold: 5 readinessProbe: httpGet: path: /nacos port: 8848 initialDelaySeconds: 10 periodSeconds: 3 timeoutSeconds: 1 failureThreshold: 5 env: - name: NACOS_REPLICAS value: "3" - name: MYSQL_SERVICE_HOST valueFrom: configMapKeyRef: name: nacos-cm key: mysql.host - name: MYSQL_SERVICE_DB_NAME valueFrom: configMapKeyRef: name: nacos-cm key: mysql.db.name - name: MYSQL_SERVICE_PORT valueFrom: configMapKeyRef: name: nacos-cm key: mysql.port - name: MYSQL_SERVICE_USER valueFrom: configMapKeyRef: name: nacos-cm key: mysql.user - name: MYSQL_SERVICE_PASSWORD valueFrom: configMapKeyRef: name: nacos-cm key: mysql.password - name: MODE value: "cluster" - name: NACOS_SERVER_PORT value: "8848" - name: PREFER_HOST_MODE value: "hostname" - name: NACOS_SERVERS value: {{ .Values.service_name }}-0.nacos-headless.{{ .Values.namespace }}.svc.cluster.local:8848 {{ .Values.service_name }}-1.nacos-headless.{{ .Values.namespace }}.svc.cluster.local:8848 {{ .Values.service_name }}-2.nacos-headless.{{ .Values.namespace }}.svc.cluster.local:8848 initContainers: - command: - sh - -c - sleep 10; mkdir /wls/logs/nacos-0 /wls/logs/nacos-1 /wls/logs/nacos-2 -p;chown -R 798:5682 /wls/logs/nacos-0 /wls/logs/nacos-1 /wls/logs/nacos-2 ; echo init finished env: image: {{ .Values.busyboxImage }} imagePullPolicy: IfNotPresent name: init volumeMounts: - mountPath: /wls/logs/ name: logs volumes: - name: logs hostPath: path: {{ .Values.nfsPath }}/logs selector: matchLabels: caas_service: {{ .Values.service_name }}---# ------------------- App Service ------------------- #apiVersion: v1kind: Servicemetadata: name: {{ .Values.service_name }}-nodeport annotations: {{- range $key, $value := .Values.annotations }} {{ $key }}: {{ $value | quote }} {{- end }} labels: caas_service: {{ .Values.service_name }}spec: ports: - name: "nodeport" port: 8848 protocol: TCP targetPort: 8848 nodePort: 32101 publishNotReadyAddresses: true selector: caas_service: {{ .Values.service_name }} type: NodePort
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
检查nacos集群是否健康启动
nacos集群启动后,可能会出现容器状态是 health/running,但实际并未健康启动的情况,会导致微服务注册有问题,需要手动检查下
- 进入到nacos实例的容器内后执行命令以下,查看响应信息
curl -X PUT '127.0.0.1:8848/nacos/v1/ns/instance/beat?serviceName=nacos'
- 1
-
若nacos实例未健康启动,重启nacos的实例容器后再次检查(一般重启一次后就能健康启动)
# nacos实例健康启动的响应信息{"clientBeatInterval":5000,"code":20404}
- 1
- 2