前奏
公司又小又穷还想搞大数据,怎么办?用虚拟机呀,m呀,虚拟机是什么,vbox?vmware还是hyper-v?还是没听过的kvm、Xen。都滚蛋 ,docker 吧,docker也是虚拟机,操作系统简化到了极致,还能自定义构建,又能在非图形化界面操作,linux你懂的。
docker 搭建集群,这个不用说网上很多都会吧,有个问题就是网络通信问题,docker 容器相互隔离。怎么通信呢,别怕docker 有 network 创建新的网络命名空间,这样同一个网络命名空间下的容器可以相互通信了。这些都是网上学来的。没错 ,用了这个,集群真的就可以用了。
问题又来了,我想客户端访问集群,开始脑残认为,连接到namenode节点的50070和9000就可以实现,于是网上找怎么动态添加端口映射,网上不同人给了不通方法,iptables 修改、直接进容器该、删了容器重新构建时docker命令添加。于是都试了个遍,最后那种不太现实,容器里面添加没成功,iptables添加50070映射成功了能访问,添加9000成功但是怎么也访问不了,后来各种查各种尝试是否权限问题,后来怀疑到iptables上,删除重新下了个iptables,悲剧发生了,网上一搜,“千万不要删iptables”很多很多。…这里省略几百字
后来想了下,hadoop集群其实有个过程,name节点 把node节点的ip给客户端,客户端找node,node 接口并没有暴露出来,于是客户端肯定找不到。所以唯一处理办法,就是把节点的ip 和宿主机ip 弄到统一网段。
于是百度,linux docker ip怎么和宿主机同一网段\客户端访问linux docker 集群\docker桥接物理网络。写这样的文章很多,有用到/etc/sysconfig/docker 改OPTIONS 还有用到 brctl工具,这期间会接触到
ip\ipconfig\brctl\iptables\route\netstat 你会发现好多都没听过用过,一个个学习,后来还了解 veth这个东西,一搜了解docker的网络模型,花了几周时间,没结果啊,快怀疑人生了。
后来尝试用谷歌搜了下,也是很多,把第一面的都保存下来估计7八篇的样子,第二天看,当时很烦了,不想看了。今天就是第二天,哈哈,就刚才试了下成功了,不废话了就下面一个链接:
解决方法
参考那个网址就可以了,自己的也整理下
工具 ip(一般自带有)和pipework(这个需要下载)
ip addr del dev eth0 192.168.0.143/24
ip link add link eth0 dev br0 type macvlan mode bridge
ip addr add 192.168.0.143/24 dev br0
ip link set dev br0 up
ip route add default via 192.168.0.1 dev br0
docker run --name nettest -itd centos bash
pipework br0 nettest 192.168.0.241/24@192.168.0.1
同一局域网的任何操作系统ping 192.168.0.241就ok了,剩下的是给集群节点分配ip
这里注意点每个节点的/etc/hosts, 用的是外面的ip192.168那个,不是172开头的nat转换的ip.
感言
感谢那位爷,能让炎热的阳光也那么绚烂。同志们,百度真的垃圾,用google吧。