Docker之nacos集群部署

前言

Nacos 是一个开源的注册中心和配置中心,用于实现微服务架构中的服务发现、服务治理和动态配置管理。在 Docker 中使用 Nacos,你可以通过拉取官方提供的 Docker 镜像并运行容器的方式来快速部署 

一.Nacos镜像拉取及独立模式

镜像拉取命令详解:

当前命令为创建Nacos容器(没有Nacos镜像会自动拉取Nacos镜像)

docker run: 运行一个 Docker 容器的命令。

-itd: 这是参数的一部分,其中:

-i: 保持标准输入(stdin)打开。

-t: 为容器分配一个伪终端(pseudo-TTY)。

-d: 在后台运行容器,并返回容器 ID。

-e PREFER_HOST_MODE=ip: 设置环境变量 PREFER_HOST_MODE 的值为 ip,表示使用 IP 模式。

-e MODE=standalone: 设置环境变量 MODE 的值为 standalone,表示以独立模式运行 Nacos。

-e SPRING_DATASOURCE_PLATFORM=mysql: 设置环境变量 SPRING_DATASOURCE_PLATFORM 的值为 mysql,指定 Nacos 使用 MySQL 数据库作为存储后端。

-e MYSQL_SERVICE_HOST=172.17.0.2: 设置环境变量 MYSQL_SERVICE_HOST 的值为 MySQL 服务的主机 IP 地址。

-e MYSQL_SERVICE_PORT=3306: 设置环境变量 MYSQL_SERVICE_PORT 的值为 MySQL 服务的端口号。

-e MYSQL_SERVICE_DB_NAME=nacos: 设置环境变量 MYSQL_SERVICE_DB_NAME 的值为 MySQL 数据库的名称,这里为 nacos

-e MYSQL_SERVICE_USER=root: 设置环境变量 MYSQL_SERVICE_USER 的值为 MySQL 连接的用户名,这里为 root

-e MYSQL_SERVICE_PASSWORD=123456: 设置环境变量 MYSQL_SERVICE_PASSWORD 的值为 MySQL 连接的密码,这里为 123456

-p 8848:8848: 将容器内部的 8848 端口映射到主机的 8848 端口,允许通过主机访问 Nacos。

--name nacos: 为容器指定一个名称,这里为 nacos

--restart=always: 设置容器总是在停止时自动重启。

nacos/nacos-server: 指定要运行的 Docker 镜像,这里是 Nacos 官方提供的 nacos-server 镜像。

这个命令的目的是在 Docker 中启动一个 Nacos 服务,配置使用 MySQL 数据库作为后端存储,并且在容器内部的 8848 端口上提供服务

docker run -itd \
-e PREFER_HOST_MODE=ip \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=172.17.0.2 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
-p 8848:8848 \
--name nacos \
--restart=always \
nacos/nacos-server

拉取镜像后我们需要开放8848端口,并刷新防火墙规则

开放端口

firewall-cmd --zone=public --add-port=8080/tcp --permanent 

 刷新防火墙规则

firewall-cmd --reload

同时我们可以通过查看防火墙开放端口列表是否开启

查看防火墙开放端口列表

firewall-cmd --zone=public --list-ports

当我们进入到nacos内网控制台说明NACOS创建成功了

 

二.Nacos集群部署

对比上面我们使用的是独立模式(standalone),当我们需要将独立模式改成集群模式时,要将环境遍历MODE设置为cluster

1.搭建集群

docker network create --subnet=172.20.0.1/16 my_net

为原有Mysql容器再连接一个网络

my_net为自定义网络名 m1为容器名

docker network connect my_net m1

当我们为m1连接上网络后,它不仅拥有原有的网段还有刚刚连接的网段

 

创建集群部署容器 

docker run -itd \
-e PREFER_HOST_MODE=ip \
-e MODE=cluster\
-e NACOS_SERVERS="172.20.0.102:8848 172.20.0.103:8848" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=m1 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
-p 8848:8848 \
--name nacos2 \
--net my_net \
--ip 172.20.0.101 \
--restart=always \
nacos/nacos-server

为测试完成集群部署,我们只需要将容器名--name 容器名和网段ip进行修改,分别创建三台nacos

虽然我们的三台nacos搭建完成了,但是我们只有一个或者两个容器能运行,所以要完成多台同时运行,还是要借助nginx实现负载均衡

2.Nginx实现负载均衡

在我们的工作目录中创建Niginx目录及所需文件夹

mkdir -p nginx/{conf.d}
cd /nginx/conf.d

 新建default.conf 配置文件放在conf.d目录中

upstream nacosList {server nacos1:8848 weight=1;server nacos2:8848 weight=1;server nacos3:8848 weight=1;
}server {listen  80;server_name  www.ChatYULin.com;location / {root   /etc/nginx/html/;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}location /nacos {proxy_pass  http://nacosList;}location /nacos {rewrite ^/api/(.*)$ /$1 break;proxy_pass  http://tomcatList;proxy_redirect default;}}

 创建nginx容器

docker run -itd \
--name nginx \
-v /soft/nginx/conf.d:/etc/nginx/conf.d \
-p 80:80 \
--net my_net \
nginx

进入到我们本机的C:\Windows\System32\drivers\etc目录下

找到Host打开进行修改你要映射的域名

输入你的虚拟机IP以及域名

当我们创建并运行完nginx容器后利用可以使用自定义域名访问到说明我们的域名映射和nginx容器已完成

 

我们登录到nacos中,看到三台容器同时运行时就说明完成负载均衡了

 

报错解决 

这个报错解释为数据源配置出错,也就是我们在配置数据库时要与Nacos配置对应,多半存在与网段问题,我们可以通过命令查看nacos/mysql容器网段是否一致

docker inspect 容器名

Nacos网段必须要与Mysql网段一致

在我配置MySQL容器时因为没有去指定网段而是默认使用网桥模式,而我的Nacos容器指定网段为172.17.0.2,但是在这之前我还有一个容器占用了当前网段,所以我使用配置Nacos的网段为172.17.0.3配置信息不一致,导致我的Nacos配置的数据源一直是之前的MySQL容器所以一直报错

解决措施

解决思路:两者要在同一个网段

1.自定义网络为MySQL容器指定网段

2.为Nacos容器指定网段

3.像nacos集群一样创建自定义网络然后连接MySQL容器

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

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

相关文章

【自动化测试】看完这篇文章,让你了解到你和大厂的差距到底在哪儿

🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 &#x1…

sc.pl.umap 画feature plot

今天有时间尝试测试了这个scanpy的feature plot,其实很简单,就是使用 sc.pl.umap(adata,color"gene name"), 但是这个地方就有一个问题,这个画出来的值是原始的基因值还是scale之后的,这个我得搞清楚 首先看使用例子,参…

企业为什么需要选择软件测试外包公司?有哪些查找途径?

软件测试外包公司是专门为软件企业提供软件测试服务的机构。这些公司拥有一支经验丰富、专业化的软件测试团队,能够帮助企业进行软件产品的测试、评估和质量保证。 一、企业为什么需要选择软件测试外包公司?   1.专业的测试团队:外包公司拥有经验丰富…

赤藓糖醇行业研究:预计2029年将达到3.5亿美元

赤藓糖醇是一种四碳糖醇,存在于多种食物中,如葡萄、梨、西瓜等,可由微生物发酵法和化学合成法两种方法制备,目前商业化生产中均采用微生物发酵法。赤藓糖醇由葡萄糖发酵制作而成,上游原料主要包括葡萄糖、玉米淀粉糖和…

C++(13)——string

上篇文章中介绍了中部分函数的用法,本篇文章将继续对其他的函数进行介绍: 1. substr: string substr (size_t pos 0, size_t len npos) const; 函数的两个参数如上述代码所示,此函数的主要作用是根据一个已有的的对象的起始坐标开始&a…

STM32---基本定时器(含源码)小白可入

写在前面:定时器是STM32中一个十分重要的外设,并且在STM32中具有多个定时器。定时器的包括基本定时器、通用定时器以及高级控制定时器,这些定时器相关独立,不共享任何资源。当然,其难易程度也是逐渐增加的,…

如何实现固定公网地址远程访问本地部署的Termux MySQL数据库

文章目录 前言1.安装MariaDB2.安装cpolar内网穿透工具3. 创建安全隧道映射mysql4. 公网远程连接5. 固定远程连接地址 前言 Android作为移动设备,尽管最初并非设计为服务器,但是随着技术的进步我们可以将Android配置为生产力工具,变成一个随身…

postman测试文件上传接口设置说明

Postman介绍及下载链接地址 Download Postman | Get Started for Free 打开postman 选择POST方法,然后设置goform 设置Header参数 设置Body参数,选择数据form-data 添加文件, 选择为文件属性 添加需要上传的文件

MySql三方工具

Yearning 1.1.1 Yearning简介 Yearning 开源的MySQL SQL语句审核平台,提供数据库字典查询,查询审计,SQL审核等多种功能。 Yearning 1.x 版本需Inception提供SQL审核及回滚功能。 Inception是集审核,执行,回滚于一体的…

封装日期时间组件

概述 该组件包含日期选择&#xff0c;任意时间选择、固定时间点选择。 子组件代码(date-picker.vue) <template><div id"date_picker"><el-popover placement"top" width"322" trigger"click" ref"popover&quo…

照片修复可以用哪些工具?分享3款实用的!

展给了我们重新唤醒这些记忆的可能。现在&#xff0c;有许多工具可以帮助我们修复这些珍贵的照片&#xff0c;让它们重新焕发生机。那么&#xff0c;有哪些工具可以做到这一点呢&#xff1f;接下来&#xff0c;让我们一起来看看吧&#xff01; 一、智能修复软件 现在市面上有许…

vue2嵌入高德地图选择地址后显示地址和经纬度

以高德地图为里&#xff0c;申请key&#xff0c;选择js api服务&#xff0c;获取key和密钥. vue2项目代码引入相关依赖&#xff1a; npm i amap/amap-jsapi-loader -S 封装成组件: <template><div><el-row :gutter"15" class""><…

C++设计模式(李建忠)笔记2

C设计模式&#xff08;李建忠&#xff09; 本文是学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。 参考链接 Youtube: C设计模式 Gtihub源码与PPT&#xff1a;https://github.com/ZachL1/Bilibili-plus 豆瓣: 设计模式–可复用面向对象软件的基础 文章目录 C设计模…

C#,入门教程(19)——循环语句(for,while,foreach)的基础知识

上一篇&#xff1a; C#&#xff0c;入门教程(18)——分支语句&#xff08;switch-case&#xff09;的基础知识https://blog.csdn.net/beijinghorn/article/details/124039953 一、for循环 当老师进入教室&#xff0c;从门口开始分别按行、列点名&#xff0c;看看哪位翘课&…

sqlilabs第五十三五十四关

Less-53(GET - GET - Error based - ORDER BY CLAUSE-String- Stacked injection) 手工注入 单引号闭合&#xff0c;和上一关一样堆叠注入解决 自动注入 和上一关一样 Less-54(GET - challenge - Union- 10 queries allowed -Variation 1) 手工注入 这一关开始后面的可以看…

Docker安全基线检查需要修复的一些问题

一、可能出现的漏洞 限制容器之间的网络流量 限制容器的内存使用量 为Docker启用内容信任 将容器的根文件系统挂载为只读 审核Docker文件和目录 默认情况下&#xff0c;同一主机上的容器之间允许所有网络通信。 如果不需要&#xff0c;请限制所有容器间的通信。 将需要相互通…

IMX6LL|时钟控制

一.时钟控制模块 4个层次配置芯片时钟 晶振时钟PLL与PFD时钟PLL选择时钟根时钟/外设时钟 1.1晶振时钟 系统时钟来源 RTC时钟源&#xff1a;32.768KHz&#xff0c;连接RTC模块&#xff0c;进行时间计算。系统时钟&#xff1a;24MHz&#xff0c;芯片主晶振 1.2PLL和PFD倍频时钟…

Jenkins-Pipeline

Pipeline 1 安装插件 2 新建一个 Pipline 工程 3 配置Pipeline 脚本 agent的使用可以参考这个文档 pipeline {agent anystages {stage(Build) { steps {echo Building project...}}stage(Test) { steps {echo Testing project...}}stage(Deploy) { steps {echo Deploying …

Go新项目-Gin中wire的依赖注入方式实战(6)

选型Go项目过程中&#xff0c;针对依赖注入方式的分析和使用 参考资料 https://go.dev/blog/wirehttps://medium.com/dche423/master-wire-cn-d57de86caa1bhttps://toutiao.io/posts/et0t2lk/previewhttps://imlht.com/archives/223/https://lailin.xyz/post/go-training-week…

即将被AI取代的工作

这个博客 100% 是由人类而不是机器人撰写的。至少在某种程度上&#xff0c;目前仍然需要内容作家。 你的工作怎么样&#xff1f;您是否想过人工智能&#xff08;AI&#xff09;是否有可能渗透到您生活的无形本质&#xff1f;您花费数年时间获得的所有知识、技能和经验是否会因…