当前位置:首页 > 服务端 > Nacos(四)Docker部署Nacos集群环境(兼容Nacos1.x与2.x),简单易懂、实用

Nacos(四)Docker部署Nacos集群环境(兼容Nacos1.x与2.x),简单易懂、实用

2022年09月16日 18:11:28服务端4

《Docker部署Nacos-2.0.3单机环境》
《Linux部署Nacos-2.0.3单机环境》
《Linux部署Nacos-2.0.3集群环境》
《SpringCloud整合Nacos2.x使用》

前言

具体搭建那个版本的Nacos,最好根据需要整合的SpringCloud版本来决定。
版本对应参考:组件版本关系
Nacos(四)Docker部署Nacos集群环境(兼容Nacos1.x与2.x),简单易懂、实用 _ JavaClub全栈架构师技术笔记

对比1.x版本

Nacos1.x的搭建方式和2.x的方式,基本一致,相比1.X新增了gRPC的通信方式,因此需要增加2个端口。新增端口是在配置的主端口(server.port)基础上,进行一定偏移量自动生成(分别偏移了1000和1001),nacos默认的端口为8848,偏移后的新增端口为9848与9849

端口 与主端口的偏移量 描述
9848 1000 客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求
9849 1001 服务端gRPC请求服务端端口,用于服务间同步等

1、拉取镜像

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

注意:1.3.2以上版本,已支持mysql8

拉取镜像:

docker pull  nacos/nacos-server:2.0.3

2、配置mysql环境

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:2.0.3

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

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

服务器分布情况:

地址 端口 说明
192.168.0.111 8848、9848、9849 第一个Nacos节点
192.168.0.111 8858、9858、9859 第二个Nacos节点
192.168.0.111 8868、9868、9869 第三个Nacos节点
192.168.0.200 3306 mysq服务

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:2.0.3

拷贝目录:

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

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中配置的节点,方便排查错误以及验证是否配置成功。
    Nacos(四)Docker部署Nacos集群环境(兼容Nacos1.x与2.x),简单易懂、实用 _ JavaClub全栈架构师技术笔记
    配置JVM:
# 根据当前服务器的配置修改JVM大小,比如:修改为`1G`或者更大或者更小。
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

Nacos(四)Docker部署Nacos集群环境(兼容Nacos1.x与2.x),简单易懂、实用 _ JavaClub全栈架构师技术笔记

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:2.0.3

第二个节点:

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:2.0.3

第三个节点:

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:2.0.3

成功启动任何一个节点:

启动日志:
Nacos(四)Docker部署Nacos集群环境(兼容Nacos1.x与2.x),简单易懂、实用 _ JavaClub全栈架构师技术笔记
登录测试:

通过:http://192.168.0.111:8848/nacos,成功访问nacos则表示搭建成功。
默认账户:nacos
默认密码:nacos,为了安全在第一次进入到nacos以后最好修改一次密码。
Nacos(四)Docker部署Nacos集群环境(兼容Nacos1.x与2.x),简单易懂、实用 _ JavaClub全栈架构师技术笔记
控制台节点信息:
Nacos(四)Docker部署Nacos集群环境(兼容Nacos1.x与2.x),简单易懂、实用 _ JavaClub全栈架构师技术笔记

成功启动所有节点:
Nacos(四)Docker部署Nacos集群环境(兼容Nacos1.x与2.x),简单易懂、实用 _ JavaClub全栈架构师技术笔记
集群搭建成功后,数据会进行同步;访问任意一个节点,都可以看到所有的服务列表、配置列表等数据

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";
   	}
   ....
   }

效果:
Nacos(四)Docker部署Nacos集群环境(兼容Nacos1.x与2.x),简单易懂、实用 _ JavaClub全栈架构师技术笔记

5、SpringCloud连接集群

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

作者:一恍过去
来源链接:https://blog.csdn.net/zhuocailing3390/article/details/123058379

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/42017.html

标签: Nacos
分享给朋友:

“Nacos(四)Docker部署Nacos集群环境(兼容Nacos1.x与2.x),简单易懂、实用” 的相关文章

Nacos数据库配置

Nacos数据库配置

本文来说下nacos数据库配置 文章目录 Nacos控制面板,新建配置 Nacos数据库配置 初始化mysql 修改配置文件 本文小结...

nacos —— 控制台默认用户名密码

一、引言 最近疫情比较严重,小伙伴就老老实实呆在家办公吧~~ 新的一年小编近几个月比较忙,所以博客更新的比较慢,但是工作还是得继续呀。 新年的第一篇博客,新年快乐、新年快乐、新年快乐。 二、默认密码 新的一年第一个礼拜小编在家办公,接触了一个新的项目...

nacos LINUX 启动

nacos  sh startup.sh -m standalone 作者:cai_code 来源链接:https://blog.csdn.net/gaoduicai/article/details/122742762...

Nacos修改默认密码

1.添加依赖 <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-s...

nacos 适配达梦、人大金仓数据库

nacos 适配达梦、人大金仓数据库

文章目录 一、准备工作...

ubuntu安装nacos

ubuntu安装nacos

1.下载nacos,github下载地址:https://github.com/alibaba/nacos/releases 选用目前最新的版本:1.3.0,这个版本直接在页面就可以修改nacos登录密码,并且还可以创建其他的登录用户,之前用过1.0.0版本如果修改naco...

Nacos安装及启动

Nacos安装及启动

目录 Nacos是什么 为什么要选择Nacos 环境准备 获取Nacos安装包 通过官网下载安装包 通过源码编译获取安装包 启...

Nginx配置Nacos反向代理

Nginx配置Nacos反向代理

修改nginx.conf文件 找到nginx安装位置,在conf文件夹中,编辑nginx.conf文件,将nacos服务信息配置后重启即可。 # nacos proxy upstream nacoscluster {...

SpringCloud项目中使用Nacos作为注册中心

SpringCloud项目中使用Nacos作为注册中心

SpringCloud和Nacos的介绍原理在这里就不多说了,百度一大堆,这里就只是记录一下刚开始学习时候项目的使用过程 Nacos-server 我这里是从官网下载的Nacos-server 下载地址: https://github.com/alibaba...

Nacos的简单使用

Nacos的简单使用

一、Nacos简介 Nacos是阿里系开发的兼容Spring Cloud的服务注册中心组件,是微服务国产化的先驱。Nacos作为与Eureka的对比,不仅具有Eureka固有的集群化、注册中心等功能,还具有配置中心的功能,并且更加简单使用,拆箱即用,也支持二次开发...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。