Nacos docker实现nacos高可用集群项目

news2024/11/26 23:28:27

目录

Nacos是什么?

Nacos在公司里的运用是什么?

使用docker构建nacos容器高可用集群

实验规划图:​编辑

1、拉取nacos镜像

2、创建docker网桥(实现集群内的机器的互联互通(所有的nacos和mysql))

3、创建Mysql容器,并初始化数据库nacos_config数据库(不用添加注释,我是为了方便解释)

​编辑​编辑4、创建三个Nacos节点

5、测试访问

Nacos是什么?

Nacos(中文名:阿里巴巴注册中心和配置中心)是一个开源的动态服务发现、配置管理和服务管理平台,最初由阿里巴巴开发并开源。

Nacos 提供了以下核心功能:

  1. 服务发现和注册: Nacos 允许应用程序在微服务架构中注册自己的服务实例,并发现其他服务的实例。这有助于构建弹性、可扩展的微服务应用,使服务能够自动注册和发现。

  2. 动态配置管理: Nacos 提供了一个配置中心,允许将配置信息集中存储和管理。应用程序可以动态获取配置,而不需要重新启动,从而支持配置的动态更新。

  3. 服务健康检查: Nacos 可以定期检查注册的服务实例的健康状态,以确保它们正常运行。这对于自动发现和剔除不健康的实例非常重要。

  4. 动态 DNS 服务: Nacos 提供了一个 DNS 服务,可以通过服务名称动态解析到相应的服务实例的 IP 地址。这简化了微服务之间的通信,不需要硬编码 IP 地址。

  5. 灰度发布: Nacos 支持灰度发布(部分流量切换到新版本),以及基于权重的负载均衡,有助于实现无缝升级和降级。

  6. 多数据中心和跨区域复制: Nacos 具有多数据中心和跨区域复制的能力,支持全球分布式部署。

  7. 支持多种语言和开放API: Nacos 提供了多种编程语言的客户端库,同时也支持开放的 REST 和 gRPC API,使其易于集成到各种应用程序中。

Nacos 可以作为微服务架构中的关键基础设施组件,用于管理和协调微服务的注册、发现、配置和健康检查等方面。它有助于构建可扩展、高可用的微服务架构,并提供了许多功能,使微服务应用程序更易于开发、部署和管理。因此,Nacos 在现代应用程序和微服务生态系统中广泛应用。

Nacos在公司里的运用是什么?

Nacos在公司内的运用通常包括以下几个方面:

  1. 微服务架构支持:Nacos是一个用于服务注册与发现、配置管理和服务健康监测的平台,因此在微服务架构中广泛应用。公司可以使用Nacos来管理大规模微服务应用程序的服务发现、负载均衡、配置分发等方面的需求。

  2. 服务注册和发现:公司可以使用Nacos来注册和发现各种微服务实例。当新的微服务实例启动时,它们会向Nacos注册,这样其他微服务就可以动态地发现并与它们通信。这有助于简化微服务之间的通信和协调。

  3. 配置中心:Nacos提供了一个集中的配置管理系统,公司可以将应用程序的配置信息存储在Nacos中,并让应用程序动态地获取配置。这使得配置更加灵活,可以在运行时进行修改,而无需重新部署应用程序。

  4. 动态路由和负载均衡:Nacos支持动态路由,公司可以根据不同的条件将请求路由到不同的服务实例上。此外,Nacos也可以与负载均衡器集成,确保流量被均匀分布到不同的服务实例上,提高了系统的性能和可扩展性。

  5. 灰度发布和滚动升级:Nacos支持灰度发布策略,允许公司逐渐将新版本的服务引入生产环境,同时维护旧版本。这有助于降低风险,并在升级过程中实现零宕机。

  6. 健康检查和自动故障恢复:Nacos可以定期检查注册的服务实例的健康状态,如果某个实例出现故障,Nacos会自动将其从注册表中注销,并自动进行故障恢复。这有助于提高系统的可用性和稳定性。

  7. 事件监听和报警:Nacos支持事件监听机制,公司可以根据配置或服务状态的变化触发自定义操作,如通知、报警等。这有助于及时发现和应对问题。

  8. 多数据中心支持:对于跨多个数据中心的大型组织,Nacos支持多数据中心配置和服务注册,使得管理跨地理位置的服务部署变得更加容易。

总之,Nacos在公司内的应用主要是为了支持微服务架构和提供服务治理的各个方面,从而帮助公司更好地构建、管理和维护分布式应用程序,提高系统的可用性、可维护性和可扩展性。

使用docker构建nacos容器高可用集群

参考视频:【IT老齐315】3分钟Docker构建并接入Nacos 2.x高可用集群

实验规划图:

1、拉取nacos镜像

[root@localhost ~]# docker pull nacos/nacos-server:v2.2.2

2、创建docker网桥(实现集群内的机器的互联互通(所有的nacos和mysql))

[root@localhost conf]# docker network create -d bridge bdg-nacos-cluster
f935dccd695c530d961f540c7878ac8531285031b0b2da8bc15e30c7ebfc964d

3、创建Mysql容器,并初始化数据库nacos_config数据库(不用添加注释,我是为了方便解释)

[root@localhost ~]# cat creat_mysql_nacos.sh 
mkdir /etc/nacos-mysql/initdb
cd /etc/nacos-mysql/initdb

rm -f mysql-schema.sql
# 前提是你下载了wget,下面的网址是国内的mysql-schema.sql下载网址,并且nacos官方也会给我们提供mysql-schema.sql数据库
wget http://manongbiji.oss-cn-beijing.aliyuncs.com/ittailkshow/sca2023/download/mysql-schema.sql

docker rm -f mysql-5.7.4
docker volume rm -f nacos-mysql-data
# 创建卷,用于保存nacos运行的数据文件
docker volume create nacos-mysql-data

# 构建的mysql5.7.4的容器
docker run --name mysql-5.7.4 --hostname=mysql-5.7.4 -d \
-p=8306:3306 --network=bdg-nacos-cluster --restart=always \
-e MYSQL_ROOT_PASSWORD=123456 \
-v nacos-mysql-data:/var/lib/mysql \               #用于保存mysql内的数据
-v /etc/nacos-mysql/initdb:/docker-entrypoint-initdb.d \  #保存的我们下载的mysql-schema.sql
mysql:5.7.4           #镜像版本
[root@localhost ~]# 

mysql-schema.sql数据库内表的作用如下:

4、创建三个Nacos节点

创建nacos1节点

export CNAME=nacos1
docker rm -f ${CNAME}
docker volume rm -f ${CNAME}-logs
docker volume create ${CNAME}-logs

docker run -d --name ${CNAME} \
--network=bdg-nacos-cluster --restart=always \
--hostname=${CNAME} \
-e PREFER_HOST_MODE=hostname \
-e NACOS_SERVERS="nacos1:8848 nacos2:8848 nacos3:8848" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=mysql-5.7.4 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=root \
-e MYSQL_SERVICE_DB_PARAM="characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true" \
-e NACOS_AUTH_IDENTITY_KEY=2222 \
-e NACOS_AUTH_IDENTITY_VALUE=2xxx \
-e NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789 \
-v ${CNAME}-logs:/home/nacos/logs \
-p 8848:8848 -p 9848:9848 -d \
nacos/nacos-server:v2.2.2

代码解释: 

实现效果:

[root@localhost initdb]# export CNAME=nacos1
[root@localhost initdb]# docker rm -f ${CNAME}
Error response from daemon: No such container: nacos1
[root@localhost initdb]# docker volume rm -f ${CNAME}-logs
nacos1-logs
[root@localhost initdb]# docker volume create ${CNAME}-logs
nacos1-logs
[root@localhost initdb]# docker run -d --name ${CNAME} \
> --network=bdg-nacos-cluster --restart=always \
> --hostname=${CNAME} \
> -e PREFER_HOST_MODE=hostname \
> -e NACOS_SERVERS="nacos1:8848 nacos2:8848 nacos3:8848" \
> -e SPRING_DATASOURCE_PLATFORM=mysql \
> -e MYSQL_SERVICE_HOST=mysql-5.7.4 \         #mysql容器名称
> -e MYSQL_SERVICE_DB_NAME=nacos_config \
> -e MYSQL_SERVICE_PORT=3306 \
> -e MYSQL_SERVICE_USER=root \
> -e MYSQL_SERVICE_PASSWORD=123456 \
> -e MYSQL_SERVICE_DB_PARAM="characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true" \
> -e NACOS_AUTH_IDENTITY_KEY=2222 \           #标准的身份认证信息,三台nacos都必须保持一致
> -e NACOS_AUTH_IDENTITY_VALUE=2xxx \
> -e NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789 \
> -v ${CNAME}-logs:/home/nacos/logs \
> -p 8848:8848 -p 9848:9848 -d \
> nacos/nacos-server:v2.2.2
2735cb302399c46c64342d1feda2aaf44bee4441cb8469dacc3cc166e6e649c4
[root@localhost initdb]# 

创建nacos2节点

export CNAME=nacos2                                      # 修改部分
docker rm -f ${CNAME}
docker volume rm -f ${CNAME}-logs
docker volume create ${CNAME}-logs

docker run -d --name ${CNAME} \
--network=bdg-nacos-cluster --restart=always \
--hostname=${CNAME} \
-e PREFER_HOST_MODE=hostname \
-e NACOS_SERVERS="nacos1:8848 nacos2:8848 nacos3:8848" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=mysql-5.7.4 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
-e MYSQL_SERVICE_DB_PARAM="characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true" \
-e NACOS_AUTH_IDENTITY_KEY=2222 \
-e NACOS_AUTH_IDENTITY_VALUE=2xxx \
-e NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789 \
-v ${CNAME}-logs:/home/nacos/logs \
-p 8849:8848 -p 9849:9848 -d \                       # 修改部分
nacos/nacos-server:v2.2.2

创建nacos3节点

export CNAME=nacos3                                      # 修改部分
docker rm -f ${CNAME}
docker volume rm -f ${CNAME}-logs
docker volume create ${CNAME}-logs

docker run -d --name ${CNAME} \
--network=bdg-nacos-cluster --restart=always \
--hostname=${CNAME} \
-e PREFER_HOST_MODE=hostname \
-e NACOS_SERVERS="nacos1:8848 nacos2:8848 nacos3:8848" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=mysql-5.7.4 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
-e MYSQL_SERVICE_DB_PARAM="characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true" \
-e NACOS_AUTH_IDENTITY_KEY=2222 \              
-e NACOS_AUTH_IDENTITY_VALUE=2xxx \
-e NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789 \
-v ${CNAME}-logs:/home/nacos/logs \
-p 8850:8848 -p 9850:9848 -d \                       # 修改部分
nacos/nacos-server:v2.2.2

5、测试访问

访问网址http://192.168.1.209:8848/nacos/

初始账号密码默认为nacos。

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

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

相关文章

javaScript:DOM中常用尺寸

目录 前言(可以根据图示找到需要的尺寸,便于理解) 内尺寸 clientWidth 包含左右padding和宽度width(忽略滚动条的宽度) clientHeight 包含上下padding和height(忽略滚动条的高度) clientTo…

postman json复杂数据的模拟

先设置路径 然后可以定义下边数据(Key value) 也可以不定义 看你的情况 [{"mac": "4C-77-66-19-50-65","addressPattern": "98jd","platform": "ios","registrationId": "…

国内免费无限制的chatgpt导航和ai画画

非常实用的AI网址导航,其实际使用体验非常便捷。该导航系统不仅提供了全面的网站分类和搜索功能,还对每个网站进行了精准的评估和排序。推荐高质量的网站资源,并实时检测网站的安全性,保障用户的上网安全。 总的来说&#xff1a…

KaiwuDB 受邀亮相 2023 中国国际“软博会”

8月31日,第二十五届中国国际软件博览会(以下简称“软博会”)在天津盛大开幕。KaiwuDB 受邀亮相展会,围绕“塑造软件新生态,赋能发展新变革”主题,重点展示自研分布式多模数据库及各大行业解决方案&#xff…

Docker Part01:Docker简介

文章目录 1 虚拟化技术2 Docker概述2.1 Docker能解决的问题2.2 Docker介绍2.3 为什么使用Docker2.4 Docker特点2.5 Docker应用场景 3 Docker与虚拟机对比3.1 Docker和虚拟机组成结构3.2 Docker和虚拟机的不同点 4 Docker基本概念4.1 Docker引擎4.2 Docker基本架构4.3 Docker容器…

地图投影——1 投影目录

地图投影示例说明亚当斯方形 II该投影以方形显示世界。该投影为等角投影,但方形的四个角除外。埃托夫该折衷改进的方位投影采用椭圆的形式。该投影主要用于世界地图。阿尔伯斯该等积圆锥投影最适合用于中纬度东西方向分布的大陆板块。方位自适应圆柱该折衷的地图投影…

ToBeWritten之ATTCK 测评方案

也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 转移发布平台通知:将不再在CSDN博客发布新文章,敬…

FLUX查询InfluxDB -- InfluxDB笔记三

1. 入门 from(bucket: "example_query") // 没有筛选条件直接查询会报错|> range(start: -1h) // |>是管道符,后跟筛选条件 2. 序列、表和表流 序列是InfluxDB的概念,一个序列是由measurement、标签集、一个字段名称 表流是FLUX为了…

基于FPGA的信号发生器(三角波、方波、正弦波)

目录 DDS实现原理 DDS整体设计框图​ Quartus II 仿真​ modelsim仿真 顶层代码 DDS实现原理 DDS(Direct Digital Frequency Synthesizer)直接数字频率合成器,也可叫DDFS。 DDS是从相位的概念直接合成所需波形的一种频率合成技术。 不仅可以产生不同频率的正弦波,而且可…

算法 数据结构 递归冒泡算法 java冒泡算法 优化递归冒泡 数据结构(九)

使用递归算法实现冒泡: package com.nami.algorithm.study.day06;import java.util.Arrays;/*** beyond u self and trust u self.** Author: lbc* Date: 2023-09-05 15:36* email: 594599620qq.com* Description: keep coding*/ public class BubbleSort2 {// p…

windows server 2019 使用powershell静默安装netframework3.5

参考链接 使用 Windows PowerShell 启用 .NET Framework 3.5 | Microsoft Learn 对于未连接到 Internet 的 Windows Server 2012 或更高版本的安装,可使用 Windows PowerShell 来添加 .NET Framework 3.5,提供对安装介质上的 \sources\sxs 文件夹的访问…

NIFI实现数据库数据增量同步

说明 nifi版本:1.23.2(docker镜像) 需求背景 将数据库中的数据同步到另一个数据库中,要求对于新增的数据和历史有修改的数据进行增量同步 模拟数据 建表语句 源数据库和目标数据库结构要保持一致,这样可以避免后…

什么是数字体验平台

数字体验平台是一种基于数字技术的工具或系统,旨在提供用户与产品、服务或品牌进行交互和体验的场所。它通过结合多种数字化技术,如人工智能、大数据、云计算、物联网等,为用户提供个性化、多维度的体验。 数字体验平台可以为企业或组织搭建一…

Flutter实现ControlExecutor进行多个异步任务执行时监听状态并可指定最后执行的异步并在指定的异步执行完毕后结束executor并回调。

1.场景 当有多个接口请求时,且接口调用不是同时进行时,而且接口调用有可能时链式的,中间也有可能加入别的逻辑,但是需要在第一个接口调用时打开等待框,在最后一个接口调用完成时关闭等待框类似需求时,可以…

Spark 6:Spark SQL DataFrame

SparkSQL 是Spark的一个模块, 用于处理海量结构化数据。 SparkSQL是用于处理大规模结构化数据的计算引擎 SparkSQL在企业中广泛使用,并性能极好 SparkSQL:使用简单、API统一、兼容HIVE、支持标准化JDBC和ODBC连接 SparkSQL 2014年正式发布,当…

java调用js文件的两种方法(支持V8引擎)

前言 对java逆向感兴趣的盆友可以关注我以前的文章,有图片验证码识别、AES、SHA256等各种加密的java实现,不定时更新常用算法和加密,欢迎一起交流讨论! 在日常逆向中,一些前端的加密代码用java复现出来比较难&#xff…

使用工作流快速开发平台,做好企业数据资源管理!

面对越来越繁忙的业务,很多客户朋友不知道用什么样的平台才能快速处理好企业内部数据,做出更有利于企业发展的经营决策。其实,低代码技术平台、工作流快速开发平台是可以让企业减少重复工作,提高工作效率,实现流程化办…

中断处理原理:接口及按键驱动

一、什么是中断 一种硬件上的通知机制,用来通知CPU发生了某种需要立即处理的事件 分为: 内部中断 CPU执行程序的过程中,发生的一些硬件出错、运算出错事件(如分母为0、溢出等等),不可屏蔽外部中断 外设发…

自动计算比例 计算属性 computed @input=“rate“

<el-col :span"12"><el-form-item label"当年累计实收租金:" prop"cumulativeRent"><el-inputv-model"createForm.cumulativeRent"input"rate"clearable:disabled"value 2"><template slot…

如何将MySQL中指定的表结构同步到人大金仓数据库

场景 刚开始做数据库适配的时候,这是一个棘手的问题,因为MySQL的库里,表结构,字段都是最新的,但是金仓的库,全是旧版本的表结构。需要把我们模块的表结构,同步到金仓中。 虽然金仓有数据库同步工具,但是直接把所有表都给同步过来,难免会影响到其他模块。 然后…