微服务轮子项目(12) - nacos注册中心(下)

本文涉及的产品
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 微服务轮子项目(12) - nacos注册中心(下)

5. 服务注册发现

引入jar:

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

bootstrap.yml增加以下配置:

spring:
  cloud:
    nacos:
      discovery:
        server-addr: ip:prot  #nacos的地址

工程启动类添加以下注解:

  • @EnableDiscoveryClient

6.生产部署方案

6.1 说明

生产环境中部署nacos首先肯定是使用集群模式cluster保证高可用,本文主要详细介绍最佳的集群方案怎样搭建,然后spring cloud程序怎样集成。

6.2 集群方案

下图是官方推荐的集群方案,通过域名 + VIP模式的方式来实现,可读性好,而切换ip方便:

这里的VIP直接使用 Nginx就可以实现了

6.3 方案实现

nacos集群最低配置是至少需要3个实例,因为我在本地搭建只有一台机器所以通过修改端口的方式来部署这3个实例,端口分别为:8848、8849、8850

6.3.1 修改集群配置

nacos的conf目录下有配置文件cluster.conf,请每行配置成ip:port。

  • 192.168.28.130:8848
  • 192.168.28.130:884
  • 192.168.28.130:8850

192.168.28.130是我本机ip,三个nacos实例都配置一样即可

6.3.2 配置 MySQL 数据库

集群模式必须使用MySQL数据库,生产使用建议至少主备模式,或者采用高可用数据库

1.初始化 MySQL 数据库

脚本在nacos的conf目录下有配置文件nacos-mysql.sql,直接执行即可

2.修改 application.properties 添加数据库配置

配置文件在nacos的conf目录下,添加以下配置

db.num=1
db.url.0=jdbc:mysql://192.168.28.131:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root

db.num 为数据库实例数量

如果有多个数据库实例通过 db.url.0、db.url.1… 指定不同的数据库链接

3. 其他实例修改Nacos端口

  • 修改nacos的conf目录下application.properties下的server.port变量,三个实例分别为:8848、8849、8850

如果是不同机器部署集群的话这步可以忽略

4. 启动Nacos集群:

  • 分别把3个实例都启动起来,执行nacos的bin目录下startup.sh,该启动文件默认就是集群模式

5. 修改Nginx配置:

修改conf/nginx.conf配置

upstream nacos {
    server 192.168.28.130:8848;
    server 192.168.28.130:8849;
    server 192.168.28.130:8850;
}
server {
    listen 80;
    server_name test.nacos.com;
    location / {
        proxy_pass http://nacos;
    }
}

配置域名test.nacos.com绑定VIP

6. 程序集成Nacos集群

nacos的地址server-addr配置域名test.nacos.com

6.4 Nacos集群管理

参考资料:https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html

7.通过Nginx来实现环境隔离

7.1 原理说明

基于 Nacos 去隔离多个物理集群的,同时,在 Nacos 客户端不需要做任何代码改动的情况下,就可以实现环境的自动路由。

开始前,我们先做一些约束:

  • 一台机器上部署的应用都在一个环境内;
  • 一个应用进程内默认情况下只连一个环境的 Nacos;
  • 通过某种手段可以拿到客户端所在机器 IP;
  • 用户对机器的网段有规划;

基本原理是:

  • 网络中 32 位的 IPV4 可以划分为很多网段,如192.168.1.0/24,并且一般中大型的企业都会有网段规划,按照一定的用途划分网段。我们可以利用这个原理做环境隔离,即不同网段的 IP 属于不同的环境,如192.168.1.0/24属于环境A, 192.168.2.0/24属于环境B等。
  • Nacos 有两种方式初始化客户端实例,一种是直接告诉客户端 Nacos 服务端的IP;另一种是告诉客户端一个 Endpoint,客户端通过 HTTP 请求到 Endpoint,查询 Nacos 服务端的 IP 列表。这里,我们利用第二种方式进行初始化。
  • 增强 Endpoint 的功能。在 Endpoint 端配置网段和环境的映射关系,Endpoint 在接收到客户端的请求后,根据客户端的来源 IP 所属网段,计算出该客户端的所属环境,然后找到对应环境的 IP 列表返回给客户端。如下图

7.2 一个环境隔离 Server 的示例

前面讲了基于 IP 段做环境隔离的约束和基本原理,那么如何实现一个地址服务器呢。

最简单的方法是基于Nginx实现,利用 Nginx 的 Geo 模块,做 IP 端和环境的映射,然后利用Nginx 返回静态文件内容。

geo $env {default ""; 192.168.1.0/24 -env-a;  192.168.2.0/24 -env-b;}

配置nginx根路径及转发规则,这里只需要简单的返回静态文件的内容:

# 在http模块中配置根路径
root /tmp/htdocs;
# 在server模块中配置
location / {
  rewrite ^(.*)$  /$1$env break;
}

配置Nacos服务端IP列表配置文件,在/tmp/hotdocs/nacos目录下配置以环境名结尾的文件,文件内容为IP,一行一个:

$ll /tmp/hotdocs/nacos/
total 0
-rw-r--r-- 1 user1 users 0 Mar  5 08:53 serverlist
-rw-r--r-- 1 user1 users 0 Mar  5 08:53 serverlist-env-a
-rw-r--r-- 1 user1 users 0 Mar  5 08:53 serverlist-env-b
$cat /tmp/hotdocs/nacos/serverlist
192.168.1.2
192.168.1.3

验证:

curl 'localhost:8080/nacos/serverlist'
192.168.1.2
192.168.1.3

至此, 一个简单的根据 IP 网段做环境隔离的示例已经可以工作了,不同网段的 Nacos 客户端会自动获取到不同的 Nacos 服务端 IP 列表,实现环境隔离。

这种方法的好处是用户不需要配置任何参数,各个环境的代码和配置是一样的,但需要提供底层服务的同学做好网络规划和相关配置。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1天前
|
存储 负载均衡 监控
探索微服务架构中的服务发现与注册机制
【7月更文挑战第2天】在微服务架构的海洋中,服务发现与注册机制扮演着灯塔的角色,确保服务间的通信不因波涛汹涌而迷失方向。本文将深入探讨这一机制如何为微服务之间的交互提供动态、高效的路径,以及它对于整个系统稳定性和扩展性的重要性。我们将从基本原理出发,逐步剖析服务发现的实现方式,并讨论在设计服务注册中心时需要考虑的关键因素。
|
18小时前
|
消息中间件 负载均衡 Java
最容易学会的springboot gralde spring cloud 多模块微服务项目
最容易学会的springboot gralde spring cloud 多模块微服务项目
|
4天前
|
存储 负载均衡 云计算
微服务架构中的服务发现与注册机制
在分布式系统设计中,微服务架构因其灵活性和可伸缩性而受到青睐。本文深入探讨了微服务架构下的服务发现与注册机制,通过分析Eureka、Consul和Zookeeper等工具的原理与实践,揭示了这些机制如何优化服务间的通信和故障转移。文章结合最新研究和案例,提供了对微服务架构中关键组件的深刻见解,并讨论了其在不同场景下的应用效果。
|
9天前
|
存储 负载均衡 NoSQL
微服务架构中的服务发现与注册中心
【6月更文挑战第23天】随着微服务架构的日益流行,服务发现和注册中心作为其核心组件,确保了服务的高可用性和伸缩性。本文将深入探讨服务发现机制的重要性、注册中心的工作原理以及它们在现代分布式系统中的应用,同时通过一个实际案例来展示如何在微服务环境中实现高效的服务管理。
|
17小时前
|
负载均衡 Java Maven
Java中的微服务治理与服务注册
Java中的微服务治理与服务注册
|
2天前
|
负载均衡 Java Maven
Java中的微服务治理与服务注册
Java中的微服务治理与服务注册
|
5天前
|
JavaScript Java Go
Nacos vs. Eureka:微服务注册中心的对比
Nacos vs. Eureka:微服务注册中心的对比
12 0
|
7天前
|
Java Nacos 微服务
Spring Cloud微服务在Windows本地开发时禁用Nacos注册中心注册
Spring Cloud微服务在Windows本地开发时禁用Nacos注册中心注册
|
8天前
|
SpringCloudAlibaba 负载均衡 Java
SpringCloudAlibaba之nacos的服务注册与发现
如图所示:按照图示搭建一个nacos作为服务注册中心的简单应用.
11 0
|
8天前
|
Nacos 数据安全/隐私保护
springCloud之nacos服务注册与发现、配置中心
springCloud之nacos服务注册与发现、配置中心
14 0