现在还有好多人不知道docker联网,接下来我们小编就来分享一下。
docker联网
作者|陈郁
最近,TDengine的一个社区群爆发了严重的灌水事件。几个群友聊个没完,可以说是废寝忘食。那么什么话题能让他们在凌晨四点还忘我地讨论呢?
本主题是——如何在Docker环境下改进TDengine的集群构建。“什么?除了你官方自己的人,用户如何加班讨论如何完善Docker环境的集群建设?这太假了。”
好了,我们承认吧:其实有个叫Oliver(群昵称)的用户就遇到过这样的问题——辛辛苦苦做出来的Docker环境下的TDengine集群,在客户端连不上。接下来引发了群里两位热心大佬的讨论,直到想出了最终的解决方案。
故事是这样的:
用户的数据库集群安装在这个Linux服务器上(ip:10.0.31.2),容器ip所在的网络是主机中Docker创建的虚拟网络172.19.0.0/16。三个容器的主机名和节点ip分别是:taosnode1(172.19.0.41)、taosnode2(172.19.0.42)和taosnode3(172.19.0.43)。
每个节点的配置如下:
taos node 1:first EP = taos node 1:6030,secondEp=taosnode2:6030,fqdn = taosnode1端口映射:16030-16042:6030-6042(TCP/UDP)taos node 2:first EP = taos node 1:6030,secondep = taosnode2: 6030,FQDN = taos node 2;端口映射:26030-26042:6030-6042(TCP/UDP)taos node 3:first EP = taos node 1:6030,secondep = taosnode2: 6030,FQDN = taos node 3;端口映射:36030-36042:6030-6042(tcp/udp)
奥利弗按照官方文件的指示,经过努力,终于成立了这个集群。添加完节点后,他战战兢兢地敲下了“show dnodes ”,并且用了三个现成的——舒服。
服务器没有问题,然后就轮到客户端了。他打开自己的ip为10.0.31.5的Windows主机(与集群主机同一个网段),迅速在上面安装了一个TDengine客户端,添加主机信息,做好路由,2.8MB,傻瓜式安装,轻松便捷,一气呵成连接集群。“show dnodes”再次进入视野,有三个准备好了——又很舒服了。
奥利弗非常满意,然而,他马上发现事情可能不像他想的那么简单。
因为业务需要,他还需要完成客户端(10.0.2.61)跨网段连接服务器集群(基于ip的Docker环境下的集群:10.0.31.2)。Ping主机,telnet到集群映射的端口,使用taos连接集群,同样的操作和之前一样流畅。于是他又点击了“显示dnodes”——没想到出现了“DB错误:无法建立连接”,这是所有TDengine用户都深恶痛绝的。于是,他在群里抛出了自己的问题。
上面提到的那两个热心的同学就在这个时候出现了。一个是TDengine-Freemine的外部贡献者。另一个是pigwing,一个看到问题就帮忙的热心大佬。
因为集群本身没有使用问题,唯一的区别就是客户端连接服务器的方式变成了跨网段。所以,一开始大家的想法是——既然主机的端口不能工作,那就试试在Docker环境下直接连接ip。遗憾的是,Docker环境下跨网段连接内部ip的想法并没有实现。
然后大家推测,TDengine是靠端点(EP)来识别数据节点的,EP=FQDN+端口。但是客户端连接已经成功,但是数据无法操作。当FQDN正确时,所有人都猜测集群中的端口有问题,因此他们没有获得集群的拓扑信息。接下来,从最初对环境的了解,到一步一步的排查,3个执着的工程师从4月22日到4月25日在群里讨论,最晚凌晨4点就有人上线了。
最终,在三人的齐心协力下,4月24日凌晨1点,Freemine提出了有效的最终解决方案(字数过多,只截图关键部分)
你完了。考完试,一切顺利!
那么,freemine的集群构建方案和原来的集群构建有什么区别呢?
虽然过程曲折,但最后我们会发现,两者唯一的区别就是端口配置。Freemine的方案是在每个服务器端口中修改不同的值。taosnode1节点的Serverport为6030——映射主机的6030端口;taosnode2节点的Serverport是7030——映射主机的7030端口;taosnode3节点的Serverport是8030–映射主机的8030端口。
而提问者Oliver的每个节点原来的serverport是未修改的默认6030,映射到主机时是16030,26030,36030。当客户端连接到群集主机的同一个网段时,此配置不会导致问题,但当它跨网段连接时会导致问题。
似乎一个小小的改变就能产生如此大的影响?为什么?
实际上,当客户端和服务器属于同一个网段时,添加路由后,客户端可以直接访问Docker。这样,就可以根据需要正确解析IP地址。如:taosnode1(172.19.0.41),taosnode2(172.19.0.42),taosnode3(172.19.0.43)。在不同的IP地址下,即使端口都是相同的6030,TDengine仍然可以区分不同的节点。
但是,跨网段就不一样了。对于不同网段的客户端和服务器,客户端要通过真实路由连接到服务器,而我们设置的Docker内网并没有在真实路由中注册,客户端自然无法访问Docker内网。因此,当taosc需要获取集群提供的不同节点的信息时,FQDN无法正确解析IP地址。这时候就需要通过端口来区分不同的节点。
这也是Docker环境下节点不能同时使用6030端口的原因。
所以当你使用Docker主机内外一致的端口映射,并且每个节点的serverPort参数设置不同时,集群可以通过不同的端口来区分不同的节点。通过这种方式,客户端可以获得集群平稳运行的拓扑信息。
这是整个“案件”的最终答案。
综上所述,对于用户来说,Docker环境下构建TDengine集群的水还是挺深的。因为环境相对复杂,所以我们不建议您用这种方式构建集群。所以大家在Docker环境下使用TDengine要谨慎。
最后,我们想说,作为一款开源产品,社群的活跃度和专业性是淘思数据最关注的地方。目前官网上还没有关于Docker环境下建立TDengine集群的文档。但这些社区用户的活跃思维显然在很大程度上填补了这样一个空白。
衷心感谢奥利弗、freemine和pigwing。希望以后能继续看到你活跃在物联网大数据技术的前沿,也希望能有更多的朋友参与进来。
Wx加小T(tdengine)为好友,可以在群里和热衷开源的朋友互动~
点击“了解更多”查看Oliver关于Docker环境下TDengine集群构建的笔记。
以上就是我们介绍的docker联网_docker 网络,更多请关注我了解更多的安防知识!!如果您需要安装,还可以拨打主页上的☏☏☏☏。