使用Docker搭建Nacos集群

写在前边

最近在学习Spring Cloud Alibaba的相关内容,使用nacos时先搭了一台单机环境,测试服务注册发现及配置管理时完全ok。但是在搭建nacos集群时遇到一些比较烦的问题,整整花费了一天时间才搭建好。本人觉得nacos的官方文档对环境设置这块描述的不是很详细,这就导致按照文档安装不得不尝试很多次,浪费时间,所以决定写blog记录一下。这是本人第一次写blog,有不正确的地方请不吝赐教,谢谢!



环境准备

1.Centos7.7.1908虚拟机一台,内存32G。

2.docker-compose版本1.25.4,docker版本1.13.1

3.mysql版本5.7.28,拉取并启动mysql镜像,暴露3306端口,执行nacos-mysql.sql

4.nginx版本1.17.9,拉取并启动nginx镜像,暴露80端口,用来做反向代理。

5.nacos-server版本1.2.0,拉取nacos-server镜像,按照nacos-docker官网下载配置文件模板。



配置修改

1.按照官方文档修改配置

example/cluster-hostname.yaml


env/nacos-hostname.env

2.cluster-hostname.yml的配置说明

将要启动的容器包含3个,名字分别是nacos1,nacos2,nacos3;

nacos1容器的hostname是nacos1,这里建议不要随意修改,如果有修改需求,nacos-hostname.env里边的NACOS_SERVERS对应节点值也需要跟随修改。nacos1对外暴露8848和9555端口。

nacos2容器的hostname是nacos2,同样不建议修改。nacos2对外暴露8849端口。

nacos3容器的hostname是nacos3,同样不建议修改。nacos3对外暴露8847端口。

3.nacos-hostname.env配置说明

需要注意的就是nacos-hostname.env的配置,一开始我按照自己的理解,NACOS_SERVERS(nacos集群所有节点)应该填写host机器ip+服务端口实现集群,即:

NACOS_SERVERS=172.16.52.108:8847 172.16.52.108:8848 172.16.52.108:8849

但是!这样填写会导致集群间互相访问不通,查看naming-raft.log日志文件报错:

2020-04-08 08:01:12,607 INFO received approve from peer: {"heartbeatDueMs":4500,"ip":"172.17.0.1:8848","leaderDueMs":15819,"state":"FOLLOWER","term":1767,"voteFor":"172.17.0.1:8848"}2020-04-08 08:01:12,608 INFO received approve from peer: {"heartbeatDueMs":4500,"ip":"172.17.0.1:8848","leaderDueMs":15819,"state":"FOLLOWER","term":1767,"voteFor":"172.17.0.1:8848"}2020-04-08 08:01:15,000 WARN [IS LEADER] no leader is available now!2020-04-08 08:01:28,605 INFO leader timeout, start voting,leader: null, term: 1767

查看ncaos.log报错:

java.lang.IllegalStateException: unable to find local peer: nacos1:8848, all peers: [172.16.52.108:8847, 172.16.52.108:8848, 172.16.52.108:8849] 
 at com.alibaba.nacos.naming.consistency.persistent.raft.RaftPeerSet.local(RaftPeerSet.java:224)
 at com.alibaba.nacos.naming.monitor.PerformanceLoggerThread.collectMetrics(PerformanceLoggerThread.java:100)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:498)
 at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84)
 at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
 at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:93)
 at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266)   at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
 at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748)2020-04-08 09:25:30,001 ERROR Unexpected error occurred in scheduled task. 

查阅官方文档和各种博客,最我又将NACOS_SERVERS改成这样:

NACOS_SERVERS=nacos1:8847 nacos2:8848 nacos3:8849

启动,还是报错!查看naming-raft.log日志如下:

2020-04-08 10:05:10,562 INFO leader timeout, start voting,leader: null, term: 69
2020-04-08 10:05:15,000 WARN [IS LEADER] no leader is available now!
 2020-04-08 10:05:30,000 WARN [IS LEADER] no leader is available now!
 2020-04-08 10:05:30,062 INFO leader timeout, start voting,leader: null, term: 70

查看ncaos.log报错:

2020-04-08 10:06:59,989 INFO Using a shared selector for servlet write/read
 2020-04-08 10:07:00,006 ERROR Unexpected error occurred in scheduled task.java.lang.IllegalStateException: unable to find local peer: nacos1:0, all peers: [nacos2:8848, nacos1:8848, nacos3:8848]
 at com.alibaba.nacos.naming.consistency.persistent.raft.RaftPeerSet.local(RaftPeerSet.java:224)
 at com.alibaba.nacos.naming.monitor.PerformanceLoggerThread.collectMetrics(PerformanceLoggerThread.java:100)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:498)
 at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84)
 at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
 at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:93)
 at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
 at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748)
2020-04-08 10:07:00,028 INFO Tomcat started on port(s): 8848 (http) with context path '/nacos'
2020-04-08 10:07:00,033 INFO Started Nacos in 9.407 seconds (JVM running for 10.228)

根据上述报错信息,最终将NACOS_SERVERS改成这样:

NACOS_SERVERS=nacos1:8848 nacos2:8848 nacos3:8848

集群创建成功了!

问题:这里填写hostname可以理解,为什么不能填写hostname对应暴露出去的端口呢?

参考如下资料:

https://www.jianshu.com/p/3014b9a4eef2

https://nacos.io/zh-cn/docs/quick-start-docker.html



补充:

nginx的配置文件:


nginx.conf
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,907评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,546评论 1 289
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,705评论 0 238
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,624评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,940评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,371评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,672评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,396评论 0 195
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,069评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,350评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,876评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,243评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,847评论 3 231
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,004评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,755评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,378评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,266评论 2 259

推荐阅读更多精彩内容