Nacos高可用集群解决方案-Docker版本
文章主旨
本文目的是配置高可用的Nacos集群
架构图
整体架构为:Nginx + 3 x Nacos +高可用MySQL

高可用MySQL使用主从复制结构的可以参考Docker搭建MySQL主从集群,基于GTID
文中对应的配置文件已经上传Github,地址:https://github.com/hellxz/nacos-cluster-docker
测试环境
| 服务器OS | 主机IP | Docker版本 |
|---|---|---|
| Ubuntu Server 18.04 LTS | 192.168.87.133 | 18.09.6 |
| Ubuntu Server 18.04 LTS | 192.168.87.139 | 18.09.7 |
| Ubuntu Desktop 18.04 LTS | 192.168.87.135 | 18.09.7 |
为了实现Nacos的高可用,至少需要三台负载较小的服务器,可以与其它服务共存
注意事项
- 这里演示高可用MySQL地址为:
10.2.7.29:3340,10.2.7.29:3341,请自行替换- 这里的
10.2.7.29是局域网,192.168.*是虚拟机网络,通过虚拟机是可以访问局域网的- Nacos初始化SQL这块使用官方的即可,配置文件中不提供,默认认为高可用MySQL已经执行了初始化nacos.sql,这个SQL请移步nacos.sql Github
配置文件目录结构与说明

目录说明
- init.d/custom.properties - 官方提供的自选功能配置文件,Nacos节点均包含此目录
- nacos-1/docker-compose-nacos1.yml - 第一个Nacos节点的Docker-compose配置文件
- nacos-2/docker-compose-nacos1.yml - 第二个Nacos节点的Docker-compose配置文件
- nacos-3/docker-compose-nacos1.yml - 第三个Nacos节点的Docker-compose配置文件
除些之外,在每个nacos-*目录下边,使用docker-compose命令启动容器后,会创建出cluster-logs目录,

我认为最常用的应该是nacos.log
配置文件内容
133服务器的docker-compose-nacos1.yml
version: '3'
services:
# nacos-server服务注册与发现,配置中心服务
docker-nacos-server:
image: nacos/nacos-server:1.0.1
container_name: nacos-server-1
ports:
- "8848:8848"
- "9555:9555"
networks:
- nacos_net
restart: on-failure
privileged: true
environment:
PREFER_HOST_MODE: ip #如果支持主机名可以使用hostname,否则使用ip,默认也是ip
SPRING_DATASOURCE_PLATFORM: mysql #数据源平台 仅支持mysql或不保存empty
NACOS_SERVER_IP: 192.168.87.133 #多网卡情况下,指定ip或网卡
NACOS_SERVERS: 192.168.87.133:8848 192.168.87.139:8848 192.168.87.135:8848 #集群中其它节点[ip1:port ip2:port ip3:port]
MYSQL_MASTER_SERVICE_HOST: 10.2.7.29 #mysql配置,Master为主节点,Slave为从节点
MYSQL_MASTER_SERVICE_PORT: 3340
MYSQL_MASTER_SERVICE_DB_NAME: nacos
MYSQL_MASTER_SERVICE_USER: root
MYSQL_MASTER_SERVICE_PASSWORD: password
MYSQL_SLAVE_SERVICE_HOST: 10.2.7.29
MYSQL_SLAVE_SERVICE_PORT: 3341
#JVM调优参数
#JVM_XMS: #-Xms default :2g
#JVM_XMX: #-Xmx default :2g
#JVM_XMN: #-Xmn default :1g
#JVM_MS: #-XX:MetaspaceSize default :128m
#JVM_MMS: #-XX:MaxMetaspaceSize default :320m
#NACOS_DEBUG: n #是否开启远程debug,y/n,默认n
#TOMCAT_ACCESSLOG_ENABLED: true #是否开始tomcat访问日志的记录,默认false
volumes:
- ./cluster-logs/nacos1:/home/nacos/logs #日志输出目录
- ../init.d/custom.properties:/home/nacos/init.d/custom.properties #../init.d/custom.properties内包含很多自定义配置,可按需配置
networks:
nacos_net:
driver: bridge
139服务器的docker-compose-nacos2.yml
version: '3'
services:
# nacos-server服务注册与发现,配置中心服务
docker-nacos-server:
image: nacos/nacos-server:1.0.1
container_name: nacos-server-2
ports:
- "8848:8848"
- "9555:9555"
networks: nacos_net
restart:
- on-failure
privileged: true
environment:
PREFER_HOST_MODE: ip #如果支持主机名可以使用hostname,否则使用ip,默认也是ip
SPRING_DATASOURCE_PLATFORM: mysql #数据源平台 仅支持mysql或不保存empty
NACOS_SERVER_IP: 192.168.87.139 #多网卡情况下,指定ip或网卡
NACOS_SERVERS: 192.168.87.133:8848 192.168.87.139:8848 192.168.87.135:8848 #集群中其它节点[ip1:port ip2:port ip3:port]
MYSQL_MASTER_SERVICE_HOST: 10.2.7.29 #mysql配置,Master为主节点,Slave为从节点
MYSQL_MASTER_SERVICE_PORT: 3340
MYSQL_MASTER_SERVICE_DB_NAME: nacos
MYSQL_MASTER_SERVICE_USER: root
MYSQL_MASTER_SERVICE_PASSWORD: password
MYSQL_SLAVE_SERVICE_HOST: 10.2.7.29
MYSQL_SLAVE_SERVICE_PORT: 3341
#JVM调优参数
#JVM_XMS: #-Xms default :2g
#JVM_XMX: #-Xmx default :2g
#JVM_XMN: #-Xmn default :1g
#JVM_MS: #-XX:MetaspaceSize default :128m
#JVM_MMS: #-XX:MaxMetaspaceSize default :320m
#NACOS_DEBUG: n #是否开启远程debug,y/n,默认n
#TOMCAT_ACCESSLOG_ENABLED: true #是否开始tomcat访问日志的记录,默认false
volumes:
- ./cluster-logs/nacos2:/home/nacos/logs #日志输出目录
- ../init.d/custom.properties:/home/nacos/init.d/custom.properties #../init.d/custom.properties内包含很多自定义配置,可按需配置
networks:
nacos_net:
driver: bridge
135服务器的docker-compose-nacos3.yml
version: '3'
services:
# nacos-server服务注册与发现,配置中心服务
docker-nacos-server:
image: nacos/nacos-server:1.0.1
container_name: nacos-server-3
ports:
- "8848:8848"
- "9555:9555"
networks:
- nacos_net
restart: on-failure
privileged: true
environment:
PREFER_HOST_MODE: ip #如果支持主机名可以使用hostname,否则使用ip,默认也是ip
SPRING_DATASOURCE_PLATFORM: mysql #数据源平台 仅支持mysql或不保存empty
NACOS_SERVER_IP: 192.168.87.135 #多网卡情况下,指定ip或网卡
NACOS_SERVERS: 192.168.87.133:8848 192.168.87.139:8848 192.168.87.135:8848 #集群中其它节点[ip1:port ip2:port ip3:port]
MYSQL_MASTER_SERVICE_HOST: 10.2.7.29 #mysql配置,Master为主节点,Slave为从节点
MYSQL_MASTER_SERVICE_PORT: 3340
MYSQL_MASTER_SERVICE_DB_NAME: nacos
MYSQL_MASTER_SERVICE_USER: root
MYSQL_MASTER_SERVICE_PASSWORD: password
MYSQL_SLAVE_SERVICE_HOST: 10.2.7.29
MYSQL_SLAVE_SERVICE_PORT: 3341
#JVM调优参数
#JVM_XMS: #-Xms default :2g
#JVM_XMX: #-Xmx default :2g
#JVM_XMN: #-Xmn default :1g
#JVM_MS: #-XX:MetaspaceSize default :128m
#JVM_MMS: #-XX:MaxMetaspaceSize default :320m
#NACOS_DEBUG: n #是否开启远程debug,y/n,默认n
#TOMCAT_ACCESSLOG_ENABLED: true #是否开始tomcat访问日志的记录,默认false
volumes:
- ./cluster-logs/nacos3:/home/nacos/logs #日志输出目录
- ../init.d/custom.properties:/home/nacos/init.d/custom.properties #../init.d/custom.properties内包含很多自定义配置,可按需配置
networks:
nacos_net:
driver: bridge
Nacos共用的init.d/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
由于现在把所有的配置文件放在一起,并且每个Nacos节点都需要一份
init.d目录,这里就不单独为每个nacos-*复制了,直接把文件夹整个复制过来就可以了
启动Nacos集群
复制配置文件
复制nacos-cluster-docker目录到以上三台主机,上边的配置文件已经修改好了
其对应关系为:
- 192.168.87.133 对应 nacos-1
- 192.168.87.139 对应 nacos-2
- 192.168.87.135 对应 nacos-3
启动容器
分别在各主机上进入各自对应的nacos目录中,启动容器,命令如下:
133服务器
$ cd nacos-cluster-docker/nacos-1
$ docker-compose -f docker-compose-nacos1.yml up -d
139服务器
$ cd nacos-cluster-docker/nacos-2
$ docker-compose -f docker-compose-nacos2.yml up -d
135服务器
$ cd nacos-cluster-docker/nacos-3
$ docker-compose -f docker-compose-nacos3.yml up -d
查看日志
查看日志分别在对应的nacos-*目录下,执行
tail -f cluster-logs/nacos*/nacos.log
访问Nacos UI界面
这里使用133服务器页面进行展示下,
访问http://192.168.87.133:8848/nacos,进入登录页面,默认的用户名与密码都是nacos

我这里还原的sql是平时测试用的,这里打下码,我们的关注点在 集群管理 > 节点列表 这里
这里我们看到Nacos集群各节点已经正常了,LEADER与FOLLOWER已经选出,一切正常了
配置Nginx
除了Nacos集群配置外,我们在Spring Boot或Spring Cloud项目中使用的时候,只能指定一个URL指向Nacos服务端,这里使用Nginx进行代理负载均衡
如果可以的话,生产环境最佳实践是使用一个域名指向Nginx,之后就算换Nginx主机,客户端也无需修改配置文件,只需要使用域名指向一个新的Nginx的IP
列出最主要的配置
http{
upstream nacos-cluster {
server 192.168.87.133:8848;
server 192.168.87.139:8848;
server 192.168.87.135:8848;
}
server {
listen 8848;
location /{
proxy_pass http://nacos-cluster;
}
}
}
启动Nginx,使用代码进行测试连接当前的Nginx所在主机IP:8848

这里已经可以看到服务正常注册到集群中了
遇到的问题
客户端无法注册到集群中
如果遇到有客户端服务无法连接到Nacos集群中,请着重检查下Nacos的堆内存与虚拟机的设置,最初我使用的默认的2G最大堆内存,虚拟机也分的2G内存,然后启动服务时还能正常一小会,然后就开始有的服务显示节点,有的不显示列表,使用客户端进行连接也无法正常连接,提示Down Server response 之类 的提示
解决办法:修改虚拟机内存大小,或修改Nacos堆内存配置
本文到此结束,如果对你有帮助,欢迎评论、推荐、关注三连❤️
本文系Hellxz学习与实践文章,禁止布布扣、码迷、爱码网等第三方爬虫网站爬取,转载请在醒目位置注明出处:https://www.cnblogs.com/hellxz/p/nacos-cluster-docker.html
Nacos高可用集群解决方案-Docker版本的更多相关文章
- kubeadm部署高可用集群Kubernetes 1.14.1版本
Kubernetes高可用集群部署 部署架构: Master 组件: kube-apiserver Kubernetes API,集群的统一入口,各组件协调者,以HTTP API提供接口服务,所有对象 ...
- (六) Docker 部署 Redis 高可用集群 (sentinel 哨兵模式)
参考并感谢 官方文档 https://hub.docker.com/_/redis GitHub https://github.com/antirez/redis happyJared https:/ ...
- (七) Docker 部署 MySql8.0 一主一从 高可用集群
参考并感谢 官方文档 https://hub.docker.com/_/mysql y0ngb1n https://www.jianshu.com/p/0439206e1f28 vito0319 ht ...
- 基于docker实现redis高可用集群
基于docker实现redis高可用集群 yls 2019-9-20 简介 基于docker和docker-compose 使用redis集群和sentinel集群,达到redis高可用,为缓存做铺垫 ...
- 高可用集群heartbeat全攻略
heartbeat的概念 Linux-HA的全称是High-Availability Linux,它是一个开源项目,这个开源项目的目标是:通过社区开发者的共同努力,提供一个增强linux可靠性(r ...
- 一键部署Kubernetes高可用集群
三台master,四台node,系统版本为CentOS7 IP ROLE 172.60.0.226 master01 172.60.0.86 master02 172.60.0.106 master0 ...
- sentinel监控redis高可用集群(一)
一.首先配置redis的主从同步集群. 1.主库的配置文件不用修改,从库的配置文件只需增加一行,说明主库的IP端口.如果需要验证的,也要加多一行,认证密码. slaveof 192.168.20.26 ...
- 搭建 RabbitMQ Server 高可用集群
阅读目录: 准备工作 搭建 RabbitMQ Server 单机版 RabbitMQ Server 高可用集群相关概念 搭建 RabbitMQ Server 高可用集群 搭建 HAProxy 负载均衡 ...
- Linux系统——MHA-Atlas-MySQL高可用集群
Linux系统——MHA-Atlas-MySQL高可用集群 MHA MHA介绍MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,是一套优秀的 ...
随机推荐
- [NLP] 相对位置编码(一) Relative Position Representatitons (RPR) - Transformer
对于Transformer模型的positional encoding,最初在Attention is all you need的文章中提出的是进行绝对位置编码,之后Shaw在2018年的文章中提出了 ...
- jQuery表单校验
主要特性: 表单提交前对所有数据进行校验,不符合不让提交(validate) 如果表单校验不通过,自动focus到第一个错误的域 自动在控件后面显示错误提示内容(error message) 支持根据 ...
- 【Android】No resource found that matches the given name 'Theme.Sherlock.Light.NoActionBar'
被这个问题困扰了好久…… 错误如下: error: Error retrieving parent for item: No resource found that matches the given ...
- 【iOS】The filename 未命名.ipa in the package contains an invalid character(s)
提交 APP 到苹果官网审核时遇到了这个问题,如图: 其实就是不支持中文,随便换个英文名就行了. 参考:http://blog.csdn.net/u011439689/article/details/ ...
- Core CLR 自定义的Host官方推荐的一种形式(第一种)
.Net Core CLR提供两种Host API访问 托管代码的形式,按照微软官方的说法,一种是通过CoreClr.DLL来直接调用托管生成的DLL程序集,另外一种是通过CoreClr里面的C导出函 ...
- [系列] Go - chan 通道
目录 概述 声明 chan 写入 chan 读取 chan 关闭 chan 示例 推荐阅读 概述 原来分享基础语法的时候,还未分享过 chan 通道,这次把它补上. chan 可以理解为队列,遵循先进 ...
- 使用用树莓派打造远程WEB服务器
简介:系统配置Raspberry Pi 3B + Raspbian + MySQL5.7 + Tomcat 9 + Nginx + 公网IP. 工具:Win32DiskImager .FileZill ...
- 15分钟让你了解如何实现并发中的Barrier
说到Barrier,很多语言中已经是标准库中自带的概念,一般情况下,只需要直接使用就行了.而最近一些机缘巧合的机会,我需要在c++中使用这么个玩意儿.但是c++标准库里还没有这个概念,只有boost里 ...
- nginx基本运维及常用配置
nginx基本运维及常用配置 ========================================================== 基本运维 nginx 的启动 nginx -c /p ...
- kafka客户端和服务端开发(三)
前面我们已经搭建了kafka的单机和集群环境,分别写了简单的实例代码,对于代码里面使用到的参数并没有做解释.下面我们来详细说一下各个参数的作用. 1. 创建kafka生产者 kafka生产者有3个必选 ...