【Docker】安装 Nacos容器并根据Nginx实现负载均衡

🎉🎉欢迎来到我的CSDN主页!🎉🎉

🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚

🌟推荐给大家我的专栏《Docker实战》。🎯🎯

👉点击这里,就可以查看我的主页啦!👇👇

Java方文山的个人主页

🎁如果感觉还不错的话请给我点赞吧!🎁🎁

💖期待你的加入,一起学习,一起进步!💖💖

请添加图片描述

目录

前言

一、Nacos单机模式

1、MySQL容器安装

1.1.创建mysql需要的挂载目录

1.2.创建并运行mysql容器

1.3.创建远程连接用户并执行sql脚本

2、Nacos容器安装

2.1.创建Nacos并启动

2.2.开放防火墙端口

2.3.查看数据库有无数据 

二、Nacos集群配置

1.创建集群Nacos

2.负载均衡Nacos 


前言

安装之前我们需要准备一个mysql,当前安装方式是将数据持久化到数据库中的,这里的部署先是单机模式后面再讲集群模式

一、Nacos单机模式

1、MySQL容器安装

1.1.创建mysql需要的挂载目录

拉取mysql

docker pull mysql:5.7

mysql需要一个my.cnf的配置文件,目前我们还没有所以需要在宿主机上创建一个将该文件放入到目录中并且将我们的sql脚本放入到script文件中

mkdir  -p /mysql/{conf,data,script}

将我们的my.cnf文件放入到conf文件夹下,将sql脚本放入到script文件夹下

1.2.创建并运行mysql容器

为了让我们的容器之间可以相互访问,所以我们创建一个网络

docker network create --subnet 172.18.0.0/16 --gateway 172.18.1.1 net

 现在创建容器就需要为它指定我们的自定义网络 

 docker run \--name m1 \-v /mysql/conf/my.cnf:/etc/my.cnf \-v /mysql/data:/var/lib/mysql \-v /mysql/script:/script \--privileged=true \-e MYSQL_ROOT_PASSWORD=123456 \--net net \--ip 172.18.0.1 \-d mysql/mysql-server:5.7

1.3.创建远程连接用户并执行sql脚本

进入我们的mysql容器进行登录

docker exec -it m1 bashmysql -uroot -p

创建所需的数据库或者使用远程工具连接创建一下也可以,我这里就一张表就不那么麻烦了

create database nacos;

因为前面做了目录挂载所以容器也会有这个脚本,切换到刚创建的数据库中执行sql

use nacos;source /script/nacos-mysql.sql;

现在查看一下就会有很多的数据表了

最后我们现在需要一个账户进行远程连接所以创建一个账户并赋予权限

grant all on *.* to root@'%' identified by '密码'

没有问题退出后记得重启一下docker restart m1 

 

2、Nacos容器安装

2.1.创建Nacos并启动

 首先我们需要拉取一个Nacos的镜像

docker pull nacos/nacos-server

运行并启动Nacos

docker run -itd \
-e PREFER_HOST_MODE=ip \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=172.18.0.1 \
-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 \
--net net \
--ip 172.18.0.2 \
nacos/nacos-server

 注意:这里的MYSQL打头的配置都是填写我们刚刚m1容器的信息 

2.2.开放防火墙端口

①开放端口

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

 ②刷新防火墙

firewall-cmd --reload

2.3.查看数据库有无数据 

首先在浏览器访问一下我们的Nacos,查看是否可以访问

 如果可以访问再查看相应的数据库,现在是没有数据的

我们在nacos配置中心随便创作一个数据再来查看一下就会有数据了,说明我们的nacos已经完全生效了。

二、Nacos集群配置

先将我们刚刚所创建的nacos容器给删除掉

docker rm -f nacos

1.创建集群Nacos

docker run -itd \
-e PREFER_HOST_MODE=ip \
-e MODE=cluster \
-e NACOS_SERVERS="172.18.0.3:8848 172.18.0.4:8848" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=172.18.0.1 \
-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 nacos01 \
--restart=always \
--net net \
--ip 172.18.0.2 \
nacos/nacos-server

 指定Nacos为集群模式cluster并设置除自己以外的Nacos地址

这时候我们访问nacos可以看到这里的模式也变成了cluster

 现在我们将剩下的两台nacos容器搞出来

docker run -itd \
-e PREFER_HOST_MODE=ip \
-e MODE=cluster \
-e NACOS_SERVERS="172.18.0.2:8848 172.18.0.4:8848" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=172.18.0.1 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
--name nacos02 \
--restart=always \
--net net \
--ip 172.18.0.3 \
nacos/nacos-server
docker run -itd \
-e PREFER_HOST_MODE=ip \
-e MODE=cluster \
-e NACOS_SERVERS="172.18.0.2:8848 172.18.0.3:8848" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=172.18.0.1 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
--name nacos03 \
--restart=always \
--net net \
--ip 172.18.0.4 \
nacos/nacos-server

看似我有三台nacos容器实际上我们只有一台,因为只有一台进行了端口映射 

2.负载均衡Nacos 

创建nginx的配置文件目录并将配置文件放入

 mkdir -p  /soft/nginx/conf.d

 

upstream nacosList {server nacos01:8848 weight=1;server nacos02:8848 weight=2;server nacos03:8848 weight=2;
}server {listen  80;server_name  www.zkingedu.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;}}

 创建nginx容器

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

 现在我们访问一下看看

可以看到我们去掉了端口号8848,证明我们现在是通过nginx负载均衡进行访问的 

请添加图片描述

到这里我的分享就结束了,欢迎到评论区探讨交流!!

💖如果觉得有用的话还请点个赞吧 💖

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

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

相关文章

Template -- React

React 版本 Node 21.6.0Npm 10.2.4 项目 创建 npm init vite 项目名称reactjsnpm inpm run dev 依赖 npm i axios # 网络 npm i antd --save # UI npm i ant-design/icons npm i react-router-dom # 路由npm i sass -D # …

什么是技术架构?架构和框架之间的区别是什么?怎样去做好架构设计?(一)

什么是技术架构?架构和框架之间的区别是什么?怎样去做好架构设计?(一)。 在软件行业,对于什么是架构,都有很多的争论,每个人都有自己的理解。在不同的书籍上, 不同的作者, 对于架构的定义也不统一, 角度不同, 定义不同。 一、架构是什么 Linux 有架构,MySQL 有架构,J…

漏洞检测和评估【网站子域扫描工具02】

上一篇:爬取目标网站的域名和子域名【网站子域扫描工具01】 在Python中,有一些流行的漏洞扫描库可以对子域进行漏洞扫描和评估,比如Nmap、Sublist3r等。 1.端口扫描 以下是一个简单的示例代码,展示了如何使用Nmap进行基本的端口扫…

由于找不到d3dcompiler_43.dll缺失,无法打开软件的解决方法分享

d3dcompiler43.dll是什么文件?为什么会出现丢失的情况?又该如何解决呢?本文将详细介绍d3dcompiler43.dll的作用和影响,并提供6个有效的解决方法。 一、d3dcompiler43.dll是什么文件? d3dcompiler43.dll是DirectX SDK…

OSPF协议

OSPF:开放式最短路径优先协议 无类别链路状态型路由协议;组播更新224.0.0.5、224.0.0.6支持等开销负载均衡; 链路状态协议,邻居间共享拓扑,优势在于防环和选路,缺点为更新量和计算量很大; 故OSPF为了能够…

Windows 下使用C#开启蓝牙(未解决的坑)

需求 当程序检测到蓝牙未打开时需要程序自动将W10的蓝牙开启。 资料 Turn on/off Bluetooth radio/adapter from cmd/powershell in Windows 10 - Super User 上的这个连接是通过powershell 开启蓝牙具体代码如下 [CmdletBinding()] Param ([Parameter(Mandatory$true)][V…

python脚本多个文件夹下多个文件中sql语句片段比对

一、需求: 日常测试授权脚本,需要检查多个行业文件夹下单独的授权脚本和汇总授权脚本,一个文件根目录下有多个子文件夹,子文件夹下有多个sql文件,人为比对较为耗时。 需要实现在文件中找到某个sql语句片段,然后遍历比对此sql语句片段在各目录各文件中是否一致。 二、思路…

MySQL入门篇:事物操作(开启事物,提交事物,回滚事物),事物四大特性(ACID),并发事物问题(脏读,不可重复读,幻读),事物隔离级别

目录 1.事物简介2.事物操作1.查看/设置事物提交方式(方式1)2.开启事物(方式2)3.提交事物4.回滚事物 3.事物四大特性(ACID)1.原子性(Atomicity)2.一致性(Consistency)3.隔离性(lsolation)4.持久性…

MyBatisPlus学习笔记四-扩展功能

1、代码生成器 1.1、官方的1 1.3、官方的2-idea插件 1.3、非官方的-idea插件 2、静态工具 先查询,再分组 3、逻辑删除 4、枚举处理器 5、JSON处理器

使用mininet快速入门ONOS路由交换技术与原理

在SDN下路由交换与传统硬件集成方式的路由交换技术有许多相似之处。其中一个比较重要的点是传统交换机中ASIC (Application Specific Integrated Circuit,专用集成电路)决定了其数据平面所支持的功能,而在SDN中,实现了控制面与数据面的分离。…

UI学习-入门

教程:零基础学UI设计,应该先从哪些设计软件入手?【酸梅干超人出品】 一 软件 云端协作工具:即时设计、figma 原型设计:protopie 平面设计: PS 即时设计可设置动态交互、可设置样机。该平台教学方便做的…

selenium上传单个文件及上传多个文件

单个文件 直接传入文件路径 element driver.find_element_by_xpath(//input[type"file"]) element.send_keys(/home/data/download/test.png)多个文件 使用 \n 或者 \t\n 分割文件路径 element driver.find_element_by_xpath(//input[type"file"]) e…

数组练习 Leetcode 566.重塑矩阵

在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。 给你一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 r 和 c &#…

第五天业务题

5-1 你们项目中签到为什么要使用bitmap bitmap是Redis中的String类型里的一种类型,存储数据是以二进制(bit位)为单位进行存储的。在处理大量数据统计和判断时,只占用非常小的一部分内存,且计算速度非常高效。 在项目中…

网络工程师:数据库基础知识面试题(八)

84.数据库技术是什么?主流的数据库管理系统软件有哪些? 数据库技术是指用于存储、管理和操作大量结构化数据的技术。它涉及数据库的设计、建模、查询语言、事务处理、数据安全性、性能优化等方面。 主流的数据库管理系统(DBMS)软件有以下几…

貌似起名可以用这个

貌似起名可以用这个 很多变量或者函数起名字都会移除元音字符,可以考虑使用tr的-d参数,如下: $ echo "Hello World, Welcome to Linux!" | tr -d a,o,e,i Hll Wrld Wlcm t Lnux!不过感觉删除的多了,也不一定是好事。。…

《设计模式的艺术》笔记 - 原型模式

介绍 使用原型实例指定创建对象的种类&#xff0c;并且通过克隆这些原型创建新的对象。原型模式是一种对象创建型模式。 实现 myclass.h // // Created by yuwp on 2024/1/12. //#ifndef DESIGNPATTERNS_MYCLASS_H #define DESIGNPATTERNS_MYCLASS_H#include <iostream&g…

Day32- 贪心算法part06

一、单调递增的数字 题目一&#xff1a;738. 单调递增的数字 738. 单调递增的数字 当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。 给定一个整数 n &#xff0c;返回 小于或等于 n 的最大数字&#xff0c;且数字呈 单调递…

k8s---ingress对外服务(ingress-controller)

ingress 概念 k8s的对外服务&#xff0c;ingress service作用现在两个方面&#xff1a; 1、集群内部&#xff1a;不断跟踪的变化&#xff0c;更新endpoint中的pod对象&#xff0c;基于pod的ip地址不断变化的一种服务发现机制。 2、集群外部&#xff1a;类似于负载均衡器&a…

进阶Docker3:Dokerfile构建镜像

目录 Dockerfile 构建基础镜像 基本机构 命令&#xff1a; 命令解释&#xff1a; 准备工作 创建镜像 上传镜像 Dockerfile Dockerfile 是一个文本格式的配置文件&#xff0c; 用户可以使用 Dockerfile 来快速创建自定义的镜像&#xff0c;另外&#xff0c;使 用Docke…