惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
K
Kaspersky official blog
L
Lohrmann on Cybersecurity
T
Tenable Blog
Latest news
Latest news
C
CXSECURITY Database RSS Feed - CXSecurity.com
Security Latest
Security Latest
V
Vulnerabilities – Threatpost
The Hacker News
The Hacker News
P
Palo Alto Networks Blog
I
Intezer
T
Threatpost
C
Cisco Blogs
A
Arctic Wolf
C
Cyber Attacks, Cyber Crime and Cyber Security
WordPress大学
WordPress大学
月光博客
月光博客
博客园 - 聂微东
Last Week in AI
Last Week in AI
V
V2EX
小众软件
小众软件
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Simon Willison's Weblog
Simon Willison's Weblog
T
The Exploit Database - CXSecurity.com
宝玉的分享
宝玉的分享
酷 壳 – CoolShell
酷 壳 – CoolShell
Spread Privacy
Spread Privacy
博客园 - 三生石上(FineUI控件)
博客园 - 叶小钗
T
Threat Research - Cisco Blogs
博客园 - Franky
S
Schneier on Security
Know Your Adversary
Know Your Adversary
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
aimingoo的专栏
aimingoo的专栏
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
美团技术团队
T
Tor Project blog
C
Cybersecurity and Infrastructure Security Agency CISA
腾讯CDC
Project Zero
Project Zero
V
Visual Studio Blog
人人都是产品经理
人人都是产品经理
量子位
The GitHub Blog
The GitHub Blog
I
InfoQ
P
Proofpoint News Feed
Cyberwarzone
Cyberwarzone
P
Privacy & Cybersecurity Law Blog
B
Blog RSS Feed

披萨盒的赛博日志

谈谈工作了半年的感受 使用策略模式重构复杂业务分支 像 systemd 一样管理 MacOS 后台常驻任务 以ORM看封装的边界 Git Merge VS Git Rebase: 如何优雅地合并分支? 修改Linux内核模块以支持WG OpenLDAP折腾日记 非特权模式容器 ssh 登录问题 在 Linux 开发环境中使用网络代理 白嫖 Aseprite 像素绘图软件 MongoDB 增删改查 Python数据分析工具包-Numpy 解决 CLion 中文乱码问题 搭建 RLCraft 服务器 SpringBoot读取配置文件 Centos 配置 LNMP 环境 部署项目时遇到的坑 浅谈 xhr 请求跨域问题 JavaScript 学习笔记 Eclipse配置Web开发环境 Vue2 基本知识 Ribbon 简单使用 Spring Cloud Alibaba 环境搭建 什么是RSS?什么是Feed?它们有什么关系? Docker基本使用 TensorFlow启用GPU加速 如何进行内网穿透 Hello World! Git基本使用 Butterfly常用标签外挂
Nacos 简单使用
披萨盒 · 2022-08-20 · via 披萨盒的赛博日志

Nacos(Naming and Configuration Service)是阿里巴巴的一个开源项目,也是 Spring Cloud Alibaba 的一个重要组件。专注于服务发现和配置管理领域。

Nacos 官方文档

注意:如果中途发现操作过程一样但还是报错,很有可能是版本号不一致(新版本不一定兼容老版本)。


部署 Nacos 服务器

Nacos 作为 Spring Cloud Alibaba 的一个组件,版本号自然也一定要选择正确,参考 官方版本说明

Spring Cloud Alibaba Version Sentinel Version Nacos Version RocketMQ Version Dubbo Version Seata Version
2021.0.1.0* 1.8.3 1.4.2 4.9.2 2.7.15 1.4.2
2.2.7.RELEASE 1.8.1 2.0.3 4.6.1 2.7.13 1.3.0
2.2.6.RELEASE 1.8.1 1.4.2 4.4.0 2.7.8 1.3.0
2021.1 or 2.2.5.RELEASE or 2.1.4.RELEASE or 2.0.4.RELEASE 1.8.0 1.4.1 4.4.0 2.7.8 1.3.0
2.2.3.RELEASE or 2.1.3.RELEASE or 2.0.3.RELEASE 1.8.0 1.3.3 4.4.0 2.7.8 1.3.0
2.2.1.RELEASE or 2.1.2.RELEASE or 2.0.2.RELEASE 1.7.1 1.2.1 4.4.0 2.7.6 1.2.0
2.2.0.RELEASE 1.7.1 1.1.4 4.4.0 2.7.4.1 1.0.0
2.1.1.RELEASE or 2.0.1.RELEASE or 1.5.1.RELEASE 1.7.0 1.1.4 4.4.0 2.7.3 0.9.0
2.1.0.RELEASE or 2.0.0.RELEASE or 1.5.0.RELEASE 1.6.3 1.1.1 4.4.0 2.7.3 0.7.1

Nacos 软件直接上 GitHub 下载即可,项目地址为 Releases · alibaba/nacos (github.com)

下载完毕后解压,进入 bin 目录,然后运行单机模式

1
2
3
4
sh startup.sh -m standalone  //Linux
bash startup.sh -m standalone //Ubuntu

startup.cmd -m standalone //Windows

启动成功后,浏览器输入 http://localhost:8848/nacos 即可打开 Nacos 管理面板,账号和密码默认都是 nacos

搭建 Nacos 客户端

由于 Spring Cloud Alibaba 版本控制器中默认集成了 Nacos,所以在导入时不需要提供版本号

1
2
3
4
5

<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

修改 application.yml 配置文件

1
2
3
4
5
6
7
8
9
10
11
12
server:
port: 9002
spring:
application:
name: stock-service
cloud:
nacos:
server-addr: 127.0.0.1:8848
discovery:
username: nacos
password: nacos
namespace: public

当有了此配置后,当服务启动时就会自动注册进入 Nacos 注册中心

image-20220517213516550

增加配置类

当有消费者要调用注册中心的服务时,必须配置一个负载均衡策略,Spring Cloud Alibaba 默认的负载均衡器是 Ribbon,只需要在 RestTemplate 的 Bean 上加上 @LoadBalanced 注解即可开启它的负载均衡器

1
2
3
4
5
6
7
8
@Configuration
public class RestConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) {
return restTemplateBuilder.build();
}
}

此时就可以通过服务名调用 Nacos 注册中心中已经注册的服务了


在 controller 中调用注册中心的模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@RestController
@RequestMapping("/order")
public class OrderController {

@Autowired
RestTemplate restTemplate;

@GetMapping("add")
public String add() {
System.out.println("下单成功");

String msg = restTemplate.getForObject("http://stock-service/stock/reduct", String.class);

return "下单成功<hr/>" + msg;
}
}

至此,Nacos-Client 环境搭建成功

Nacos 配置参数

Nacos 参数的配置主要在 application.yml 中进行,文档可参考 Nacos-discovery/wiki,主要配置项如下:

配置项 Key 默认值 说明
服务端地址 spring.cloud.nacos.discovery.server-addr Nacos Server 启动监听的ip地址和端口
服务名 spring.cloud.nacos.discovery.service ${spring.application.name} 给当前的服务命名
服务分组 spring.cloud.nacos.discovery.group DEFAULT_GROUP 设置服务所处的分组
权重 spring.cloud.nacos.discovery.weight 1 取值范围 1 到 100,数值越大,权重越大
网卡名 spring.cloud.nacos.discovery.network-interface 当IP未配置时,注册的IP为此网卡所对应的IP地址,如果此项也未配置,则默认取第一块网卡的地址
注册的IP地址 spring.cloud.nacos.discovery.ip 优先级最高
注册的端口 spring.cloud.nacos.discovery.port -1 默认情况下不用配置,会自动探测
命名空间 spring.cloud.nacos.discovery.namespace 常用场景之一是不同环境的注册的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
AccessKey spring.cloud.nacos.discovery.access-key 当要上阿里云时,阿里云上面的一个云账号名
SecretKey spring.cloud.nacos.discovery.secret-key 当要上阿里云时,阿里云上面的一个云账号密码
Metadata spring.cloud.nacos.discovery.metadata 使用Map格式配置,用户可以根据自己的需要自定义一些和服务相关的元数据信息
日志文件名 spring.cloud.nacos.discovery.log-name
集群 spring.cloud.nacos.discovery.cluster-name DEFAULT 配置成Nacos集群名称
接入点 spring.cloud.nacos.discovery.enpoint UTF-8 地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址
是否集成Ribbon ribbon.nacos.enabled true 一般都设置成true即可
是否开启Nacos Watch spring.cloud.nacos.discovery.watch.enabled true 可以设置成false来关闭 watch

Nacos 集群部署

之前使用的 ./startup.sh -m standalone 命令就是以单机模式启动 nacos 服务器。但是当我们用到微服务架构时,往往是项目规模达到了一定的程度。所以在真正使用的时候,大部分情况下都是以集群方式进行部署的,参考文档


下载若干个 nacos 服务器

这里以三个为例,给他们重命名,建议在名字后面加上端口号方便区分:

注意:单机集群启动的时候不能使用连续的端口了,会报错

image-20220819112031363


修改 application.properties 配置文件

在这一步需要配置数据源为 MySQL,因为 Nacos 内部使用的数据源 Hikari。我们要想搭建集群,就必须使用同一数据源(类似于 Scrapy 的分布式爬虫)

如下配置:

1
2
3
4
5
6
7
8
9
10
11


spring.datasource.platform=mysql


db.num=1


db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=Pu2003..

修改三个 nacos 的端口:

1
2

server.port=[8840/8850/8860]

修改 cluster.conf.example

先将其复制一份为 cluster.conf,然后再进行修改

主要就是添加 nacos 集群节点

例如:

1
2
3
4
5
#it is ip
#example
192.168.0.108:8849
192.168.0.108:8850
192.168.0.108:8851

创建 MySQL 数据库

按照其要求创建 MySQL 数据库,并执行他所提供的 sql 文件(nacos-mysql.sql)

执行完之后表结构大致如下:

image-20220520212757077


修改项目 application.yml 文件

官方推荐集群部署后使用VIP或者域名访问,不过也可以使用直连模式:

1
2
3
4
spring:
cloud:
nacos:
server-addr: 127.0.0.1:8840, 127.0.0.1:8850, 127.0.0.1:8860

至此,就实现了 Nacos 的集群部署。接下来,我们也可以使用负载均衡软件如 Nginx 来进行集群的负载均衡。


使用 nginx 进行反向代理

修改 /etc/nginx/nginx.conf 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Nacos
upstream nacoscluster {
server 127.0.0.1:8840;
server 127.0.0.1:8850;
server 127.0.0.1:8860;
}

server {
listen 8847;
server_name localhost;

location /nacos/{
proxy_pass http://nacoscluster/nacos/;
}
}

启动所有 nacos 服务器,并启动 nginx,理论上打开浏览器 http://localhost:8847/nacos

登录后即可看到如下效果:

image-20220819121740445

nginx 默认的负载均衡机制是轮询方式,所以理论上请求时就会在三台服务器之间来回跳

至此,Nacos 集群环境就搭建好了,修改项目的 Nacos 地址配置文件:

1
2
3
4
spring:
cloud:
nacos:
server-addr: 192.168.220.1:8847

启动对应服务,OK,日常报错

image-20220520222915533

查看官方文档,发现 2.x 版本和 1.x 版本还不太一样:

Nacos2.0版本相比1.X新增了gRPC的通信方式,因此需要增加2个端口。新增端口是在配置的主端口(server.port)基础上,进行一定偏移量自动生成。

端口 与主端口的偏移量 描述
9847 1000 客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求
9848 1001 服务端gRPC请求服务端端口,用于服务间同步等

使用VIP/nginx请求时,需要配置成TCP转发,不能配置http2转发,否则连接会被nginx断开。

nacos

(图片来源于网络,侵删)

注意:使用 Nginx 配置 tcp 转发时需要用到 stream 模块,而 Nginx 在安装时是默认不编译 stream 模块的,需要我们手动安装

成功安装之后查看:

image-20220819114704082

接下来配置 nginx 的 tcp 转发:

  • 修改 nginx.conf,在最后一行加上 include /usr/local/nginx/tcp.d/*.conf;,注意不要写在 http 里
  • 新建 /usr/local/nginx/tcp.d/tcp.conf
  • 编辑 tcp.conf 文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# tcp.conf

stream {

# Nacos集群配置grpc
upstream nacoscluster {
server 127.0.0.1:9840;
server 127.0.0.1:9850;
server 127.0.0.1:9860;
}

server {
listen 9847;
proxy_pass nacoscluster;
}
}
  • 修改项目的 Nacos 地址配置文件:
1
2
3
4
spring:
cloud:
nacos:
server-addr: 192.168.220.1:8847

启动服务,完成!