Nacos部署(四)Docker部署Nacos2.3.x集群环境

😊 @ 作者: 一恍过去
💖 @ 主页: https://blog.csdn.net/zhuocailing3390
🎊 @ 社区: Java技术栈交流
🎉 @ 主题: Nacos部署(四)Docker部署Nacos2.3.x集群环境
⏱️ @ 创作时间: 2024年03月24日

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/d31c2418db7d48d587b35f735bfd3db0.png#pic_center)

《Linux部署Nacos-2.3.x单机环境》
《Linux部署Nacos-2.3.x集群环境》
《Docker部署Nacos-2.3.x单机环境》

目录

  • 1、拉取镜像
  • 2、配置mysql环境
  • 3、方式一:启动集群容器(无需挂载配置)-不推荐
  • 4、方式二:挂载启动集群(推荐)
    • 4.1 创建挂载目录
    • 4.2 拷贝容器目录
    • 4.3 配置application.properties
    • 4.4 配置cluster.conf
    • 4.5 配置docker-startup.sh
    • 4.6 挂载启动容器
  • 4、配置nginx映射
  • 5、SpringCloud连接集群

1、拉取镜像

拉取时最好指定版本,在git查看相应版本: https://github.com/nacos-group/nacos-docker

拉取镜像:

docker pull  nacos/nacos-server:v2.3.0

2、配置mysql环境

  • 创建数据库,比如:nacos

  • 创建表:从github获取建表语句,地址:https://github.com/alibaba/nacos/blob/master/distribution/conf/mysql-schema.sql

  • 效果:
    在这里插入图片描述

3、方式一:启动集群容器(无需挂载配置)-不推荐

该方式会导致容器运行后修改启动参数比较麻烦,并且还需要重启docker服务代价较高,需要修改config.v2.json文件,参考:《Docker修改启动参数》

如果服务器配置有可能发生改变,不推荐该方式
启动命令如下:

docker  run \
# nacos名称,分为nacos-server-1[2、3]
--name nacos-server-1[2、3] -d \
--privileged=true \
--restart=always \
# 启动nacos-server-1时,配置第一个节点的端口
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
# 启动nacos-server-2时,配置第二个节点的端口
#-p 8858:8848 \
#-p 9858:9848 \
#-p 9859:9849 \
# 启动nacos-server-3时,配置第三个节点的端口
#-p 8858:8848 \
#-p 9858:9848 \
#-p 9859:9849 \
-e MODE=cluster \
-e PREFER_HOST_MODE=hostname \
# 当前机器IP
-e NACOS_SERVER_IP=192.168.1.111 \
# nacos集群节点
-e NACOS_SERVERS=192.168.1.111:8848,192.168.1.111:8858,192.168.1.111:8868
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=192.168.1.100 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=nacos \
-e MYSQL_SERVICE_PASSWORD=nacos \
-e JVM_XMS=256m \
-e JVM_XMX=256m \	
nacos/nacos-server:v2.3.0

4、方式二:挂载启动集群(推荐)

配置nacos集群,至少需要三个节点节点及端口分为:nacos1(8848、9848、9849)、nacos2(8858、9858、9859)、nacos3(8868、9868、9869)
由于服务器有限,都在同一台机器上搭建集群;如果有足够的资源,只需要按照下面搭建的流程,修改相应机器IP即可。

服务器分布情况:

地址端口说明
192.168.0.1118848、9848、9849第一个Nacos节点
192.168.0.1118858、9858、9859第二个Nacos节点
192.168.0.1118868、9868、9869第三个Nacos节点
192.168.0.2003306mysq服务

4.1 创建挂载目录

创建nacos1、nacos2、nacos3来区分三个服务:

mkdir -p /root/docker/cloud/nacos-cluster/nacos1[2、3]

4.2 拷贝容器目录

先不进行任何配置,直接启动一个nacos容器,然后将容器中的data、conf、log、bin拷贝到/root/docker/cloud/nacos1[2、3]目录下。==

直接启动:

docker run --name nacos-server -d nacos/nacos-server:v2.3.0

拷贝目录:

docker cp nacos-server:/home/nacos/conf /root/docker/cloud/nacos-cluster/nacos1[2、3]/
docker cp nacos-server:/home/nacos/logs /root/docker/cloud/nacos-cluster/nacos1[2、3]/
docker cp nacos-server:/home/nacos/bin  /root/docker/cloud/nacos-cluster/nacos1[2、3]/
docker cp nacos-server:/home/nacos/data /root/docker/cloud/nacos-cluster/nacos1[2、3]/

删除容器:

docker stop nacos-server
docker rm nacos-server

目的是:为了进行挂载启动,以后修改配置文件、查看日志时更加方便。

4.3 配置application.properties

分别修改nacos1、nacos2、nacos3的application.properties文件中,我们直接将原有采用环境变量方式的配置根据实际情况进行修改。

修改:

vim /root/docker/cloud/nacos-cluster/nacos1[2、3]/conf/application.properties

修改内容如下:

# 端口
server.port=8848[8858、8868]
spring.datasource.platform=mysql
# 数据库数量,如果mysql配置了主从就设置为 2
db.num=1
# mysql连接
db.url.0=jdbc:mysql://192.168.0.200:3306/db-nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
# 如果db.num=1,则将db.url.1屏蔽;反之则配置db.url.1
#db.url.1=
# mysql用户名
db.user=root
# mysql密码
db.password=123456

### 开启登录验证
nacos.core.auth.enabled=true
nacos.core.auth.server.identity.key=serverIdentity
nacos.core.auth.server.identity.value=security
# 自定义指定生成JWT的密钥,使用BASE64进行编码,编码前的key长度必须不小于32个字符
nacos.core.auth.plugin.nacos.token.secret.key=

nacos.core.auth.plugin.nacos.token.secret.key生成步骤:
1、使用openssl rand -hex 32获取密钥值
在这里插入图片描述
2、将密钥值再进行base编码
访问:https://base64.us/,输入密钥进行base64编码
在这里插入图片描述

4.4 配置cluster.conf

分别修改nacos1、nacos2、nacos3的cluster.conf文件,配置nacos集群中的所有节点。

修改:

# 分别进入到nacos1、nacos2、nacos3的配置目录
vim /root/docker/cloud/nacos-cluster/nacos1[2、3]/conf/cluster.conf

修改内容如下:

# nacos1、nacos2、nacos3配置内容均如下,每个nacos均要配置集群中的所有节点[至少3个]
192.168.0.111:8848
192.168.0.111:8858
192.168.0.111:8868

4.5 配置docker-startup.sh

分别修改nacos1、nacos2、nacos3的startup.sh文件,主要配置JVM参数以及屏蔽cluster.conf文件写入。

修改:

vim /root/docker/cloud/nacos-cluster/nacos1[2、3]/bin/docker-startup.sh

屏蔽cluster.conf文件写入:

# 1、注释print_servers方法中的 echo "" >"$CLUSTER_CONF"
# 2、修改遍历方式为`cat ../conf/cluster.conf`
# 3、修改后,结果如下:
function print_servers() {
  if [[ ! -d "${PLUGINS_DIR}" ]]; then
    # echo "" >"$CLUSTER_CONF"
    for server in `cat ../conf/cluster.conf`; do
      echo "$server" >>"$CLUSTER_CONF"
    done
  else
    bash $PLUGINS_DIR/plugin.sh
    sleep 30
  fi
}
  • 为什么屏蔽echo “” >“$CLUSTER_CONF”?
    因为我们自己定了cluster.conf,不屏蔽的话,会导致cluster.conf中的内容被置为空。
  • cat …/conf/cluster.conf 的目的?
    目的是为了打印出cluster.conf中配置的节点,方便排查错误以及验证是否配置成功。
    在这里插入图片描述
    配置JVM:
# 根据当前服务器的配置修改JVM大小,比如:修改为`1G`或者更大或者更小。
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

在这里插入图片描述

4.6 挂载启动容器

注意:如果是资源有限,在同一台机器上部署的话,注意修改不同节点的挂载目录。

第一个节点:

docker  run \
--name nacos-server-1 -d \
--privileged=true \
--restart=always \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
-e MODE=cluster \
-e PREFER_HOST_MODE=hostname \
-e NACOS_SERVER_IP=192.168.0.111
-v /root/docker/cloud/nacos-cluster/nacos1/logs:/home/nacos/logs \
-v /root/docker/cloud/nacos-cluster/nacos1/data:/home/nacos/data \
-v /root/docker/cloud/nacos-cluster/nacos1/conf:/home/nacos/conf \
-v /root/docker/cloud/nacos-cluster/nacos1/bin:/home/nacos/bin \
nacos/nacos-server:v2.3.0

第二个节点:

docker  run \
--name nacos-server-2 -d \
--privileged=true \
--restart=always \
-p 8858:8858 \
-p 9858:9858 \
-p 9859:9859 \
-e MODE=cluster \
-e PREFER_HOST_MODE=hostname \
-e NACOS_SERVER_IP=192.168.0.111
-v /root/docker/cloud/nacos-cluster/nacos2/logs:/home/nacos/logs \
-v /root/docker/cloud/nacos-cluster/nacos2/data:/home/nacos/data \
-v /root/docker/cloud/nacos-cluster/nacos2/conf:/home/nacos/conf \
-v /root/docker/cloud/nacos-cluster/nacos2/bin:/home/nacos/bin \
nacos/nacos-server:v2.3.0

第三个节点:

docker  run \
--name nacos-server-3 -d \
--privileged=true \
--restart=always \
-p 8868:8868 \
-p 9868:9868 \
-p 9869:9869 \
-e MODE=cluster \
-e PREFER_HOST_MODE=hostname \
-e NACOS_SERVER_IP=192.168.0.111
-v /root/docker/cloud/nacos-cluster/nacos3/logs:/home/nacos/logs \
-v /root/docker/cloud/nacos-cluster/nacos3/data:/home/nacos/data \
-v /root/docker/cloud/nacos-cluster/nacos3/conf:/home/nacos/conf \
-v /root/docker/cloud/nacos-cluster/nacos3/bin:/home/nacos/bin \
nacos/nacos-server:v2.3.0

成功启动任何一个节点:

启动日志:
在这里插入图片描述
登录测试:

通过:http://192.168.0.111:8848/nacos,成功访问nacos则表示搭建成功。
默认账户:nacos
默认密码:nacos,为了安全在第一次进入到nacos以后最好修改一次密码。
在这里插入图片描述
控制台节点信息:
在这里插入图片描述

成功启动所有节点:
在这里插入图片描述
集群搭建成功后,数据会进行同步;访问任意一个节点,都可以看到所有的服务列表、配置列表等数据

4、配置nginx映射

由于是集群配置,存在多个服务端控制台,我们可以通过任意一个控制台看到所有节点信息,为了减少节点的访问量,想要访问不同的节点需要输入不同的ip:port

通过nginx做负载均衡,向外暴漏一个统一的地址,目的有两个:

  • 为了单个节点的减轻压力和方便操作
  • 在SpringCloud整合,server-addr配置一个统一的入口路径

ngxin配置内容如下:

  ....
  ....
  upstream nacos-proxy {
     server 111.229.160.175:8848 weight=1;
     server 111.229.160.175:8858 weight=1;
     server 111.229.160.175:8868 weight=1;
  }

  server {
	....
	location /nacos {
          proxy_pass         http://nacos-proxy;
      	  port_in_redirect   on;
      	  proxy_redirect     off;    
          proxy_set_header   Host             $host;  
          proxy_set_header   X-Real-IP        $remote_addr;
          proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
          proxy_set_header   Upgrade $http_upgrade;
          proxy_set_header   Connection "upgrade";
   	}
   ....
   }

效果:
在这里插入图片描述

5、SpringCloud连接集群

spring:
  cloud:
    nacos:
      discovery: 
      	#连接nacos集群前,配置好nginx负载均衡,直接连接nginx的ip+port即可,80端口可以忽略
        server-addr: 192.168.1.111
        ......

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

adams卸载与安装

adams 卸载后重新安装lnstaller could not read the log directory of the existing installerto backup and restore.Installer will now exit. ADAMS软件卸载安装【adams吧】_百度贴吧 (baidu.com)

阿里云OSS存储的视频如何加水印

OSS是不能进行视频添加水印的,可以图片添加水印。 您可以在视频点播中进行配置: https://help.aliyun.com/zh/vod/user-guide/video-watermarks?spma2c4g.11186623.0.i2 原来的业务代码都是使用python 对oss的 视频进行上传 的,上传的视频路径已经保存到…

提高效率与寿命:坚持正确的码垛机器人操作流程

在工业生产中,码垛机器人以其提升效率、减少损耗、降低成本等优势,成为众多行业不可或缺的重要设备。然而,与所有精密机械一样,码垛机器人的使用寿命很大程度上取决于正确的操作流程。科学规范的操作不仅保障生产顺利进行&#xf…

关于 Microsoft Visual Studio

关于 Microsoft Visual Studio References References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

EPO企业生产运营数智化平台助力制造企业迈向智能制造

随着“中国制造2025”和工业4.0的不断推进,越来越多的制造企业准备迈入智能制造和智慧制造领域,实现数智化管理。企业通过搭建EPO企业生产运营平台,结合自身业务现状和数字化需求,从各个业务场景、部门人员、产品组成等方面进行分…

XSS一-WEB攻防-XSS跨站反射型存储型DOM型标签闭合输入输出JS代码解析

演示案例: XSS跨站-输入输出-原理&分类&闭合XSS跨站-分类测试-反射&存储&DOM #XSS跨站-输入输出-原理&分类&闭合 漏洞原理:接受输入数据,输出显示数据后解析执行 基础类型:反射(非持续),存储(…

内网渗透(二)必须了解Windows域环境

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将信息做其他用途,由Ta承担全部法律及连带责任,文章作者不承担任何法律及连带责任。 1、Windows域环境简介 Windows域是计算机网络的一种形式…

鸿蒙一次开发,多端部署(十二)资源使用

在页面开发过程中,经常需要用到颜色、字体、间距、图片等资源,在不同的设备或配置中,这些资源的值可能不同。有两种方式处理: 应用资源:借助资源文件能力,开发者在应用中自定义资源,自行管理这些…

知识管理入门:轻松选择合适的知识管理软件

你是不是经常觉得自己的大脑像个杂乱的仓库,各种信息、知识和想法在里面乱窜,找不到头绪?别担心,知识管理软件来帮你解决这个问题啦!今天,我们就来聊聊知识管理软件这个神奇的工具,新手也能轻松…

MongoDB知识

1、部署MongoDB (1)new好一个mongo文件之后执行 (出现mongodb.key)记得放行端口 openssl rand -base64 666 > mongodb.key (2)放到一个docker-compose.yml之后docker-compose up -d执行 version: 3.…

网络安全实训Day11

写在前面 IPSec来喽。有时候把xmind直接粘贴过来会有顺序错位的情况,又被气晕 网络安全实训-网络安全技术 IPSec VPN IPSec 用于保障IP协议安全性的技术 相关概念 工作模式 传输模式:只对数据提供安全保护,不封装公网头部 隧道模式&#…

leetcode 239.滑动窗口最大值

题目 思路 这是单调队列的经典题目。 最基本思路就是(拿窗口大小为3说明): 从队列中已经有三个元素开始。先要pop掉第一个元素,然后再push进新的元素,最后返回这三个元素中最大的那一个。 pop和push操作都很简单&a…

正弦实时数据库(SinRTDB)的部署架构

为了适应各种类型的项目需求,正弦实时数据库支持单机部署、双主高可用集群部署、混合部署模式,各部署模式的特点如下: 单机部署 应用于风力发电、光伏、火电 等厂、站级监控系统。支持组态、实时计算、报警服务、报表统计等业务。 双主高可…

jmeter断言使用方法

断言主流的有两种:响应断言、JSON断言 响应断言 1、http请求添加响应断言 2、三种作用域:第一种既作用主请求又作用子请求、只作用主请求、只作用子请求。我们默认选中间的仅作用主请求即可。 3、测试字段和匹配规则 测试字段一般选择响应文本即可&am…

由浅到深认识Java语言(11):封装

该文章Github地址:https://github.com/AntonyCheng/java-notes 在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址:https://blog.c…

mac vscode 命令行启动命令安装 别名设置方法

vscode 给我们提供了一个从命令行启动并打开vscode编辑器的shell脚本, 如 在vscode中打开当前文件夹,可以执行 code . 即可。 code命令安装方法: 打开vscode 使用 ctrl shift p 快捷键打开命令行窗口, 然后输入 shell comman…

人工智能之Tensorflow批标准化

批标准化(Batch Normalization,BN)是为了克服神经网络层数加深导致难以训练而诞生的。 随着神经网络的深度加深,训练会越来越困难,收敛速度会很慢,常常会导致梯度消失问题。梯度消失问题是在神经网络中,当前…

Redis的安装与启动

一、Linux环境安装&启动Redis 1. 安装步骤 第一步:在官网下载好Redis安装包,上传到Linux中并进行解压到相应(如/opt/software/)目录中;(注意:完成了第二步后,即安装了C/C语言…

【动态规划】Leetcode 746. 使用最小花费爬楼梯

【动态规划】Leetcode 746. 使用最小花费爬楼梯 解法 ---------------🎈🎈题目链接🎈🎈------------------- 解法 😒: 我的代码实现> 动规五部曲 ✒️确定dp数组以及下标的含义 dp[i] 表示跳跃到第 i 层&#x…

Ubuntu Desktop - Updates (不升级到新版本)

Ubuntu Desktop - Updates [不升级到新版本] 1. UpdatesReferences 1. Updates System Settings -> Software & Updates -> Updates ubuntu-16.04.3-desktop-amd64.iso 不升级到新版本 ​ References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/