文章主旨

本文目的是配置高可用的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的高可用,至少需要三台负载较小的服务器,可以与其它服务共存

注意事项

  1. 这里演示高可用MySQL地址为:10.2.7.29:334010.2.7.29:3341,请自行替换
  2. 这里的10.2.7.29是局域网,192.168.*是虚拟机网络,通过虚拟机是可以访问局域网的
  3. 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版本的更多相关文章

  1. kubeadm部署高可用集群Kubernetes 1.14.1版本

    Kubernetes高可用集群部署 部署架构: Master 组件: kube-apiserver Kubernetes API,集群的统一入口,各组件协调者,以HTTP API提供接口服务,所有对象 ...

  2. (六) Docker 部署 Redis 高可用集群 (sentinel 哨兵模式)

    参考并感谢 官方文档 https://hub.docker.com/_/redis GitHub https://github.com/antirez/redis happyJared https:/ ...

  3. (七) Docker 部署 MySql8.0 一主一从 高可用集群

    参考并感谢 官方文档 https://hub.docker.com/_/mysql y0ngb1n https://www.jianshu.com/p/0439206e1f28 vito0319 ht ...

  4. 基于docker实现redis高可用集群

    基于docker实现redis高可用集群 yls 2019-9-20 简介 基于docker和docker-compose 使用redis集群和sentinel集群,达到redis高可用,为缓存做铺垫 ...

  5. 高可用集群heartbeat全攻略

    heartbeat的概念   Linux-HA的全称是High-Availability Linux,它是一个开源项目,这个开源项目的目标是:通过社区开发者的共同努力,提供一个增强linux可靠性(r ...

  6. 一键部署Kubernetes高可用集群

    三台master,四台node,系统版本为CentOS7 IP ROLE 172.60.0.226 master01 172.60.0.86 master02 172.60.0.106 master0 ...

  7. sentinel监控redis高可用集群(一)

    一.首先配置redis的主从同步集群. 1.主库的配置文件不用修改,从库的配置文件只需增加一行,说明主库的IP端口.如果需要验证的,也要加多一行,认证密码. slaveof 192.168.20.26 ...

  8. 搭建 RabbitMQ Server 高可用集群

    阅读目录: 准备工作 搭建 RabbitMQ Server 单机版 RabbitMQ Server 高可用集群相关概念 搭建 RabbitMQ Server 高可用集群 搭建 HAProxy 负载均衡 ...

  9. Linux系统——MHA-Atlas-MySQL高可用集群

    Linux系统——MHA-Atlas-MySQL高可用集群 MHA MHA介绍MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,是一套优秀的 ...

随机推荐

  1. java练习---2

    //程序员:罗元昊 2017.9.6public class My{       public static void main(String[] args){              int a= ...

  2. 深入分析Elastic Search的写入过程

    摘要 之前写过一篇ElasticSearch初识之吐槽,不知觉竟然过去了两年了.哎,时光催人老啊.最近又用到了ES,想找找过去的总结文档,居然只有一篇,搞了半年的ES,遇到那么多的问题,产出只有这么点 ...

  3. rabbitMQ_Publish/Subscribe(三)

    发布/订阅 生产者发布信息,多个订阅者可以同时接收到信息. 转发器 现在是时候在RabbitMQ中引入完整的消息传递模式了. 让我们快速了解我们在以前的教程中介绍的内容: 生产者是一个发送消息的应用程 ...

  4. 入门MySQL——基础语句篇

    前言:  前面几篇文章,我们介绍了MySQL的基础概念及逻辑架构.相信你现在应该有了自己的一套MySQL环境,接下来我们就可以开始练习MySQL了.本文将从MySQL最基础的语句出发,为你展示出创建及 ...

  5. hdoj 4706 Children's Day

    题目意思就是用a-z组成一个N,然后到z后又跳回a,输出宽从3到10的N. #include <stdio.h> #include <string.h> char s[14][ ...

  6. 荔枝FM前端面试题

    最近接到了荔枝FM的面试通知,遗憾的是没有拿到offer,但是这次面试呢,还是收获很大的,下面就来给大家说说我遇到的面试题 一面 一面是直接发了一套面试题到邮箱,开启了防作弊的,限时20分钟做完,下面 ...

  7. spring学习笔记之---bean管理

    bean管理(xml) (一)spring的工厂类 FileSystemXmlApplicationContext 读取磁盘配置文件 (二)bean实例化的三种方式 (1)使用类构造器实例化(默认无参 ...

  8. 聊聊目标管理之 OKR

    这篇文章我们不谈技术,聊点轻松的,那聊什么呢?聊一下最近很火的目标管理 OKR.不知道小伙伴你们的公司什么情况,我的公司今年开始推行 OKR,用了大半年的时间,感觉效果还不错,上周六又参加了一天的复盘 ...

  9. Go中的命名规范

    1.命名规范 1.1 Go是一门区分大小写的语言. 命名规则涉及变量.常量.全局函数.结构.接口.方法等的命名. Go语言从语法层面进行了以下限定:任何需要对外暴露的名字必须以大写字母开头,不需要对外 ...

  10. Spark 系列(八)—— Spark SQL 之 DataFrame 和 Dataset

    一.Spark SQL简介 Spark SQL 是 Spark 中的一个子模块,主要用于操作结构化数据.它具有以下特点: 能够将 SQL 查询与 Spark 程序无缝混合,允许您使用 SQL 或 Da ...