• Nacos的详解及集群的搭建


    一、nacos的领域模型划分

    1、 namespace

    (1)namespace可以进行资源隔离,默认为“public";例如:dev环境的 namespace下的服务是调用不到 prod 的 namespace下的服务;

    可以在 ”命名空间“ 管理,如下:

     (2) namespace 的要在配置文件中配置;(namespace的配置要配置 namespace对应的命名空间ID

    spring.cloud.nacos.discovery.namespace=cd944310-e786-4670-b7d9-7612d26884c1
    

    配置文件增加namespace之后重启一下服务,public看不到有服务,dev有注册的服务;

     2、group 

    用作微服务的分组,不同的分组之间微服务不能调通,默认为 “DEFAULT_GROUP”。例如:

    交易分组:订单服务、支付服务;

    仓储分组:库存服务、物流服务;

    物流服务和支付服务实际上在业务之间是没有交互的,我们可以把他们放在不同的分组中。

    3、cluster-name

    同一个namespace,同一个group下,不同的 cluster-name 之间是可以相互调用的;

    但是我们尽量要避免服务的跨集群调用,因为通常是跨地域部署的,跨地域会有网络延时,所以要优先保证同一集群调用。(需要使用代码实现

    order-center 的配置文件:

    spring:
      cloud:
        nacos:
          discovery:
            server-addr: 192.168.172.20:8848
            # dev环境的命名空间ID
            namespace: cd944310-e786-4670-b7d9-7612d26884c1
            group: pay
            cluster-name: BJ
      application:
        name: order-center
    
    server:
      port:8001

    product-center服务的配置文件:

    spring:
      cloud:
        nacos:
          discovery:
            server-addr: 192.168.172.20:8848
            # dev环境的命名空间ID
            namespace: cd944310-e786-4670-b7d9-7612d26884c1
            group: pay
            cluster-name: BJ
      application:
        name: product-center
    
    server:
      port: 8002

    nacos的服务的存储格式Map<namespaceId,  Map<group::serviceName, Service>>

    4、metadata

    元数据,控制其version的版本,可以用于灰度发布;

    product-center的配置文件,如下:

    spring:
      cloud:
        nacos:
          discovery:
            server-addr: 192.168.172.20:8848
            # dev环境的命名空间ID
            namespace: cd944310-e786-4670-b7d9-7612d26884c1
            group: pay
            cluster-name: NJ
            # V1版本
            metadata:
              version: V1
      application:
        name: product-center
    
    server:
      port: 8002
    

     二、nacos的集群搭建

    nacos的集群模式,官网推荐使用 nginx 来搭建。

    注意:Nginx 和 MySQL 都要保证高可用。

     1、安装 Nginx

    解压安装参见:Nginx的核心模块

    (1)Nginx解压安装之后,修改nginx的配置文件 nginx.conf 文件,修改内容如下:

    http {
    	upstream nacos-cluster {
                 server 192.168.172.1:8849;
                server 192.168.172.1:8850;
                server 192.168.172.1:8851;
             }
    
    	server {
                 listen 8847;
                server_name 192.168.172.1;
    
                location /nacos/ {
                    proxy_pass http://nacos-cluster/nacos/;
               }
            }
    }
    

    (2)启动 nginx,进入 nginx 的安装目录 /usr/local/nginx/sbin 启动 nginx;

    ./nginx 

    踩过的坑:nginx中的 upstream后面的名称不能配置下划线,因为nginx不能识别;若配置了下划线,则访问会报错400错误;可以将下划线改为中划线;

    踩过的坑:nginx中的 upstream后面的名称不能配置下划线,因为nginx不能识别;若配置了下划线,则访问会报错400错误;可以将下划线改为中划线;

    踩过的坑:nginx中的 upstream后面的名称不能配置下划线,因为nginx不能识别;若配置了下划线,则访问会报错400错误;可以将下划线改为中划线;

    2、安装 nacos 服务

    将解压的 nacos 拷贝三份出来;

    cp -r nacos nacos8849;
    cp -r nacos nacos8850;
    cp -r nacos nacos8851;

    以拷贝出来的 nacos8849 为例;

    第一步:修改 nacos8849/conf 目录下的 application.properties;

    server.port=8849
    
    spring.datasource.platform=mysql
    
    # 数据库实例数量
    db.num=1
    # 数据库的连接信息 db.url.0=jdbc:mysql://192.168.172.1:3306/nacos_test?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=root db.password=123456

    第二步: 进入 nacos8849/conf 目录下,拷贝原来的 cluster.conf.example 为 cluster.conf文件,并修改里面的内容;

    192.168.172.1:8849
    192.168.172.1:8850
    192.168.172.1:8851
    

    这样, nacos8849 的配置就完成了,nacos8850 和 nacos8851 也做同样的配置。

    启动 nacos 集群之前要先做一些准备工作。

    (1)先创建一个数据库,数据库表的脚本在 nacos 的包中的  nacos/conf/nacosmysql.sql ;

    (2)需要修改nacos-server的 启动脚本jvm参数。(虚拟机的内存分配的少,需要修改jvm参数变小)

    修改 nacos8849/bin/startup.sh 文件,

     第三步,分别进入 nacos8849、nacos8859、nacos8851 的 bin 目录,启动 startup,sh 脚本。

    /usr1/nacos/nacos8849/logs/start.out

     3、测试安装的 nacos

     分别测试登录地址,如下:

    http://192.168.172.1:8849/nacos
    http://192.168.172.1:8850/nacos
    http://192.168.172.1:8851/nacos
    

    NG测试

    http://192.168.172.1:8847/nacos
    

  • 相关阅读:
    [题解]小B的询问-莫队水题
    [学习笔记]莫队学习笔记[未完待续]
    ffmpeg设置超时时间
    python signal
    pydantic库使用文档
    rtmp及直播流相关资料
    ffmpeg 将视频转换成m3u8视频
    nginx stop失败问题
    linux使用ssh远程登录服务器
    解决Fcitx输入法文字候选无前端问题
  • 原文地址:https://www.cnblogs.com/yufeng218/p/13997177.html
Copyright © 2020-2023  润新知