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

目录

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/initdbrm -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.sqldocker 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}-logsdocker 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}-logsdocker 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}-logsdocker 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.mzph.cn/news/76517.shtml

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

相关文章

环境变量与Path环境变量

“环境变量”和“path环境变量”其实是两个东西,这一点大家一定要区分开,不要混为一谈。 “环境变量”是操作系统工作环境设置的一些选项或属性参数。每个环境变量由变量名和文件路径组成的,可以设置很多个环境变量。 我们一般使用环境变量…

冒泡排序、选择排序、插入排序、希尔排序

冒泡排序 基本思想 代码实现 # 冒泡排序 def bubble_sort(arr):length len(arr) - 1for i in range(length):flag Truefor j in range(length - i):if arr[j] > arr[j 1]:temp arr[j]arr[j] arr[j 1]arr[j 1] tempflag Falseprint(f第{i 1}趟的排序结果为&#…

人生中第一次向开源项目提交PR记录

git了解很久了,但是就是没有向大一点的项目提交过pr,都是自己瞎折腾,记录一下开源项目提交PR过程,省略的过程可以参考: https://www.runoob.com/git/git-tutorial.html,这个里面包括安装,使用&a…

正规好用的电脑端抽奖软件有哪些?

这几个软件都是本人反复用过、反复比较的,且都超过5年。 1. 518抽奖软件 518抽奖软件,518我要发,超好用的年会抽奖软件,简约设计风格。 包含文字号码抽奖、照片抽奖两种模式,支持姓名抽奖、号码抽奖、数字抽奖、照片抽…

如何进行错误处理和异常处理?

错误处理和异常处理是编程中非常重要的概念,它们允许我们在程序运行时处理各种问题和异常情况,以确保程序的稳定性和可靠性。在C语言中,错误处理和异常处理通常通过条件语句和函数来实现。本文将详细讨论C语言中的错误处理和异常处理的方法&a…

项目系列之登录管理

登录管理是现代计算机系统中关键的组成部分之一。那么本篇博客我们来简单了解一下登录的流程与前后端干了啥事。 一.登录流程: 用户打开登录页面: 用户访问应用程序或网站的登录页面。此页面通常包含用户名/邮箱输入字段和密码输入字段,以及…

测试平台部署三——Nginx

测试平台部署——Nginx 一、nginx部署1、nginx的作用:2、案例1二、django静态文件配置和部署1、nginx工作原理2、反向代理一、nginx部署 1、nginx的作用: 静态文件服务器和反向代理django服务 进入nginx容器中 sudo docker run --rm -it nginx:alpine /bin/sh

什么是动态组件以及使用场景

文章目录 一、vue中的动态组件是什么?有什么用?二、使用demo1.tab页签中的使用2.模拟新闻页demo 三、用keep-alive包裹,保持状态总结 一、vue中的动态组件是什么?有什么用? 动态组件指可以动态切换组件的显示和隐藏。…

岩土工程安全监测利器:振弦采集仪的发展

岩土工程安全监测利器:振弦采集仪的发展 岩土工程安全监测是保障建筑物、地下工程和地质环境安全稳定运行的重要手段。传统上,监测手段主要依靠人工巡视以及基础设施安装的传感器,但是这些方法都存在着缺陷。人工巡视存在的问题是数据采集精…

【Vue】详细介绍Vue项目的目录结构及各个核心文件的示例代码

Vue.js并没有严格的文件和目录结构要求,但一般情况下,我们的Vue项目目录结构如下: ├── node_modules/ # 项目依赖的 node 模块 ├── public/ # 公共资源目录 │ ├── favicon.ico # 网页图标 │ └──…

Linux驱动【day2】

mychrdev.c: #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include<linux/uaccess.h> #include<linux/io.h> #include"head.h" unsigned int major; // 保存主设备号 char kbuf[128]{0}; unsigned int…

第24节-PhotoShop基础课程-钢笔工具

文章目录 前言1.钢笔工具1.直线绘制2.曲线绘制 按住shift键 垂直/水平/453.添加&#xff0c;减少锚点&#xff08;在路径上点击锚点就可以增加和删除&#xff09;4.移动锚点 Ctrl 左键5.手柄控制 先按住Alt 点击 一个锚点有两个手柄控制点&#xff08;中间点&#xff09;6.加…

【linux基础(五)】Linux中的开发工具(上)---yum和vim

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到开通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; Linux中的开发工具 1. 前言2.…

4、Nginx 配置实例-反向代理

文章目录 4、nginx 配置实例-反向代理4.1 反向代理实例一4.1.1 实验代码 4.3 反向代理实例二4.3.1 实验代码 【尚硅谷】尚硅谷Nginx教程由浅入深 志不强者智不达&#xff1b;言不信者行不果。 4、nginx 配置实例-反向代理 4.1 反向代理实例一 实现效果&#xff1a;使用 nginx…

窗口函数-分组排序:row_number()、rank() 、dense_rank()、ntile()

窗口函数语法结构&#xff1a; 分析函数() over(partition by 分组列名 order by 排序列名 rows between 开始位置 and 结束位置) 开窗函数和聚合函数区别&#xff1a; 聚合函数会对一组值进行计算并返回一个值&#xff0c;常见的比如sum()&#xff0c;count()&#xff0c;ma…

动态代理JDK与cglib的区别之:如何处理被代理方法中的This调用

关于JDK与cglib动态代理的使用不是本文关注的重点&#xff0c;如有不清楚的同学可以查询相关资料进行了解。本文主要是要讲一下在面对方法存在嵌套调用时JDK与cglib动态代理的区别以及原因。 先看下测试代码&#xff0c;注意下TestProxyJDKImpl的test1方法调用了test2方法即可…

Python入门学习13(面向对象)

一、类的定义和使用 类的使用语法&#xff1a; 创建类对象的语法&#xff1a; ​​​​​​​ class Student:name None #学生的名字age None #学生的年龄def say_hi(self):print(f"Hi大家好&#xff0c;我是{self.name}")stu Student() stu.name &q…

ElementUI浅尝辄止36:Input 输入框

通过鼠标或键盘输入字符 1.如何使用&#xff1f; Input 为受控组件&#xff0c;它总会显示 Vue 绑定值。 通常情况下&#xff0c;应当处理 input 事件&#xff0c;并更新组件的绑定值&#xff08;或使用v-model&#xff09;。否则&#xff0c;输入框内显示的值将不会改变。不支…

设置vue 项目浏览器界面关闭或者刷新,询问是否保存内容

可以结合使用JavaScript的window.beforeunload事件和Vue的生命周期钩子函数。 <template> <!-- 组件模板 --> </template> <script> export default { data() { return { // 组件数据 }; }, beforeMount() { window.addEventListener(be…

FFMPEG视频压缩与Python使用方法

一、简介 FFMPEG 是一个完整的&#xff0c;跨平台的解决方案&#xff0c;记录&#xff0c;转换和流音频和视频。 官网&#xff1a;https://ffmpeg.org/ 二、安装 1、Linux&#xff1a; sudo apt install ffmpeg 2、Mac: brew install ffmpeg 3、Windows: 下载文件&#…