一、Nacos简介
1、命名由来
前四个字母分别为Naming和Configuration的前两个字母,最后的s为Service。
2、是什么
一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Nacos: Dynamic Naming and Configuration Service
Nacos就是注册中心 + 配置中心的组合
Nacos = Eureka+Config +Bus
3、能干嘛
- 替代Eureka做服务注册中心
- 替代Config做服务配置中心
4、下载
https://github.com/alibaba/Nacos
https://github.com/alibaba/nacos/releases
官网文档:
https://nacos.io/zh-cn/index.html
5、各种注册中心比较
据说 Nacos 在阿里巴巴内部有超过 10 万的实例运行,已经过了类似双十一等各种大型流量的考验
二、Nacos 安装与运行
1、准备环境
本地Java8 + Maven环境
2、下载 Nacos
https://github.com/alibaba/nacos/releases
3、运行
解压安装包,直接运行bin目录下的startup.cmd
在Nacos的高版本中:Nocas-1.3.2 以后
默认启动时会以集群方式启动,但由于缺少配置信息就会导致启动失败。
下面提供两种修改方式:
(1)集群方式启动,完善配置文件
https://blog.csdn.net/A564492203/article/details/107815933
(2)单机方式启动,修改启动文件
https://blog.csdn.net/lyxuefeng/article/details/108752302
4、查看
- 命令运行成功后直接访问http://localhost:8848/nacos
- 默认账号密码都是nacos
- 结果页面
三、Nacos 作为服务注册中心
1、官网文档
2、基于Nacos的服务提供者
(1)新建Module
cloudalibaba-provider-payment9001
(2)改POM
父POM
            <span class="hljs-tag"><<span class="hljs-name">dependency</span>></span><br>                <span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>com.alibaba.cloud<span class="hljs-tag">groupId</span>><br>                <span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>spring-cloud-alibaba-dependencies<span class="hljs-tag">artifactId</span>><br>                <span class="hljs-tag"><<span class="hljs-name">version</span>></span>2.1.0.RELEASE<span class="hljs-tag">version</span>><br>                <span class="hljs-tag"><<span class="hljs-name">type</span>></span>pom<span class="hljs-tag">type</span>><br>                <span class="hljs-tag"><<span class="hljs-name">scope</span>></span>import<span class="hljs-tag">scope</span>><br>            <span class="hljs-tag">dependency</span>>
本模块POM
    <span class="hljs-tag"><<span class="hljs-name">dependencies</span>></span><br>        <br>        <span class="hljs-tag"><<span class="hljs-name">dependency</span>></span><br>            <span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>com.alibaba.cloud<span class="hljs-tag">groupId</span>><br>            <span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>spring-cloud-starter-alibaba-nacos-discovery<span class="hljs-tag">artifactId</span>><br>        <span class="hljs-tag">dependency</span>><br>        <br>        <span class="hljs-tag"><<span class="hljs-name">dependency</span>></span><br>            <span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>org.springframework.boot<span class="hljs-tag">groupId</span>><br>            <span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>spring-boot-starter-web<span class="hljs-tag">artifactId</span>><br>        <span class="hljs-tag">dependency</span>><br>        <span class="hljs-tag"><<span class="hljs-name">dependency</span>></span><br>            <span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>org.springframework.boot<span class="hljs-tag">groupId</span>><br>            <span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>spring-boot-starter-actuator<span class="hljs-tag">artifactId</span>><br>        <span class="hljs-tag">dependency</span>><br>        <br>        <span class="hljs-tag"><<span class="hljs-name">dependency</span>></span><br>            <span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>org.springframework.boot<span class="hljs-tag">groupId</span>><br>            <span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>spring-boot-devtools<span class="hljs-tag">artifactId</span>><br>            <span class="hljs-tag"><<span class="hljs-name">scope</span>></span>runtime<span class="hljs-tag">scope</span>><br>            <span class="hljs-tag"><<span class="hljs-name">optional</span>></span>true<span class="hljs-tag">optional</span>><br>        <span class="hljs-tag">dependency</span>><br>        <span class="hljs-tag"><<span class="hljs-name">dependency</span>></span><br>            <span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>org.projectlombok<span class="hljs-tag">groupId</span>><br>            <span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>lombok<span class="hljs-tag">artifactId</span>><br>            <span class="hljs-tag"><<span class="hljs-name">optional</span>></span>true<span class="hljs-tag">optional</span>><br>        <span class="hljs-tag">dependency</span>><br>        <span class="hljs-tag"><<span class="hljs-name">dependency</span>></span><br>            <span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>org.springframework.boot<span class="hljs-tag">groupId</span>><br>            <span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>spring-boot-starter-test<span class="hljs-tag">artifactId</span>><br>            <span class="hljs-tag"><<span class="hljs-name">scope</span>></span>test<span class="hljs-tag">scope</span>><br>        <span class="hljs-tag">dependency</span>><br>    <span class="hljs-tag">dependencies</span>>
(3)写YML
<span class="hljs-attr">server:</span><br>  <span class="hljs-attr">port:</span> <span class="hljs-number">9001</span><br><br><span class="hljs-attr">spring:</span><br>  <span class="hljs-attr">application:</span><br>    <span class="hljs-attr">name:</span> <span class="hljs-string">nacos-payment-provider</span><br>  <span class="hljs-attr">cloud:</span><br>    <span class="hljs-attr">nacos:</span><br>      <span class="hljs-attr">discovery:</span><br>        <span class="hljs-attr">server-addr:</span> <span class="hljs-number">127.0</span><span class="hljs-number">.0</span><span class="hljs-number">.1</span><span class="hljs-string">:8848</span> <br><br><span class="hljs-attr">management:</span><br>  <span class="hljs-attr">endpoints:</span><br>    <span class="hljs-attr">web:</span><br>      <span class="hljs-attr">exposure:</span><br>        <span class="hljs-attr">include:</span> <span class="hljs-string">'*'</span>
(4)主启动
<br><br><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">PaymentMain9001</span> </span>{<br>    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{<br>        SpringApplication.run(PaymentMain9001<span class="hljs-class">.<span class="hljs-keyword">class</span>, <span class="hljs-title">args</span>)</span>;<br>    }<br>}
(5)业务类
<br><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">PaymentController</span> </span>{<br>    (<span class="hljs-string">"${server.port}"</span>)<br>    <span class="hljs-keyword">private</span> String serverPort;<br><br>    (value = <span class="hljs-string">"/payment/nacos/{id}"</span>)<br>    <span class="hljs-function"><span class="hljs-keyword">public</span> String <span class="hljs-title">getPayment</span><span class="hljs-params">(@PathVariable(<span class="hljs-string">"id"</span>)</span> Integer id) </span>{<br>        <span class="hljs-keyword">return</span> <span class="hljs-string">"nacos registry, serverPort: "</span>+ serverPort+<span class="hljs-string">"\t id"</span>+id;<br>    }<br>}
(5)测试
http://localhost:9001/payment/nacos/1
nacos 控制台:
nacos服务注册中心+服务提供者9001都OK了(5)创建提供者9002
为了下一章节演示nacos的负载均衡,参照9001新建9002
新建cloudalibaba-provider-payment9002,其他步骤同 9001
虚拟端口映射: 或者取巧不想新建重复体力劳动,直接拷贝虚拟端口映射
3、基于Nacos的服务消费者
(1)新建Module
cloudalibaba-consumer-nacos-order83
(2)改POM
    <span class="hljs-tag"><<span class="hljs-name">dependencies</span>></span><br>        <br>        <span class="hljs-tag"><<span class="hljs-name">dependency</span>></span><br>            <span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>com.alibaba.cloud<span class="hljs-tag">groupId</span>><br>            <span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>spring-cloud-starter-alibaba-nacos-discovery<span class="hljs-tag">artifactId</span>><br>        <span class="hljs-tag">dependency</span>><br>        <br>        <span class="hljs-tag"><<span class="hljs-name">dependency</span>></span><br>            <span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>com.njf.springcloud<span class="hljs-tag">groupId</span>><br>            <span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>cloud-api-commons<span class="hljs-tag">artifactId</span>><br>            <span class="hljs-tag"><<span class="hljs-name">version</span>></span>${project.version}<span class="hljs-tag">version</span>><br>        <span class="hljs-tag">dependency</span>><br>        <br>        <span class="hljs-tag"><<span class="hljs-name">dependency</span>></span><br>            <span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>org.springframework.boot<span class="hljs-tag">groupId</span>><br>            <span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>spring-boot-starter-web<span class="hljs-tag">artifactId</span>><br>        <span class="hljs-tag">dependency</span>><br>        <span class="hljs-tag"><<span class="hljs-name">dependency</span>></span><br>            <span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>org.springframework.boot<span class="hljs-tag">groupId</span>><br>            <span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>spring-boot-starter-actuator<span class="hljs-tag">artifactId</span>><br>        <span class="hljs-tag">dependency</span>><br>        <br>        <span class="hljs-tag"><<span class="hljs-name">dependency</span>></span><br>            <span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>org.springframework.boot<span class="hljs-tag">groupId</span>><br>            <span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>spring-boot-devtools<span class="hljs-tag">artifactId</span>><br>            <span class="hljs-tag"><<span class="hljs-name">scope</span>></span>runtime<span class="hljs-tag">scope</span>><br>            <span class="hljs-tag"><<span class="hljs-name">optional</span>></span>true<span class="hljs-tag">optional</span>><br>        <span class="hljs-tag">dependency</span>><br>        <span class="hljs-tag"><<span class="hljs-name">dependency</span>></span><br>            <span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>org.projectlombok<span class="hljs-tag">groupId</span>><br>            <span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>lombok<span class="hljs-tag">artifactId</span>><br>            <span class="hljs-tag"><<span class="hljs-name">optional</span>></span>true<span class="hljs-tag">optional</span>><br>        <span class="hljs-tag">dependency</span>><br>        <span class="hljs-tag"><<span class="hljs-name">dependency</span>></span><br>            <span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>org.springframework.boot<span class="hljs-tag">groupId</span>><br>            <span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>spring-boot-starter-test<span class="hljs-tag">artifactId</span>><br>            <span class="hljs-tag"><<span class="hljs-name">scope</span>></span>test<span class="hljs-tag">scope</span>><br>        <span class="hljs-tag">dependency</span>><br>    <span class="hljs-tag">dependencies</span>>
为什么nacos支持负载均衡?
(3)写YML
<span class="hljs-attr">server:</span><br>  <span class="hljs-attr">port:</span> <span class="hljs-number">83</span><br><br><br><span class="hljs-attr">spring:</span><br>  <span class="hljs-attr">application:</span><br>    <span class="hljs-attr">name:</span> <span class="hljs-string">nacos-order-consumer</span><br>  <span class="hljs-attr">cloud:</span><br>    <span class="hljs-attr">nacos:</span><br>      <span class="hljs-attr">discovery:</span><br>        <span class="hljs-attr">server-addr:</span> <span class="hljs-string">localhost:8848</span><br><br><br><br><span class="hljs-attr">service-url:</span><br>  <span class="hljs-attr">nacos-user-service:</span> <span class="hljs-string">http://nacos-payment-provider</span>
(4)主启动
<br><br><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">OrderNacosMain83</span><br></span>{<br>    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{<br>        SpringApplication.run(OrderNacosMain83<span class="hljs-class">.<span class="hljs-keyword">class</span>,<span class="hljs-title">args</span>)</span>;<br>    }<br>}
(5)业务类
ApplicationContextBean
<br><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">ApplicationContextBean</span><br></span>{<br>    <br>    <br>    <span class="hljs-function"><span class="hljs-keyword">public</span> RestTemplate <span class="hljs-title">getRestTemplate</span><span class="hljs-params">()</span> </span>{<br>        <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> RestTemplate();<br>    }<br>}
OrderNacosController
<br><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">OrderNacosController</span><br></span>{<br>    <br>    <span class="hljs-keyword">private</span> RestTemplate restTemplate;<br><br>    (<span class="hljs-string">"${service-url.nacos-user-service}"</span>)<br>    <span class="hljs-keyword">private</span> String serverURL;<br><br>    (<span class="hljs-string">"/consumer/payment/nacos/{id}"</span>)<br>    <span class="hljs-function"><span class="hljs-keyword">public</span> String <span class="hljs-title">paymentInfo</span><span class="hljs-params">(@PathVariable(<span class="hljs-string">"id"</span>)</span> Long id) </span>{<br>        <span class="hljs-keyword">return</span> restTemplate.getForObject(serverURL+<span class="hljs-string">"/payment/nacos/"</span>+id,String<span class="hljs-class">.<span class="hljs-keyword">class</span>)</span>;<br>    }<br><br>}
(6)测试
Nacos控制台
http://localhost:83/consumer/payment/nacos/13
出现轮询效果。
4、服务注册中心对比
各种注册中心对比
Nacos全景图所示:
Nacos和CAP:
Nacos 支持AP和CP两种模式
Nacos 支持AP和CP模式的切换:
C是所有节点在同一时间看到的数据是一致的;而A的定义是所有的请求都会收到响应。
何时选择使用何种模式?
一般来说,如果不需要存储服务级别的信息且服务实例是通过nacos-client注册,并能够保持心跳上报,那么就可以选择AP模式。当前主流的服务如 Spring cloud 和 Dubbo 服务,都适用于AP模式,AP模式为了服务的可能性而减弱了一致性,因此AP模式下只支持注册临时实例。
如果需要在服务级别编辑或者存储配置信息,那么 CP 是必须,K8S服务和DNS服务则适用于CP模式。
CP模式下则支持注册持久化实例,此时则是以 Raft 协议为集群运行模式,该模式下注册实例之前必须先注册服务,如果服务不存在,则会返回错误。
curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'
四、Nacos 作为服务配置中心——基础配置
1、新建Module
cloudalibaba-config-nacos-client3377
2、改POM
    <span class="hljs-tag"><<span class="hljs-name">dependencies</span>></span><br>        <br>        <span class="hljs-tag"><<span class="hljs-name">dependency</span>></span><br>            <span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>com.alibaba.cloud<span class="hljs-tag">groupId</span>><br>            <span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>spring-cloud-starter-alibaba-nacos-config<span class="hljs-tag">artifactId</span>><br>        <span class="hljs-tag">dependency</span>><br>        <br>        <span class="hljs-tag"><<span class="hljs-name">dependency</span>></span><br>            <span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>com.alibaba.cloud<span class="hljs-tag">groupId</span>><br>            <span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>spring-cloud-starter-alibaba-nacos-discovery<span class="hljs-tag">artifactId</span>><br>        <span class="hljs-tag">dependency</span>><br>        <br>        <span class="hljs-tag"><<span class="hljs-name">dependency</span>></span><br>            <span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>org.springframework.boot<span class="hljs-tag">groupId</span>><br>            <span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>spring-boot-starter-web<span class="hljs-tag">artifactId</span>><br>        <span class="hljs-tag">dependency</span>><br>        <span class="hljs-tag"><<span class="hljs-name">dependency</span>></span><br>            <span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>org.springframework.boot<span class="hljs-tag">groupId</span>><br>            <span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>spring-boot-starter-actuator<span class="hljs-tag">artifactId</span>><br>        <span class="hljs-tag">dependency</span>><br>        <br>        <span class="hljs-tag"><<span class="hljs-name">dependency</span>></span><br>            <span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>org.springframework.boot<span class="hljs-tag">groupId</span>><br>            <span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>spring-boot-devtools<span class="hljs-tag">artifactId</span>><br>            <span class="hljs-tag"><<span class="hljs-name">scope</span>></span>runtime<span class="hljs-tag">scope</span>><br>            <span class="hljs-tag"><<span class="hljs-name">optional</span>></span>true<span class="hljs-tag">optional</span>><br>        <span class="hljs-tag">dependency</span>><br>        <span class="hljs-tag"><<span class="hljs-name">dependency</span>></span><br>            <span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>org.projectlombok<span class="hljs-tag">groupId</span>><br>            <span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>lombok<span class="hljs-tag">artifactId</span>><br>            <span class="hljs-tag"><<span class="hljs-name">optional</span>></span>true<span class="hljs-tag">optional</span>><br>        <span class="hljs-tag">dependency</span>><br>        <span class="hljs-tag"><<span class="hljs-name">dependency</span>></span><br>            <span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>org.springframework.boot<span class="hljs-tag">groupId</span>><br>            <span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>spring-boot-starter-test<span class="hljs-tag">artifactId</span>><br>            <span class="hljs-tag"><<span class="hljs-name">scope</span>></span>test<span class="hljs-tag">scope</span>><br>        <span class="hljs-tag">dependency</span>><br>    <span class="hljs-tag">dependencies</span>>
3、写YML
配置两个:
Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。
springboot中配置文件的加载是存在优先级顺序的, bootstrap优先级高于application
bootstrap.yml
<br><span class="hljs-attr">server:</span><br>  <span class="hljs-attr">port:</span> <span class="hljs-number">3377</span><br><br><span class="hljs-attr">spring:</span><br>  <span class="hljs-attr">application:</span><br>    <span class="hljs-attr">name:</span> <span class="hljs-string">nacos-config-client</span><br>  <span class="hljs-attr">cloud:</span><br>    <span class="hljs-attr">nacos:</span><br>      <span class="hljs-attr">discovery:</span><br>        <span class="hljs-attr">server-addr:</span> <span class="hljs-string">localhost:8848</span> <br>      <span class="hljs-attr">config:</span><br>        <span class="hljs-attr">server-addr:</span> <span class="hljs-string">localhost:8848</span> <br>        <span class="hljs-attr">file-extension:</span> <span class="hljs-string">yaml</span> <br><br><br>
application.yml
<span class="hljs-attr">spring:</span><br>  <span class="hljs-attr">profiles:</span><br>    <span class="hljs-attr">active:</span> <span class="hljs-string">dev</span> 
4、主启动类
<br><br><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">NacosConfigClientMain3377</span><br></span>{<br>    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{<br>        SpringApplication.run(NacosConfigClientMain3377<span class="hljs-class">.<span class="hljs-keyword">class</span>, <span class="hljs-title">args</span>)</span>;<br>    }<br>}
5、业务类
<br> <br><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">ConfigClientController</span><br></span>{<br>    (<span class="hljs-string">"${config.info}"</span>)<br>    <span class="hljs-keyword">private</span> String configInfo;<br><br>    (<span class="hljs-string">"/config/info"</span>)<br>    <span class="hljs-function"><span class="hljs-keyword">public</span> String <span class="hljs-title">getConfigInfo</span><span class="hljs-params">()</span> </span>{<br>        <span class="hljs-keyword">return</span> configInfo;<br>    }<br>}
@RefreshScope:
6、在Nacos中添加配置信息
Nacos中的匹配规则
理论
Nacos中的dataid的组成格式及与SpringBoot配置文件中的匹配规则
官网: https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
最后公式:
${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
实操
(1)新增配置
nacos-config-client-dev(2)Nacos界面配置对应
设置DataId
公式:
${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
- prefix 默认为 spring.application.name 的值
- spring.profile.active 即为当前环境对应的 profile,可以通过配置项 spring.profile.active 来配置
- file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置
小结说明:
(3)历史配置
Nacos会记录配置文件的历史版本默认保留30天,此外还有一键回滚功能,回滚操作将会触发配置更新
回滚:
7、测试
- 启动前需要在nacos客户端-配置管理-配置管理栏目下有对应的yaml配置文件
- 运行cloud-config-nacos-client3377的主启动类
- 调用接口查看配置信息 http://localhost:3377/config/info
8、自带动态刷新
修改下Nacos中的yaml配置文件,再次调用查看配置的接口,就会发现配置已经刷新
五、Nacos 作为服务配置中心——分类配置
1、目前问题
多环境多项目管理
问题1:
实际开发中,通常一个系统会准备
- dev开发环境
- test测试环境
- prod生产环境。
如何保证指定环境启动时服务能正确读取到Nacos上相应环境的配置文件呢?
问题2:
一个大型分布式微服务系统会有很多微服务子项目,每个微服务项目又都会有相应的开发环境、测试环境、预发环境、正式环境…… 那怎么对这些微服务配置进行管理呢?
2、Nacos 图形化管理界面
配置管理:
命名空间:
3、Namespace+Group+DataID 三者关系?为什么这么设计?
(1)是什么
类似Java里面的package名和类名
最外层的namespace是可以用于区分部署环境的,Group和DataID逻辑上区分两个目标对象。
(2)三者情况
默认情况: Namespace=public,Group=DEFAULT_GROUP, 默认Cluster是DEFAULT
Nacos默认的命名空间是public,Namespace主要用来实现隔离。比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace,不同的Namespace之间是隔离的。
Group默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去。
Service就是微服务;一个Service可以包含多个Cluster(集群),Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分。
比方说为了容灾,将Service微服务分别部署在了杭州机房和广州机房,这时就可以给杭州机房的Service微服务起一个集群名称(HZ),给广州机房的Service微服务起一个集群名称(GZ),还可以尽量让同一个机房的微服务互相调用,以提升性能。
最后是Instance,就是微服务的实例。
4、三种方案加载配置
(1)DataID 方案
指定spring.profile.active和配置文件的DataID来使不同环境下读取不同的配置
默认空间+默认分组+新建dev和test两个DataID
- 新建dev配置DataID
- 新建test配置DataID
通过spring.profile.active属性就能进行多环境下配置文件的读取
测试:配置是什么就加载什么 http://localhost:3377/config/info
(2)Group 方案
通过Group实现环境区分
新建Group
在nacos图形界面控制台上面新建配置文件DataID
bootstrap+application
在config下增加一条group的配置即可。可配置为DEV_GROUP或TEST_GROUP
(3)Namespace 方案
新建dev/test的Namespace 注意下面的命名空间ID:
回到服务管理-服务列表查看
按照域名配置填写
YML bootstrap:
<br><span class="hljs-attr">server:</span><br>  <span class="hljs-attr">port:</span> <span class="hljs-number">3377</span><br><br><span class="hljs-attr">spring:</span><br>  <span class="hljs-attr">application:</span><br>    <span class="hljs-attr">name:</span> <span class="hljs-string">nacos-order</span><br>  <span class="hljs-attr">cloud:</span><br>    <span class="hljs-attr">nacos:</span><br>      <span class="hljs-attr">discovery:</span><br>        <span class="hljs-attr">server-addr:</span> <span class="hljs-string">localhost:8848</span> <br>      <span class="hljs-attr">config:</span><br>        <span class="hljs-attr">server-addr:</span> <span class="hljs-string">localhost:8848</span> <br>        <span class="hljs-attr">file-extension:</span> <span class="hljs-string">yaml</span> <br>        <span class="hljs-attr">namespace:</span> <span class="hljs-string">5da1dccc-ee26-49e0-b8e5-7d9559b95ab0</span><br>        <br>        <span class="hljs-attr">group:</span> <span class="hljs-string">TEST_GROUP</span>
application:
# Nacos注册配置,application.yml<br>spring:<br>  profiles:<br>    #active: test<br>    active: dev<br>    #active: info
五、Nacos集群和持久化配置(重要)
1、官网说明
https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html
官网架构图
VIP:虚拟IP,类似于Nginx,再加一层负载上图官网翻译,真实情况
说明:
按照上述,我们需要mysql数据库
官网说明:https://nacos.io/zh-cn/docs/deployment.html
重点说明:
2、Nacos持久化配置解释
Nacos默认自带的是嵌入式数据库derby https://github.com/alibaba/nacos/blob/develop/config/pom.xml
derby到mysql切换配置步骤
- nacos-server-1.1.4\nacos\conf目录下找到sql脚本
- 找到 nacos-mysql.sql
- 执行脚本
 <br><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">DATABASE</span> nacos_config;<br><span class="hljs-keyword">USE</span> nacos_config;<br> <br><br><br><br><br><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> <span class="hljs-string">config_info
</span> (<br>  <span class="hljs-string">id
</span> <span class="hljs-built_in">BIGINT</span>(<span class="hljs-number">20</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> AUTO_INCREMENT <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'id'</span>,<br>  <span class="hljs-string">data_id
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">255</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'data_id'</span>,<br>  <span class="hljs-string">group_id
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">255</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>,<br>  <span class="hljs-string">content
</span> LONGTEXT <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'content'</span>,<br>  <span class="hljs-string">md5
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">32</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'md5'</span>,<br>  <span class="hljs-string">gmt_create
</span> DATETIME <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">'2010-05-05 00:00:00'</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'创建时间'</span>,<br>  <span class="hljs-string">gmt_modified
</span> DATETIME <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">'2010-05-05 00:00:00'</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'修改时间'</span>,<br>  <span class="hljs-string">src_user
</span> <span class="hljs-built_in">TEXT</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'source user'</span>,<br>  <span class="hljs-string">src_ip
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">20</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'source ip'</span>,<br>  <span class="hljs-string">app_name
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">128</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>,<br>  <span class="hljs-string">tenant_id
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">128</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">''</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'租户字段'</span>,<br>  <span class="hljs-string">c_desc
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">256</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>,<br>  <span class="hljs-string">c_use
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">64</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>,<br>  <span class="hljs-string">effect
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">64</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>,<br>  <span class="hljs-string">type
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">64</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>,<br>  <span class="hljs-string">c_schema
</span> <span class="hljs-built_in">TEXT</span>,<br>  PRIMARY <span class="hljs-keyword">KEY</span> (<span class="hljs-string">id
</span>),<br>  <span class="hljs-keyword">UNIQUE</span> <span class="hljs-keyword">KEY</span> <span class="hljs-string">uk_configinfo_datagrouptenant
</span> (<span class="hljs-string">data_id
</span>,<span class="hljs-string">group_id
</span>,<span class="hljs-string">tenant_id
</span>)<br>) <span class="hljs-keyword">ENGINE</span>=<span class="hljs-keyword">INNODB</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">CHARSET</span>=utf8 <span class="hljs-keyword">COLLATE</span>=utf8_bin <span class="hljs-keyword">COMMENT</span>=<span class="hljs-string">'config_info'</span>;<br> <br><br><br><br><br><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> <span class="hljs-string">config_info_aggr
</span> (<br>  <span class="hljs-string">id
</span> <span class="hljs-built_in">BIGINT</span>(<span class="hljs-number">20</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> AUTO_INCREMENT <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'id'</span>,<br>  <span class="hljs-string">data_id
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">255</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'data_id'</span>,<br>  <span class="hljs-string">group_id
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">255</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'group_id'</span>,<br>  <span class="hljs-string">datum_id
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">255</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'datum_id'</span>,<br>  <span class="hljs-string">content
</span> LONGTEXT <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'内容'</span>,<br>  <span class="hljs-string">gmt_modified
</span> DATETIME <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'修改时间'</span>,<br>  <span class="hljs-string">app_name
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">128</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>,<br>  <span class="hljs-string">tenant_id
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">128</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">''</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'租户字段'</span>,<br>  PRIMARY <span class="hljs-keyword">KEY</span> (<span class="hljs-string">id
</span>),<br>  <span class="hljs-keyword">UNIQUE</span> <span class="hljs-keyword">KEY</span> <span class="hljs-string">uk_configinfoaggr_datagrouptenantdatum
</span> (<span class="hljs-string">data_id
</span>,<span class="hljs-string">group_id
</span>,<span class="hljs-string">tenant_id
</span>,<span class="hljs-string">datum_id
</span>)<br>) <span class="hljs-keyword">ENGINE</span>=<span class="hljs-keyword">INNODB</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">CHARSET</span>=utf8 <span class="hljs-keyword">COLLATE</span>=utf8_bin <span class="hljs-keyword">COMMENT</span>=<span class="hljs-string">'增加租户字段'</span>;<br> <br> <br><br><br><br><br><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> <span class="hljs-string">config_info_beta
</span> (<br>  <span class="hljs-string">id
</span> <span class="hljs-built_in">BIGINT</span>(<span class="hljs-number">20</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> AUTO_INCREMENT <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'id'</span>,<br>  <span class="hljs-string">data_id
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">255</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'data_id'</span>,<br>  <span class="hljs-string">group_id
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">128</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'group_id'</span>,<br>  <span class="hljs-string">app_name
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">128</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'app_name'</span>,<br>  <span class="hljs-string">content
</span> LONGTEXT <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'content'</span>,<br>  <span class="hljs-string">beta_ips
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">1024</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'betaIps'</span>,<br>  <span class="hljs-string">md5
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">32</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'md5'</span>,<br>  <span class="hljs-string">gmt_create
</span> DATETIME <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">'2010-05-05 00:00:00'</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'创建时间'</span>,<br>  <span class="hljs-string">gmt_modified
</span> DATETIME <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">'2010-05-05 00:00:00'</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'修改时间'</span>,<br>  <span class="hljs-string">src_user
</span> <span class="hljs-built_in">TEXT</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'source user'</span>,<br>  <span class="hljs-string">src_ip
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">20</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'source ip'</span>,<br>  <span class="hljs-string">tenant_id
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">128</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">''</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'租户字段'</span>,<br>  PRIMARY <span class="hljs-keyword">KEY</span> (<span class="hljs-string">id
</span>),<br>  <span class="hljs-keyword">UNIQUE</span> <span class="hljs-keyword">KEY</span> <span class="hljs-string">uk_configinfobeta_datagrouptenant
</span> (<span class="hljs-string">data_id
</span>,<span class="hljs-string">group_id
</span>,<span class="hljs-string">tenant_id
</span>)<br>) <span class="hljs-keyword">ENGINE</span>=<span class="hljs-keyword">INNODB</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">CHARSET</span>=utf8 <span class="hljs-keyword">COLLATE</span>=utf8_bin <span class="hljs-keyword">COMMENT</span>=<span class="hljs-string">'config_info_beta'</span>;<br> <br><br><br><br><br><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> <span class="hljs-string">config_info_tag
</span> (<br>  <span class="hljs-string">id
</span> <span class="hljs-built_in">BIGINT</span>(<span class="hljs-number">20</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> AUTO_INCREMENT <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'id'</span>,<br>  <span class="hljs-string">data_id
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">255</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'data_id'</span>,<br>  <span class="hljs-string">group_id
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">128</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'group_id'</span>,<br>  <span class="hljs-string">tenant_id
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">128</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">''</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'tenant_id'</span>,<br>  <span class="hljs-string">tag_id
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">128</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'tag_id'</span>,<br>  <span class="hljs-string">app_name
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">128</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'app_name'</span>,<br>  <span class="hljs-string">content
</span> LONGTEXT <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'content'</span>,<br>  <span class="hljs-string">md5
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">32</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'md5'</span>,<br>  <span class="hljs-string">gmt_create
</span> DATETIME <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">'2010-05-05 00:00:00'</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'创建时间'</span>,<br>  <span class="hljs-string">gmt_modified
</span> DATETIME <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">'2010-05-05 00:00:00'</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'修改时间'</span>,<br>  <span class="hljs-string">src_user
</span> <span class="hljs-built_in">TEXT</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'source user'</span>,<br>  <span class="hljs-string">src_ip
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">20</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'source ip'</span>,<br>  PRIMARY <span class="hljs-keyword">KEY</span> (<span class="hljs-string">id
</span>),<br>  <span class="hljs-keyword">UNIQUE</span> <span class="hljs-keyword">KEY</span> <span class="hljs-string">uk_configinfotag_datagrouptenanttag
</span> (<span class="hljs-string">data_id
</span>,<span class="hljs-string">group_id
</span>,<span class="hljs-string">tenant_id
</span>,<span class="hljs-string">tag_id
</span>)<br>) <span class="hljs-keyword">ENGINE</span>=<span class="hljs-keyword">INNODB</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">CHARSET</span>=utf8 <span class="hljs-keyword">COLLATE</span>=utf8_bin <span class="hljs-keyword">COMMENT</span>=<span class="hljs-string">'config_info_tag'</span>;<br> <br><br><br><br><br><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> <span class="hljs-string">config_tags_relation
</span> (<br>  <span class="hljs-string">id
</span> <span class="hljs-built_in">BIGINT</span>(<span class="hljs-number">20</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'id'</span>,<br>  <span class="hljs-string">tag_name
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">128</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'tag_name'</span>,<br>  <span class="hljs-string">tag_type
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">64</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'tag_type'</span>,<br>  <span class="hljs-string">data_id
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">255</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'data_id'</span>,<br>  <span class="hljs-string">group_id
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">128</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'group_id'</span>,<br>  <span class="hljs-string">tenant_id
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">128</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">''</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'tenant_id'</span>,<br>  <span class="hljs-string">nid
</span> <span class="hljs-built_in">BIGINT</span>(<span class="hljs-number">20</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> AUTO_INCREMENT,<br>  PRIMARY <span class="hljs-keyword">KEY</span> (<span class="hljs-string">nid
</span>),<br>  <span class="hljs-keyword">UNIQUE</span> <span class="hljs-keyword">KEY</span> <span class="hljs-string">uk_configtagrelation_configidtag
</span> (<span class="hljs-string">id
</span>,<span class="hljs-string">tag_name
</span>,<span class="hljs-string">tag_type
</span>),<br>  <span class="hljs-keyword">KEY</span> <span class="hljs-string">idx_tenant_id
</span> (<span class="hljs-string">tenant_id
</span>)<br>) <span class="hljs-keyword">ENGINE</span>=<span class="hljs-keyword">INNODB</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">CHARSET</span>=utf8 <span class="hljs-keyword">COLLATE</span>=utf8_bin <span class="hljs-keyword">COMMENT</span>=<span class="hljs-string">'config_tag_relation'</span>;<br> <br><br><br><br><br><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> <span class="hljs-string">group_capacity
</span> (<br>  <span class="hljs-string">id
</span> <span class="hljs-built_in">BIGINT</span>(<span class="hljs-number">20</span>) <span class="hljs-keyword">UNSIGNED</span> <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> AUTO_INCREMENT <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'主键ID'</span>,<br>  <span class="hljs-string">group_id
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">128</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">''</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'Group ID,空字符表示整个集群'</span>,<br>  <span class="hljs-string">quota
</span> <span class="hljs-built_in">INT</span>(<span class="hljs-number">10</span>) <span class="hljs-keyword">UNSIGNED</span> <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">'0'</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'配额,0表示使用默认值'</span>,<br>  <span class="hljs-string">usage
</span> <span class="hljs-built_in">INT</span>(<span class="hljs-number">10</span>) <span class="hljs-keyword">UNSIGNED</span> <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">'0'</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'使用量'</span>,<br>  <span class="hljs-string">max_size
</span> <span class="hljs-built_in">INT</span>(<span class="hljs-number">10</span>) <span class="hljs-keyword">UNSIGNED</span> <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">'0'</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'单个配置大小上限,单位为字节,0表示使用默认值'</span>,<br>  <span class="hljs-string">max_aggr_count
</span> <span class="hljs-built_in">INT</span>(<span class="hljs-number">10</span>) <span class="hljs-keyword">UNSIGNED</span> <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">'0'</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'聚合子配置最大个数,,0表示使用默认值'</span>,<br>  <span class="hljs-string">max_aggr_size
</span> <span class="hljs-built_in">INT</span>(<span class="hljs-number">10</span>) <span class="hljs-keyword">UNSIGNED</span> <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">'0'</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值'</span>,<br>  <span class="hljs-string">max_history_count
</span> <span class="hljs-built_in">INT</span>(<span class="hljs-number">10</span>) <span class="hljs-keyword">UNSIGNED</span> <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">'0'</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'最大变更历史数量'</span>,<br>  <span class="hljs-string">gmt_create
</span> DATETIME <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">'2010-05-05 00:00:00'</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'创建时间'</span>,<br>  <span class="hljs-string">gmt_modified
</span> DATETIME <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">'2010-05-05 00:00:00'</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'修改时间'</span>,<br>  PRIMARY <span class="hljs-keyword">KEY</span> (<span class="hljs-string">id
</span>),<br>  <span class="hljs-keyword">UNIQUE</span> <span class="hljs-keyword">KEY</span> <span class="hljs-string">uk_group_id
</span> (<span class="hljs-string">group_id
</span>)<br>) <span class="hljs-keyword">ENGINE</span>=<span class="hljs-keyword">INNODB</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">CHARSET</span>=utf8 <span class="hljs-keyword">COLLATE</span>=utf8_bin <span class="hljs-keyword">COMMENT</span>=<span class="hljs-string">'集群、各Group容量信息表'</span>;<br> <br><br><br><br><br><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> <span class="hljs-string">his_config_info
</span> (<br>  <span class="hljs-string">id
</span> <span class="hljs-built_in">BIGINT</span>(<span class="hljs-number">64</span>) <span class="hljs-keyword">UNSIGNED</span> <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>,<br>  <span class="hljs-string">nid
</span> <span class="hljs-built_in">BIGINT</span>(<span class="hljs-number">20</span>) <span class="hljs-keyword">UNSIGNED</span> <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> AUTO_INCREMENT,<br>  <span class="hljs-string">data_id
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">255</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>,<br>  <span class="hljs-string">group_id
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">128</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>,<br>  <span class="hljs-string">app_name
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">128</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'app_name'</span>,<br>  <span class="hljs-string">content
</span> LONGTEXT <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>,<br>  <span class="hljs-string">md5
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">32</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>,<br>  <span class="hljs-string">gmt_create
</span> DATETIME <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">'2010-05-05 00:00:00'</span>,<br>  <span class="hljs-string">gmt_modified
</span> DATETIME <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">'2010-05-05 00:00:00'</span>,<br>  <span class="hljs-string">src_user
</span> <span class="hljs-built_in">TEXT</span>,<br>  <span class="hljs-string">src_ip
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">20</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>,<br>  <span class="hljs-string">op_type
</span> <span class="hljs-built_in">CHAR</span>(<span class="hljs-number">10</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>,<br>  <span class="hljs-string">tenant_id
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">128</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">''</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'租户字段'</span>,<br>  PRIMARY <span class="hljs-keyword">KEY</span> (<span class="hljs-string">nid
</span>),<br>  <span class="hljs-keyword">KEY</span> <span class="hljs-string">idx_gmt_create
</span> (<span class="hljs-string">gmt_create
</span>),<br>  <span class="hljs-keyword">KEY</span> <span class="hljs-string">idx_gmt_modified
</span> (<span class="hljs-string">gmt_modified
</span>),<br>  <span class="hljs-keyword">KEY</span> <span class="hljs-string">idx_did
</span> (<span class="hljs-string">data_id
</span>)<br>) <span class="hljs-keyword">ENGINE</span>=<span class="hljs-keyword">INNODB</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">CHARSET</span>=utf8 <span class="hljs-keyword">COLLATE</span>=utf8_bin <span class="hljs-keyword">COMMENT</span>=<span class="hljs-string">'多租户改造'</span>;<br> <br> <br><br><br><br><br><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> <span class="hljs-string">tenant_capacity
</span> (<br>  <span class="hljs-string">id
</span> <span class="hljs-built_in">BIGINT</span>(<span class="hljs-number">20</span>) <span class="hljs-keyword">UNSIGNED</span> <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> AUTO_INCREMENT <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'主键ID'</span>,<br>  <span class="hljs-string">tenant_id
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">128</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">''</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'Tenant ID'</span>,<br>  <span class="hljs-string">quota
</span> <span class="hljs-built_in">INT</span>(<span class="hljs-number">10</span>) <span class="hljs-keyword">UNSIGNED</span> <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">'0'</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'配额,0表示使用默认值'</span>,<br>  <span class="hljs-string">usage
</span> <span class="hljs-built_in">INT</span>(<span class="hljs-number">10</span>) <span class="hljs-keyword">UNSIGNED</span> <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">'0'</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'使用量'</span>,<br>  <span class="hljs-string">max_size
</span> <span class="hljs-built_in">INT</span>(<span class="hljs-number">10</span>) <span class="hljs-keyword">UNSIGNED</span> <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">'0'</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'单个配置大小上限,单位为字节,0表示使用默认值'</span>,<br>  <span class="hljs-string">max_aggr_count
</span> <span class="hljs-built_in">INT</span>(<span class="hljs-number">10</span>) <span class="hljs-keyword">UNSIGNED</span> <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">'0'</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'聚合子配置最大个数'</span>,<br>  <span class="hljs-string">max_aggr_size
</span> <span class="hljs-built_in">INT</span>(<span class="hljs-number">10</span>) <span class="hljs-keyword">UNSIGNED</span> <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">'0'</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值'</span>,<br>  <span class="hljs-string">max_history_count
</span> <span class="hljs-built_in">INT</span>(<span class="hljs-number">10</span>) <span class="hljs-keyword">UNSIGNED</span> <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">'0'</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'最大变更历史数量'</span>,<br>  <span class="hljs-string">gmt_create
</span> DATETIME <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">'2010-05-05 00:00:00'</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'创建时间'</span>,<br>  <span class="hljs-string">gmt_modified
</span> DATETIME <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">'2010-05-05 00:00:00'</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'修改时间'</span>,<br>  PRIMARY <span class="hljs-keyword">KEY</span> (<span class="hljs-string">id
</span>),<br>  <span class="hljs-keyword">UNIQUE</span> <span class="hljs-keyword">KEY</span> <span class="hljs-string">uk_tenant_id
</span> (<span class="hljs-string">tenant_id
</span>)<br>) <span class="hljs-keyword">ENGINE</span>=<span class="hljs-keyword">INNODB</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">CHARSET</span>=utf8 <span class="hljs-keyword">COLLATE</span>=utf8_bin <span class="hljs-keyword">COMMENT</span>=<span class="hljs-string">'租户容量信息表'</span>;<br> <br> <br><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> <span class="hljs-string">tenant_info
</span> (<br>  <span class="hljs-string">id
</span> <span class="hljs-built_in">BIGINT</span>(<span class="hljs-number">20</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> AUTO_INCREMENT <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'id'</span>,<br>  <span class="hljs-string">kp
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">128</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'kp'</span>,<br>  <span class="hljs-string">tenant_id
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">128</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">''</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'tenant_id'</span>,<br>  <span class="hljs-string">tenant_name
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">128</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">''</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'tenant_name'</span>,<br>  <span class="hljs-string">tenant_desc
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">256</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'tenant_desc'</span>,<br>  <span class="hljs-string">create_source
</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">32</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'create_source'</span>,<br>  <span class="hljs-string">gmt_create
</span> <span class="hljs-built_in">BIGINT</span>(<span class="hljs-number">20</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'创建时间'</span>,<br>  <span class="hljs-string">gmt_modified
</span> <span class="hljs-built_in">BIGINT</span>(<span class="hljs-number">20</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'修改时间'</span>,<br>  PRIMARY <span class="hljs-keyword">KEY</span> (<span class="hljs-string">id
</span>),<br>  <span class="hljs-keyword">UNIQUE</span> <span class="hljs-keyword">KEY</span> <span class="hljs-string">uk_tenant_info_kptenantid
</span> (<span class="hljs-string">kp
</span>,<span class="hljs-string">tenant_id
</span>),<br>  <span class="hljs-keyword">KEY</span> <span class="hljs-string">idx_tenant_id
</span> (<span class="hljs-string">tenant_id
</span>)<br>) <span class="hljs-keyword">ENGINE</span>=<span class="hljs-keyword">INNODB</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">CHARSET</span>=utf8 <span class="hljs-keyword">COLLATE</span>=utf8_bin <span class="hljs-keyword">COMMENT</span>=<span class="hljs-string">'tenant_info'</span>;<br> <br><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> <span class="hljs-keyword">users</span> (<br>    username <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">50</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> PRIMARY <span class="hljs-keyword">KEY</span>,<br>    <span class="hljs-keyword">PASSWORD</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">500</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>,<br>    enabled <span class="hljs-built_in">BOOLEAN</span> <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span><br>);<br> <br><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> <span class="hljs-keyword">roles</span> (<br>    username <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">50</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>,<br>    <span class="hljs-keyword">role</span> <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">50</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span><br>);<br> <br><span class="hljs-keyword">INSERT</span> <span class="hljs-keyword">INTO</span> <span class="hljs-keyword">users</span> (username, <span class="hljs-keyword">PASSWORD</span>, enabled) <span class="hljs-keyword">VALUES</span> (<span class="hljs-string">'nacos'</span>, <span class="hljs-string">'$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu'</span>, <span class="hljs-literal">TRUE</span>);<br> <br><span class="hljs-keyword">INSERT</span> <span class="hljs-keyword">INTO</span> <span class="hljs-keyword">roles</span> (username, <span class="hljs-keyword">role</span>) <span class="hljs-keyword">VALUES</span> (<span class="hljs-string">'nacos'</span>, <span class="hljs-string">'ROLE_ADMIN'</span>);
nacos-server-1.1.4\nacos\conf目录下找到application.properties,修改内容
spring.datasource.platform=mysql<br> <br>db.num=<span class="hljs-number">1</span><br>db.url<span class="hljs-number">.0</span>=jdbc:mysql:<br>db.user=root<br>db.password=<span class="hljs-number">123456</span>
启动Nacos,可以看到是个全新的空记录界面,以前是记录进derby
3、Linux版安装Nacos
预计需要,1个Nginx+3个nacos注册中心+1个mysql
(1)Linux版安装
Nacos 下载Linux版
https://github.com/alibaba/nacos/releases/tag/1.1.4
nacos-server-1.1.4.tar.gz
解压后安装
4、集群配置(重点)
配置
(1)Linux服务器上mysql数据库配置
找到 SQL脚本
sql语句源文件:nacos-mysql.sql
自己Linux机器上的Mysql数据库粘贴,执行后结果
(2)application.properties 配置
位置:
内容: application.properties 文件打开后的最后面,配置如下内容:
(3)Linux服务器上nacos的集群配置cluster.conf
梳理出3台nacos集器的不同服务端口号
复制出cluster.conf
内容:
这个IP不能写127.0.0.1,必须是Linux命令hostname -i能够识别的IP
(4)编辑Nacos的启动脚本startup.sh,使它能够接受不同的启动端口
- /mynacos/nacos/bin 目录下有startup.sh
- 在什么地方,修改什么,怎么修改
- 思考
在/mynacos/nacos/bin 目录下有startup.sh
平时单机版的启动,都是./startup.sh即可。
但是集群启动,我们希望可以类似其它软件的shell命令,传递不同的端口号启动不同的nacos实例。 命令:./startup.sh -p 3333 表示启动端口号为3333的nacos服务器实例,和上一步的cluster.conf配置的一致。
- 修改内容
- 执行方式
(5)Nginx的配置,由它作为负载均衡器
- 修改nginx的配置文件
- nginx.conf
- 按照指定启动
(6)截止到此处,1个Nginx+3个nacos注册中心+1个mysql
- 测试通过nginx访问nacos http://192.168.111.144:1111/nacos/#/login
- 新建一个配置测试
- linux服务器的mysql插入一条记录
测试
微服务cloudalibaba-provider-payment9002启动注册进nacos集群
高可用小总结
Original: https://www.cnblogs.com/niujifei/p/16340212.html
Author: 格物致知_Tony
Title: II-第十三章:(1)SpringCloud Nacos注册中心和配置中心
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/540050/
转载文章受原作者版权保护。转载请注明原作者出处!