Docker 单机/集群 部署 Nacos2.2.0

news2024/11/20 3:20:48

单机部署

1- 拉取镜像

docker pull nacos/nacos-server:v2.2.0

2- 准备挂载的配置文件目录和日志目录

  • 日志目录(空目录):./nacos/logs
  • 配置文件:./nacos/conf/application.properties

从官网下载 nacos 压缩包:Release 2.2.0 (Dec 14, 2022) · alibaba/nacos · GitHub,将得到的 application.properties 放到上一步的 ./nacos/conf 目录下,用于下一步的挂载。

a. 配置端口

b. 取消配置的注释并修改为自己的数据库配置

#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql

### Count of DB:
db.num=1

### Connect URL of DB:
db.url.0=jdbc:mysql://192.168.157.142:3306/nacos-220?characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=1234

3- 运行容器

docker run --name nacos-server \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
--privileged=true \
--restart=always \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-e MODE=standalone \
-e PREFER_HOST_MODE=hostname \
-v ./nacos/logs:/home/nacos/logs \
-v ./nacos/conf/application.properties:/home/nacos/conf/application.properties \
-d nacos/nacos-server:v2.2.0

集群部署

1- 准备三台主机,ip分别为

  • 192.168.3.211
  • 192.168.3.212
  • 192.168.3.213

2- 关闭防火墙(三台)

systemctl stop firewalld
systemctl disable firewalld

3- 禁用selinux(三台)

vim /etc/selinux/config
# 将 SELNINUX=enforcing 改为 disable
SELINUX=disable

Docker compose

编写docker-compose脚本文件

节点1(nacos-1)

目录结构

.
├── nacos-cluster
│   ├── logs
│   └── nacos-cluster-1.yml
└── nacos-mysql
    ├── data
    └── Dockerfile

1- Dockerfile

FROM mysql:8.0.28
ADD https://raw.githubusercontent.com/alibaba/nacos/develop/distribution/conf/mysql-schema.sql /docker-entrypoint-initdb.d/nacos-mysql.sql
RUN chown -R mysql:mysql /docker-entrypoint-initdb.d/nacos-mysql.sql
EXPOSE 3306

2- nacos-cluster-1.yml

version: "3.8"
services:
    nacos-1:
        container_name: nacos-1
        image: nacos/nacos-server:v2.2.0
        volumes:
            - ./logs:/home/nacos/logs
        ports:
            - "8848:8848"
            - "9848:9848"
            - "9849:9849"
        environment:
            MODE: cluster
            #NACOS_SERVER_IP: 192.168.3.211
            NACOS_SERVERS: 192.168.3.211:8848 192.168.3.212:8848 192.168.3.213:8848
            SPRING_DATASOURCE_PLATFORM: mysql
            MYSQL_SERVICE_HOST: 192.168.3.211
            MYSQL_SERVICE_PORT: 3306
            MYSQL_SERVICE_DB_NAME: nacos-220
            MYSQL_SERVICE_USER: root
            MYSQL_SERVICE_PASSWORD: 1234
            MYSQL_SERVICE_DB_PARAM: characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
            JVM_XMS: 256m
            JVM_XMX: 512m
            JVM_XMN: 256m
        depends_on:
            mysql:
                condition: service_healthy

    mysql:
        container_name: mysql
        build:
            context: ../nacos-mysql
            dockerfile: Dockerfile
        image: mysql:8.0.28
        privileged: true
        environment:
            MYSQL_ROOT_PASSWORD: 1234
            MYSQL_DATABASE: nacos-220
            #MYSQL_USER: baiye
            #MYSQL_PASSWORD: by1234
        volumes:
            - ../nacos-mysql/data:/var/lib/mysql
        ports:
            - "3306:3306"
        healthcheck:
            test: [ "CMD", "mysqladmin" ,"ping", "-h", "192.168.3.211" ]
            interval: 5s
            timeout: 10s
            retries: 10

3- 运行

docker-compose -f nacos-cluster-1.yml up -d

节点2(nacos-2)

目录结构

.
└── nacos-cluster
    ├── logs
    └── nacos-cluster-2.yml

1- nacos-cluster-2.yml

version: "3.8"
services:
    nacos-2:
        image: nacos/nacos-server:v2.2.0
        container_name: nacos-2
        volumes:
            - ./logs:/home/nacos/logs
        ports:
            - "8848:8848"
            - "9848:9848"
            - "9849:9849"
        environment:
            MODE: cluster
            #ACOS_SERVER_IP: 192.168.3.212
            NACOS_SERVERS: 192.168.3.211:8848 192.168.3.212:8848 192.168.3.213:8848
            SPRING_DATASOURCE_PLATFORM: mysql
            MYSQL_SERVICE_HOST: 192.168.3.211
            MYSQL_SERVICE_PORT: 3306
            MYSQL_SERVICE_DB_NAME: nacos-220
            MYSQL_SERVICE_USER: root
            MYSQL_SERVICE_PASSWORD: 1234
            MYSQL_SERVICE_DB_PARAM: characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
            JVM_XMS: 256m
            JVM_XMX: 512m
            JVM_XMN: 256m

节点3(nacos-3)

目录结构

.
└── nacos-cluster
    ├── logs
    └── nacos-cluster-3.yml

1- nacos-cluster-3.yml

version: "3.8"
services:
    nacos-3:
        image: nacos/nacos-server:v2.2.0
        container_name: nacos-3
        volumes:
            - ./logs:/home/nacos/logs
        ports:
            - "8848:8848"
            - "9848:9848"
            - "9849:9849"
        environment:
            MODE: cluster
            #NACOS_SERVER_IP: 192.168.3.213
            NACOS_SERVERS: 192.168.3.211:8848 192.168.3.212:8848 192.168.3.213:8848
            SPRING_DATASOURCE_PLATFORM: mysql
            MYSQL_SERVICE_HOST: 192.168.3.211
            MYSQL_SERVICE_PORT: 3306
            MYSQL_SERVICE_DB_NAME: nacos-220
            MYSQL_SERVICE_USER: root
            MYSQL_SERVICE_PASSWORD: 1234
            MYSQL_SERVICE_DB_PARAM: characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
            JVM_XMS: 256m
            JVM_XMX: 512m
            JVM_XMN: 256m

Docker run

将下面的命令**分别在三台主机上面运行(可修改 --name 的值便于区分不同节点)**即可到达和 docker compose 相同的效果,但是运行前需要先安装 mysql

docker run -it -d \
-e MODE=cluster \
-e NACOS_SERVERS="192.168.3.211:8848 192.168.3.212:8848 192.168.3.213:8848" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=192.168.3.211 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos-220 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=1234 \
-e MYSQL_SERVICE_DB_PARAM="characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true" \
-e JVM_XMS=256m \
-e JVM_XMX=512m \
-e JVM_XMN=256m \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
--name nacos-1 \
--restart=always \
nacos/nacos-server:v2.2.0

Nginx 配置

1- 拉取镜像

docker pull nginx

2- 准备需要挂载的文件

# 运行一个 nginx 镜像
docker run -it -d --name=temp -p 8080:80  nginx
# 拷贝文件到主机,用于后面的挂载
docker cp temp:/usr/share/nginx/html ./
docker cp temp:/etc/nginx ./

3- 编辑配置文件

vim ./nginx/nginx.conf

在 http 中添加 nacos 配置,具体参考图片

#下面是 Naocs 集群的配置
upstream nacoscluster {
    server 192.168.3.211:8848;
    server 192.168.3.212:8848;
    server 192.168.3.213:8848;
}
server {
    listen 8848; # 此处的 8848 可自定义
    server_name 192.168.3.208;
    location /nacos/ { 
        proxy_pass http://nacoscluster/nacos/;
    }
}

image-20230722105052093

在 http 上一行 添加 nacosGrpc 配置(Naocs 2.x 版本之前无需添加下面的配置),具体参考图片

# 下面是 Nacos 的集群的配置
stream {
    upstream nacosGrpc {
        server 192.168.3.211:9848;
        server 192.168.3.212:9848;
        server 192.168.3.213:9848;
    }
    server {
        listen 9848; # 此处的 9848 在自定义基础上加1000,即 8848 + 1000
        proxy_pass nacosGrpc;
    }
}

image-20230722105405026

4- 运行镜像

注意:此处一定要将 nacos 的访问端口暴露出去,我的访问端口是配置文件中自定义的 8848

docker run -it -d --name=nacos-nginx --restart=always -p 18008:80 -p 8848:8848 -v ./content:/usr/share/nginx/html -v  ./nginx:/etc/nginx nginx

成功访问

访问地址:http://192.168.3.208:8848/nacos/

image-20230722105757908

Nacos 报错总结

docker 启动 nacos 报错

报错信息:Error creating bean with name ‘memoryMonitor’ defined in URL [jar:file:/home/nacos/target/nacos-server

报错信息:ErrMsg:Nacos Server did not start because dumpservice bean construction failure :No DataSource set

image-20230708195035270

两种解决办法:

  1. nacos 启动失败,是因为 mysql 没有被唤醒,我们可以尝试用数据库连接工具连接 mysql ,从而唤醒mysql,最后重启 nacos 即可解决问题。

  2. 指定加载的先后顺序,只有当 mysql 健康后才开始运行 nacos,需要我们在 nacos 中添加下面的脚本

    healthcheck:
        test:  curl --fail http://192.168.3.220:18848/nacos/actuator/health || exit 1
        interval: 10s
        timeout: 5s
        retries: 3
    

推荐使用第二种解决办法,为 MySQL 进行检查,Nacos 只有在 MySQL 健康检查通过后才开始启动

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

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

相关文章

基于SpringBoot+vue的医院信管系统设计与实现(源码+LW+部署文档等)

博主介绍: 大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

TypeScript -- 基础类型

文章目录 TypeScript -- 基础类型let 和 const基本类型写法布尔类型 -- boolean数字类型 -- number字符串类型 -- string数组类型元组类型枚举类型 -- enum任意类型 -- any空值 -- voidNull 和 Undefined不存在的类型 -- never对象 -- object类型断言 TypeScript – 基础类型 1…

关于 ivanti Access Client软件配置问题

最近需要使用ivanti工具连接校园网,但是经常出现ivanti连接后,WIFI或有线网络就显示无互联网连接的情况。 为此,我检查了一下网络的配置状态,发现ivanti连接的时候回临时创建一个网络adapter,该adapter有 一个身份验证…

Java训练二

一、斐波那契数列 1、1、2、3、5、8、13、21、34、...是一组典型的斐波那契数列,前两个数相加等于第三个数。那么请问这组数中的第n个数的值是多少? package haha; import java.util.Scanner; public class helloworld{public static void main(String…

Python基础语法第四章之函数

目录 一、函数 1.1函数是什么 1.2语法格式 1.3函数参数 1.4函数返回值 1.5变量作用域 1.5.1变量只能在所在的函数内部生效. 1.5.2 在不同的作用域中, 允许存在同名的变量 1.5.3如果函数内部尝试访问的变量在局部不存在, 就会尝试去全局作用域中查找 1.5.4如果是想在函数…

头戴式玩具外贸出口EN71检测报告需要什么资料?

EN71是欧盟市场玩具类产品的规范标准。儿童是全社会最关心和爱护的群体,儿童普遍喜爱的玩具市场发展迅猛,同时各类玩具由于各方面质量问题给儿童带来的伤害也时有发生,因此世界各国对本国市场上的玩具的要求正日益变得严格。许多国家都就这些…

【C语言day06】

逻辑或运算如果前表达式为真,后表达式不计算,第一次循环时i为0,执行i,第二次循环时i为1,是个真值,不再执行i,也就死循环了 在C语言中,一个函数如果不写返回值类型,那么就…

2023年深圳杯数学建模B题电子资源版权保护问题

2023年深圳杯数学建模 B题 电子资源版权保护问题 原题再现: 版权又称著作权,包括发表权、署名权、修改权、保护作品完整权、复制权、发行权、出租权、展览权、表演权、放映权、广播权、信息网络传播权、摄制权、改编权、翻译权、汇编权及应当由著作权人…

【Element-ui】学习与使用

网站快速成型工具Element,一套为开发者、设计师和产品经理准备的基于vue2.0的桌面端组件库 安装 npm i element-ui -S 在项目中安装element-ui,安装了以后查看package.json中的依赖中有没有element-ui的版本,如果有,则说明安装成功…

通过STM32内部ADC将烟雾传感器发送的信号值显示在OLED上

一.CubeMX配置 首先我们在CubeMX配置ADC1, 设置一个定时器TIM2定时1s采样一次以及刷新一次OLED, 打开IIC用于驱动OLED显示屏。 二.程序 在Keil5中添加好oled的显示库,以及用来显示的函数、初始化函数、清屏函数等。在主程序中初始化oled,并将其清屏。…

轻松学会 React 钩子:以 useEffect() 为例

一、React 的两套 API 以前,React API 只有一套,现在有两套:类(class)API 和基于函数的钩子(hooks) API。 任何一个组件,可以用类来写,也可以用钩子来写。下面是类的写法…

解密智能汽车云控基础平台网络架构

全球汽车产业正经历深度转型期,电动化、智能化、网联化成为该行业的主流趋势。随着技术的进步和人们对便利、智能出行的需求不断增加,智能汽车的市场前景广阔。 欲要了解智能汽车车联网,必先了解汽车智能化和网联化的管控中枢- 云控基础平台…

【C++】C++11---lambda表达式

目录 1、lambda表达式1)什么是lambda表达式2)lambda表达式语法3)函数对象与lambda表达式 1、lambda表达式 1)什么是lambda表达式 在C98中,如果想要对一个数据集合中的元素进行排序,可以使用std::sort方法…

算法竞赛入门【码蹄集新手村600题】(MT1040-1060)

算法竞赛入门【码蹄集新手村600题】(MT1040-1060) 目录MT1041 求圆面积和周长MT1042 求矩形的面积和周长MT1043 椭圆计算MT1044 三角形面积MT1045 平行四边形MT1046 菱形MT1047 梯形MT1048 扇形面积MT1049 三角形坐标MT1050 空间三角形MT1051 四边形坐标MT1052 直角…

win10系统wps无法启动(打开文档)

我的win10系统中,之前可以顺畅地打开wps,但最近无法打开文档,停留在启动页面,在任务管理器中可以看到启动的wps线程,如果继续双击文档,线程增加,但依然无法打开文档。 wps版本是刚刚更新的15120…

【爬虫逆向案例】某名片网站 js 逆向 —— data解密

声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢! 【爬虫逆向案例】某名片网站js逆向—— data解密 1、前言2、步骤3、号外 1、前言 相信各位小伙伴在写爬虫的…

免费的音频转换器带你突破音频格式束缚

曾经有一个名叫吴欢的音乐爱好者,他热爱收集各种音频文件,从经典的老歌到新潮的流行曲,样样都不放过。然而,他遇到了一个令人头疼的问题:因为音频格式的不同,他无法将一些珍贵的音乐记录转化为文字形式。他…

[ELK使用篇]:SpringCloud整合ELK服务

文章目录 一:前置准备-(参考之前博客):1.1:准备Elasticsearch和Kibana环境:1.1.1:地址:[https://blog.csdn.net/Abraxs/article/details/128517777](https://blog.csdn.net/Abraxs/article/details/1285177…

Python 教程:面向对象详解

目录: 面向对象 面向对象技术简介 类定义 类对象 self 代表类的实列,而非类 类的方法 继承 多继承 方法重写 类属性与方法 类的私有属性 类的方法 类的私有方法 运算符重载 概要 Python从设计之初就已经是一门面向对象的语言,正因…