如何在Ubuntu的Linux系统上搭建nacos集群

  1. 官方给出的集群部署架构图
    1. 集群部署说明 (nacos.io)
    2. 3个或3个以上nacos节点才能构成集群
  2. 当前示例中包含3个nacos节点,同时一个负载均衡器代理3个nacos,本示例中负载均衡器可使用的是nginx
    1. 准备并安装好正常运行的nginx,本示例略
    2. 准备并安装好正常运行的MySQL数据库,本示例略
    3. 3个nacos节点地址信息
      1. 节点ipport
        nacos1192.168.xxx.xxx8841
        nacos2192.168.xxx.xxx18841
        nacos3192.168.xxx.xxx28841
      2. 根据自己的实际情况设置,端口建议不要设置为连续的,防止nacos启动时有可能存在端口冲突,最好不同nacos的节点的端口相差有一定的步数,步数大于1002以上
  3. 开始搭建nacos集群
    1. 下载nacos安装包
      1. https://github.com/alibaba/nacos/releases
      2. 本示例下载的压缩包为:nacos-server-2.3.0.tar.gz
    2. 通过ssh远程工具将压缩包上传到Linux服务器中,然后再解压
      1. tar -zxvf nacos-server-2.3.0.tar.gz
    3. 初始化nacos的数据库脚本
      1. 在解压的文件中的conf文件夹中找到mysql-schema.sql,这里是nacos建立数据库的相关SQL数据,使用数据库管理工具新建一个数据库名称为nacos的数据库,并将当前mysql-schema.sql的sql文件在nacos数据库中执行,结果如下所示
    4. 回到Linux服务中,进入nacos的conf目录,将配置文件cluster.conf.example,重命名为cluster.conf
      1. mv cluster.conf.example cluster.conf
    5. 将配置文件cluster.conf修改为以下信息,其中ip地址修改为自己的服务器ip地址,端口设定为自己设定的nacos的服务端口
      1. #
        # Copyright 1999-2021 Alibaba Group Holding Ltd.
        #
        # Licensed under the Apache License, Version 2.0 (the "License");
        # you may not use this file except in compliance with the License.
        # You may obtain a copy of the License at
        #
        #      http://www.apache.org/licenses/LICENSE-2.0
        #
        # Unless required by applicable law or agreed to in writing, software
        # distributed under the License is distributed on an "AS IS" BASIS,
        # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        # See the License for the specific language governing permissions and
        # limitations under the License.
        ##it is ip
        #example
        192.168.xxx.xxx:8841
        192.168.xxx.xxx:18841
        192.168.xxx.xxx:28841
        
    6. 修改配置文件application.properties,添加数据库配置、开启鉴权等相关信息
      1. ### 是否开启鉴权功能
        ### If turn on auth system:
        nacos.core.auth.enabled=true### 配置自定义身份识别的key(不可为空)和value(不可为空)
        ### Since 1.4.1, worked when nacos.core.auth.enabled=true and nacos.core.auth.enable.userAgentAuthWhite=false.
        ### The two properties is the white list for auth and used by identity the request from other server.
        nacos.core.auth.server.identity.key=exampleNacos
        nacos.core.auth.server.identity.value=exampleNacos### 默认鉴权插件用于生成用户登陆临时accessToken所使用的密钥,使用默认值有安全风险
        ### 自定义密钥时,推荐将配置项设置为Base64编码的字符串,且原始密钥长度不得低于32字符。 Base64 在线编码解码: https://base64.us/
        ### The default token (Base64 String):
        nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789# mysql数据库配置信息
        ### If use MySQL as datasource:
        ### Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced.
        # spring.datasource.platform=mysql
        # 初始化使用的数据库为MySQL
        spring.sql.init.platform=mysql# 数据库连接数量
        ### Count of DB:
        db.num=1### Connect URL of DB:
        # 连接mysql的url
        db.url.0=jdbc:mysql://192.168.xxx.xxx:3333/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
        # 连接mysql的用户
        db.user.0=root
        # 连接mysql的密码
        db.password.0=123456
        
    7. 将解压之后的nacos的文件复制3份,分别为nacos1、nacos2、nacos3
      1. cp -rf nacos ./nacos1
        cp -rf nacos ./nacos2
        cp -rf nacos ./nacos3
    8. 分别修改nacos的application.properties,将里面的server.port修改为指定的端口
      1. nacos1
        1. ### Default web server port:
          server.port=8841
      2. nacos2
        1. ### Default web server port:
          server.port=18841
      3. nacos3
        1. ### Default web server port:
          server.port=28841
    9. 分别给nacos1、nacos2、nacos3配置jdk环境,修改startup.sh文件
      1. # 配置JDK环境,要求JDK 1.8+
        export JAVA_HOME=/usr/local/project/openjdk-8
        export JRE_HOME=$JAVA_HOME/jre
        export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
        export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
        
    10. 然后分别启动nacos1、nacos2、nacos3的节点,启动脚本文件为startup.sh
      1. /usr/local/project/nacos-group/nacos1/bin/startup.sh
        /usr/local/project/nacos-group/nacos2/bin/startup.sh
        /usr/local/project/nacos-group/nacos3/bin/startup.sh
    11. 访问地址http://192.168.xxx.xxx:8841/nacos/,输入默认账号密码:nacos/nacos登录可到达nacos控制台,三个节点状态都是up则说明启动成功
      1. 同时如果都启动成功,所有节点的端口的nacos的控制台都可以正常访问
  4. 配置nginx的反向代理
    1. 默认端口占用情况
      1. 端口与主端口的偏移量描述
        88480主端口,客户端、控制台及OpenAPI所使用的HTTP端口
        98481000客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求
        98491001服务端gRPC请求服务端端口,用于服务间同步等
        7848-1000Jraft请求服务端端口,用于处理服务端间的Raft相关请求
      2. 使用VIP/nginx请求时,需要配置成TCP转发,不能配置http2转发,否则连接会被nginx断开。 9849和7848端口为服务端之间的通信端口,请勿暴露到外部网络环境和客户端测。
    2. 根据主端口偏移量,可以计算出客户端gRPC请求服务端端口:
      1. 8841+1000=9841
      2. 18841+1000=19841
      3. 28841+1000=29841
      4. nginx监听的是80端口,则80+1000=1080
    3. 找到nginx的配置文件conf/nginx.conf
    4. 修改conf/nginx.conf的配置文件信息,添加以下配置
      1. 在http块内添加
        1.     # upstream指令可以定义一组服务器upstream nacos-cluster {server 192.168.xxx.xxx:8841;server 192.168.xxx.xxx:18841;server 192.168.xxx.xxx:28841;}
      2. 在server块中添加
        1.         location /nacos {# 反向代理配置,将请求转发到指定的服务proxy_pass http://nacos-cluster;}
      3. 在stream块用于做nacos的TCP转发
        1. # stream块用于做nacos的TCP转发
          stream {# upstream指令可以定义一组服务器upstream nacos-cluster {server 192.168.xxx.xxx:9841;server 192.168.xxx.xxx:19841;server 192.168.xxx.xxx:29841;}server {# 80+1000=1080listen 1080;proxy_connect_timeout 30s;proxy_timeout 5m;# 反向代理配置,将请求转发到指定的服务proxy_pass nacos-cluster;}}
    5. 启动nginx
      1. sudo /usr/local/project/nginx/sbin/nginx
      2. nginx监听的是80端口,所以需要管理员权限启动nginx
      3. 如果nginx启动报错类似于:nginx: [emerg] unknown directive "stream" in /usr/local/project/nginx/conf/nginx.conf:159,解决方案请参考作者当前博客链接:nginx启动报错nginx: [emerg] unknown directive “stream“ in /usr/local/project/nginx/conf/nginx.conf:159-CSDN博客
  5. 浏览器访问nginx监听的端口,访问nacos,当前示例访问地址为http://192.168.xxx.xxx/nacos/
    1. 显示可以正常访问
  6. 项目中连接nacos实现服务注册和服务发现
    1. server:port: 18080
      spring:application:#应用的名称name: nacos-user-servicecloud:nacos:# Nacos Server 启动监听的ip地址和端口server-addr: 192.168.163.100:80discovery:# nacos开启鉴权之后的用户名username: nacos# nacos开启鉴权之后的用户登录密码password: nacos# 配置服务实例的集群名称cluster-name: GD
  7. 生产环境优化建议
    1. 实际部署时,我们最好给反向代理的nginx服务器设置一个域名,这样后续如果有服务器迁移,nacos的客户端也无需更改配置
    2.  Nacos的各个节点应该部署到多个不同的服务器上,这样可以做到容灾和隔离

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/221969.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis权限管理体系(一):客户端名及用户名

在Redis6之前的版本中,因安全认证的主要方式是使用Redis实例的密码进行基础控制,而无法按照不同的应用来源配置不同账号以及更细粒度的操作权限控制来管理。本文先从client list中的信息入手,逐步了解Redis的客户端名设置、用户设置及权限控制…

【Monitor, Maintenance Operation, Script code/prgramme】

Summary of M,M&O,Program JD) Monitor & M&O Symbio信必优) Job chance/opportunities on Dec 12th, 20231.1) Content 招聘JD job description:1.2) suggestions from Ms Liang/Winnie on Wechat app1.3) Java微服务是什么?1.3.1) [URL Java 微服务](…

京微齐力:基于H7的平衡控制系统(一、姿态解析)

目录 前言一、关于平衡控制系统二、实验效果三、硬件选择1、H7P20N0L176-M2H12、MPU6050 四、理论简述五、程序设计1、Cordic算法2、MPU6050采集数据3、fir&iir滤波4、姿态解算 六、资源消耗&工程获取七、总结 前言 很久之前,就想用纯FPGA做一套控制系统。可…

C++二维数组(2)

图形相似度 题目描述: 给出两幅相同大小的黑白图像(用0-1矩阵)表示,求它们的相似度。 说明:若两幅图像在相同位置上的像素点颜色相同,则称它们在该位置具有相同的像素点。 两幅图像的相似度定义为相同像素…

橘子学K8S01之容器中所谓的隔离

我们一直都在说容器就是一个沙盒,沙盒技术顾名思义就是像一个集装箱一样,把应用(服务,进程之类的)装起来的技术,这样每个进程在自己的沙盒中和其他的沙盒隔离开来,每个沙盒之间存在一个边界使得他们互不干扰&#xff0…

鸿鹄云商:Java商城引领商业模式的潮流,免费搭建多种商城模式

java SpringCloud版本b2b2c鸿鹄云商平台全套解决方案 使用技术: Spring CloudSpring BootMybatis微服务服务监控可视化运营 B2B2C平台: 平台管理端(包含自营) 商家平台端(多商户入驻) PC买家端、手机wap/公众号买家端 微服务(30个通用…

用23种设计模式打造一个cocos creator的游戏框架----(十六)亨元模式

1、模式标准 模式名称:亨元模式 模式分类:结构型 模式意图:运用共享技术有效地支持大量细粒度的对象 结构图: 适用于: 1、一个应用程序使用了大量的对象. 2、完全由于使用大量的对象,造成很大的存储开…

铭飞CMS list 接口 SQL注入漏洞复现

0x01 产品简介 铭飞CMS是一款基于java开发的一套轻量级开源内容管理系统,铭飞CMS简洁、安全、开源、免费,可运行在Linux、Windows、MacOSX、Solaris等各种平台上,专注为公司企业、个人站长快速建站提供解决方案 0x02 漏洞概述 铭飞CMS在5.2.10版本以前list 接口处存在sql注入…

什么是CAS(比较并交换-乐观锁机制-锁自旋)

什么是 CAS(比较并交换-乐观锁机制-锁自旋) 概念及特性 CAS(Compare And Swap/Set)比较并交换,CAS 算法的过程是这样:它包含 3 个参数CAS(V,E,N)。V 表示要更新的变量(内存值),E 表示预期值(旧…

嵌入式开发板qt gdb调试

1) 启动 gdbserver ssh 或者 telnet 登陆扬创平板 192.168.0.253, 进入命令行执行如下: chmod 777 /home/HelloWorld (2) 打 开 QTcreator->Debug->StartDebugging->Attach to Running Debug Server 进行…

Nginx-nginx-1.18.0编译时默认包含哪些模块?nginx-1.18.0有哪些模块和配置语句,各有什么作用?

目录 01-如何查看 Nginx-nginx-1.18.0编译时默认包含哪些模块?02-如何查看Nginx有哪些自己可以手动设置添加或不添加的模块03-各配置语句和模块功能简介03-001:--pid-pathPATH03-002:--lock-pathPATH 03-003:select_module 03-004…

[湖湘杯 2021 final]MultistaeAgency

题目是给了源码,我们先来看web的main.go package mainimport ("bytes""crypto/md5""encoding/json""fmt""io""io/ioutil""log""math/rand""net/http""os"&q…

ASP.NET Core 8 在 Windows 上各种部署模型的性能测试

ASP.NET Core 8 在 Windows 上各种部署模型的性能测试 我们知道 Asp.net Core 在 windows 服务器上部署的方案有 4 种之多。这些部署方案对性能的影响一直以来都是靠经验。比如如果是部署在 IIS 下,那么 In Process 会比 Out Process 快;如果是 Self Hos…

Linux 线程池源码剖析

1 了解线程池 1-1线程池的概述 由一个任务队列和一组处理队列的线程组成。一旦工作进程需要处理某个可能“阻塞”的操作,不用自己操作,将其作为一个任务放到线程池的队列,接着会被某个空闲线程提取处理。 1-2线程池的组件 任务 待处理的工作,通常由标识、上下文和处理…

Java_内部类枚举

内部类 内部类: 是类中的五大成分之一(成员变量、方法、构造器、内部类、代码块),如果一个类定义在另一个类的内部,这个类就是内部类。场景:当一个类的内部,包含了一个完整的事物,且这个事物没有必要单独设计时&#x…

年度评选揭晓:Apache SeaTunnel荣获年度优秀开源技术团队殊荣

在OSCHINA平台举办的2023年度开源技术团队评选中,Apache SeaTunnel社区凭借其在开源领域的出色表现,荣获“2023年度优秀开源技术团队”奖项。 这一殊荣不仅是对Apache SeaTunnel社区在过去一年中技术贡献的认可,也是对其在开源社区活动运营方…

聊聊Api接口优化的几个方法!

我负责的系统到2021年初完成了功能上的建设,开始进入到推广阶段。随着推广的逐步深入,收到了很多好评的同时也收到了很多对性能的吐槽。刚刚收到吐槽的时候,我们的心情是这样的: 当越来越多对性能的吐槽反馈到我们这里的时候&…

springboot mybatis手动事务

创建springboot项目 搭建最简单的SpringBoot项目-CSDN博客 引入mybatis和数据库依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><…

java设计模式学习之【代理模式】

文章目录 引言代理模式简介定义与用途实现方式 使用场景优势与劣势在Spring框架中的应用图片加载示例代码地址 引言 在现实生活中&#xff0c;我们经常使用代理来处理我们不想直接参与或无法直接参与的事务&#xff0c;例如&#xff0c;使用律师来代表法庭上的案件。在软件开发…

JS实现日历表

有需要的可以用一下&#xff0c;这是一个简单的demo. HTML&#xff1a; <table><thead><tr><th colspan"2"><span class"left"></span></th><th colspan"3"><span class"time"&g…