docker部署 nacos单机及集群版本

docker部署nacos单机及集群版本

 

目录

一、不外接mysql,软件包部署方式

二、不外接mysql,docker部署方式

三、外接mysql,docker部署方式

四、docker-compose+nginx+mysql高可用集群版本

五、docker+mysql+nginx高可用集群版本

nacos 2.0版本说明

其中端口 7848、8848、9848、9849是必须要开放的端口,8848是web页面端口,7848是集群数据同步接口,9848、9849是nacos 2.0.0以上的版本必须开发的端口。

Nacos2.0版本相比1.X新增了gRPC的通信方式,因此需要增加2个端口。新增端口是在配置的主端口(server.port)基础上,进行一定偏移量自动生成。

客户端拥有相同的计算逻辑,用户如同1.X的使用方式,配置主端口(默认8848),通过相同的偏移量,计算对应gRPC端口(默认9848)。因此如果客户端和服务端之前存在端口转发,或防火墙时,需要对端口转发配置和防火墙配置做相应的调整。

一、不外接mysql,软件包部署方式
最新稳定版本 下载地址:https://github.com/alibaba/nacos/releases

下载后解压 目录如下 在bin 是启动脚本

启动命令(standalone代表着单机模式运行,非集群模式):

sh startup.sh -m standalone

nacos服务默认端口是8848 浏览器输入 http://ip:8848/nacos

登陆账号和密码都是 nacos

二、不外接mysql,docker部署方式
docker run -d -p 8848:8848 --env MODE=standalone  --name nacos nacos-server:2.0.4
三、外接mysql,docker部署方式
安装mysql

创建数据库nacos_config,插入nacos的配置相关的sql

docker run -d \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=172.16.0.124 \
-e MYSQL_SERVICE_PORT=31190 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD='xxxx' \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-p 8848:8848 \
--restart=always \
--name nacos_saasoperationsecond \
nacos-server:2.0.4
四、docker-compose+nginx+mysql高可用集群版本
 

1.安装mysql

创建数据库nacos_config,插入nacos的配置相关的sql

sudo docker network create --driver bridge --subnet 10.139.0.0/16 --gateway 10.139.0.1 pknet
3.vim docker-compose-nacos.yaml

version: "3"
services:
  nacos:
    hostname: nacos
    image: nacos/nacos-server:2.0.3
    container_name: bdyh-nacos
    privileged: true
    networks:
      - pknet
    volumes:
      - ./cluster-logs:/home/nacos/logs
      - ./init.d/custom.properties:/home/nacos/init.d/custom.properties
    ports:
      - "7848:7848"
      - "8848:8848"
      - "9848:9848"
      - "9555:9555"
      - "9849:9849"
    env_file:
      - ./env/nacos-ip.env
    restart: on-failure
networks:
  pknet:
    external: true
vim nacos-ip.env

#nacos dev env
#如果支持主机名可以使用hostname,否则使用ip,默认也是ip
PREFER_HOST_MODE=ip
MODE=cluster
#多网卡情况下,指定ip或网卡
NACOS_SERVER_IP=192.168.10.128
#集群中其它节点[ip1:port ip2:port ip3:port]
NACOS_SERVERS=192.168.10.128:8848 192.168.10.129:8848 192.168.10.130:8848
#nacos的web端口,不写默认就是8848
NACOS_APPLICATION_PORT=8848
#数据源平台 仅支持mysql或不保存empty
SPRING_DATASOURCE_PLATFORM=mysql
MYSQL_SERVICE_HOST=192.168.10.131
MYSQL_SERVICE_DB_NAME=caseRetrieval-config
MYSQL_SERVICE_PORT=3306
MYSQL_SERVICE_USER=root
MYSQL_SERVICE_PASSWORD=bdyh@2020
MYSQL_DATABASE_NUM=1
#JVM调优参数
JVM_XMS=2g
JVM_XMX=2g
JVM_XMN=2g
JVM_MS=128m
JVM_MMS=320m
vim custom.properties

#spring.security.enabled=false
#management.security=false
#security.basic.enabled=false
#nacos.security.ignore.urls=/**
#management.metrics.export.elastic.host=http://localhost:9200
# metrics for prometheus
management.endpoints.web.exposure.include=*
 
# metrics for elastic search
#management.metrics.export.elastic.enabled=false
#management.metrics.export.elastic.host=http://localhost:9200
 
# metrics for influx
#management.metrics.export.influx.enabled=false
#management.metrics.export.influx.db=springboot
#management.metrics.export.influx.uri=http://localhost:8086
#management.metrics.export.influx.auto-create-db=true
#management.metrics.export.influx.consistency=one
#management.metrics.export.influx.compressed=true
启动:docker-compose -f docker-compose-nacos.yaml up -d

浏览器访问:ip+8848,ip+8849,ip+8850均可访问

五、docker+mysql+nginx高可用集群版本
环境说明

主机ip 部署

192.168.216.56 mysql nacos1

192.168.216.49 nacos2

192.168.216.35 nacos3

192.168.216.49 nginx 做负载均衡

1.安装mysql

2.创建数据库nacos_config,插入nacos的配置相关的sql

3.nacos集群

所有部署主机自建/root/nacos/config logs 等目录,做路径映射

mkdir -p /root/nacos/config
mkdir -p /root/nacos/logs
mkdir -p /data/nacos/config
/root/nacos/config下增加一个custom.properties文件

vi /root/nacos/config/custom.properties

#spring.security.enabled=false
#management.security=false
#security.basic.enabled=false
#nacos.security.ignore.urls=/**
#management.metrics.export.elastic.host=http://localhost:9200
# metrics for prometheus
management.endpoints.web.exposure.include=*
 
# metrics for elastic search
#management.metrics.export.elastic.enabled=false
#management.metrics.export.elastic.host=http://localhost:9200
 
# metrics for influx
#management.metrics.export.influx.enabled=false
#management.metrics.export.influx.db=springboot
#management.metrics.export.influx.uri=http://localhost:8086
#management.metrics.export.influx.auto-create-db=true
#management.metrics.export.influx.consistency=one
#management.metrics.export.influx.compressed=true
#其他都注释掉了,包括一些监控等,以后需要可以自行修改配置
其他都注释掉了,包括一些监控等,以后需要可以自行修改配置

各个主机使用docker启动nacos:

192.168.216.56的nacos:

docker run -d --name nacos1 --hostname nacos1 --net=host --add-host nacos1:192.168.216.56 --add-host nacos2:192.168.216.35 --add-host nacos3:192.168.216.49 -e PREFER_HOST_MODE=hostname -e MYSQL_SERVICE_HOST=192.168.216.56 -e MYSQL_SERVICE_DB_NAME=nacos_config -e MYSQL_SERVICE_USER=root -e MYSQL_SERVICE_PASSWORD=xxxx -e MYSQL_SERVICE_PORT=3306 -e NACOS_SERVERS="nacos1:8848 nacos2:8848 nacos3:8848" -v /root/nacos/config/custom.properties:/home/nacos/init.d/custom.properties -v /root/nacos/logs:/home/nacos/logs nacos/nacos-server:1.4.2
192.168.216.49的nacos:

docker run -d --name nacos2 --hostname nacos2 --net=host --add-host nacos1:192.168.216.56 --add-host nacos2:192.168.216.35 --add-host nacos3:192.168.216.49 -e PREFER_HOST_MODE=hostname -e MYSQL_SERVICE_HOST=192.168.216.56 -e MYSQL_SERVICE_DB_NAME=nacos_config -e MYSQL_SERVICE_USER=root -e MYSQL_SERVICE_PASSWORD='xxxx' -e MYSQL_SERVICE_PORT=3306 -e NACOS_SERVERS="nacos1:8848 nacos2:8848 nacos3:8848" -v /root/nacos/config/custom.properties:/home/nacos/init.d/custom.properties -v /root/nacos/logs:/home/nacos/logs nacos/nacos-server:1.4.1
192.168.214.35的nacos:

docker run -d --name nacos3 --hostname nacos3 --net=host --add-host nacos1:192.168.216.56 --add-host nacos2:192.168.216.35 --add-host nacos3:192.168.216.49 -e PREFER_HOST_MODE=hostname -e MYSQL_SERVICE_HOST=192.168.216.56 -e MYSQL_SERVICE_DB_NAME=nacos_config -e MYSQL_SERVICE_USER=root -e MYSQL_SERVICE_PASSWORD='xxxx' -e MYSQL_SERVICE_PORT=3306 -e NACOS_SERVERS="nacos1:8848 nacos2:8848 nacos3:8848" -v /root/nacos/config/custom.properties:/home/nacos/init.d/custom.properties -v /root/nacos/logs:/home/nacos/logs nacos/nacos-server:1.4.1
4.安装nginx。配置负载均衡

stream {
    upstream nacos {
        server 192.168.216.56:8848;
        server 192.168.216.49:8848;
        server 192.168.216.35:8848;
    }
    server {
        listen 18848;
        proxy_pass nacos;
    }
}
5.访问:192.168.216.49:18848/nacos

一直以来使用nacos都会遇到各种各样的问题,最后的结果都是springcloud项目无法注册到nacos服务端,有时候是springcloud能注册到nacos服务端,但是项目日志还是报错误,大概有如下几个:

09:25:28.782 [com.alibaba.nacos.client.Worker.longPolling.fixed-10.1.6.102_8848] ERROR com.alibaba.nacos.client.config.http.ServerHttpAgent - [NACOS Exception httpPost] currentServerAddr: http://10.1.6.102:8848 java.net.NoRouteToHostException: No route to host (Host unreachable)

erviceName":"DEFAULT_GROUP@@hgc-gateway","stopped":false,"weight":1.0} java.lang.IllegalStateException: failed to req API:/nacos/v1/ns/instance/beat after all servers([10.1.6.102:8848]) tried: failed to req API:10.1.6.102:8848/nacos/v1/ns/instance/beat. code:500 msg: java.net.SocketTimeoutException: connect timed out

11:26:10.281 [com.alibaba.nacos.client.Worker.longPolling.fixed-nacos-headless_8848] ERROR com.alibaba.nacos.client.config.impl.ClientWorker - [fixed-nacos-headless_8848] [check-update] get changed dataId exception java.net.UnknownHostException: nacos-headless

像以上这几个是能注册到nacos服务端的,也有的不能注册到,导致开发在排查问题的时候老是说环境有问题,搞得我很烦,明明环境是和刚部署的时候一样的,怎么开发一更新了环境就会出问题呢?

总结一下这个nacos的几个坑:

1、如果是使用官方给的编排文件在k8s里面部署nacos,有时候使用cluster模式没有问题,有的时候得用standalone模式,比如我在华为云就是使用cluster,没有问题,但是我在自建的k8s刚开始也是使用cluster模式也没有问题,后来开发更新了版本,不知道更新了什么组件,使用cluster模式就有问题,有的项目能注册到,有的项目注册不了,只能改成standalone模式

2、在k8s环境中使用cluster模式在nacos ui界面的节点列表会出现异常结点,节点后面会多个点,导致刷新的时候会阵阵的卡

nacos-0.nacos-headless.wehgc-test.svc.cluster.local.:8848

3、在linux环境中安装的nacos同样会遇到能注册到但是项目会提示连接异常的问题,这时候只要看到能注册就行,其他不管

4、nacos似乎对mysql-community或者mariadb版本也会影响,mysql5.7和mysql8.0会有不一样,主要是mysql连接器的问题,需要检查包里的mysql-connector-java-8.0.16.jar

5、nacos和springcloud各组件的版本也有依赖关系,比如我知道的redisson组件,千万不要随便更改版本,否则你会很惨

补充:

针对第1点,改成standalone模式后会存在不能将数据存储在mysql里面的问题,后来我又改成cluster模式,并且使用第 2点的方法解决卡的问题

针对第2点问题这里的解决方案是

这个是你kubernetes根域名导致的 两个方案,第一,kubernetes的 dns cluster.domain属性,可自行百度,有这个方案。 第二 修改部署Yaml里面NACOS_SERVERS环境变量,给配置的每个节点local后面加个点,像这样nacos-0.nacos-headless.default.svc.cluster.local.:8848

<!-- nacos依赖 -->

<dependency>

<groupId>com.alibaba.cloud</groupId>

<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>

<version>2.1.0.RELEASE</version>

</dependency>

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-bootstrap</artifactId>

<version>3.1.0</version>

</dependency>

降低nacos版本依赖:

<!-- nacos依赖 -->

<dependency>

<groupId>com.alibaba.cloud</groupId>

<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>

<version>1.5.0.RELEASE</version>

</dependency>

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-bootstrap</artifactId>

<version>3.1.0</version>

</dependency>

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了在K8s集群部署nacos单机版,您可以按照以下步骤进行操作: 1. 在K8s集群中选择一台机器,并获取该机器的IP地址。 2. 使用浏览器访问该机器的IP地址以及对外暴露的端口 "/nacos",例如:http://<机器IP地址>:<端口号>/nacos。 3. 在访问页面中输入账号和密码,账号为"nacos",密码也为"nacos"。 4. 运行Docker命令来进行nacos单机部署。以下是一个示例的Docker命令: ``` docker run \ --name nacos \ -d \ -p 8848:8848 \ --restart=always \ -e JVM_XMS=256m \ -e JVM_XMX=256m \ -v /home/nacos/logs:/home/nacos/logs \ -/home/nacos/conf/application.properties:/home/nacos/init.d/application.properties \ -e MODE=standalone \ nacos/nacos-server ``` 请将上述命令中的"/home/nacos/logs"和"/home/nacos/conf/application.properties"替换为您希望存储日志和配置文件的路径。 5. 运行上述Docker命令后,nacos将以单机模式在K8s集群部署成功。 希望这些步骤对您有所帮助。如果您有任何其他问题,请随时提问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [K8s---【KubeSphere部署nacos单机模式和集群模式】](https://blog.csdn.net/weixin_44988127/article/details/130074377)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值