搭建ETCD集群

查看NODE1机器IP,并启动ETCD

ubuntu@docker-node1:~$ ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1450
inet 172.16.1.15 netmask 255.255.255.0 broadcast 172.16.1.255
inet6 fe80::f816:3eff:fe33:11a8 prefixlen 64 scopeid 0x20<link>
ether fa:16:3e:33:11:a8 txqueuelen 1000 (Ethernet)
RX packets 11765471 bytes 10784121723 (10.0 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 10697881 bytes 7319647448 (6.8 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ubuntu@docker-node1:~$ wget http://192.168.9.251:9000/software/etcd-v3.0.12-linux-amd64.tar.gz
ubuntu@docker-node1:~$ tar zxvf etcd-v3.0.12-linux-amd64.tar.gz
ubuntu@docker-node1:~$ cd etcd-v3.0.12-linux-amd64
ubuntu@docker-node1:~$ nohup ./etcd --name docker-node1 --initial-advertise-peer-urls http://172.16.1.15:2380 \
--listen-peer-urls http://172.16.1.15:2380 \
--listen-client-urls http://172.16.1.15:2379,http://127.0.0.1:2379 \
--advertise-client-urls http://172.16.1.15:2379 \
--initial-cluster-token etcd-cluster \
--initial-cluster docker-node1=http://172.16.1.15:2380,docker-node2=http://172.16.1.36:2380 \
--initial-cluster-state new&

查看NODE2机器IP、启动ETCD,并ETCD健康检查

ubuntu@docker-node2:~$ ifconfig eth0
eth0 Link encap:Ethernet HWaddr fa:16:3e:ec:fc:12
inet addr:172.16.1.36 Bcast:172.16.1.255 Mask:255.255.255.0
inet6 addr: fe80::f816:3eff:feec:fc12/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1450 Metric:1
RX packets:18479729 errors:0 dropped:0 overruns:0 frame:0
TX packets:16843586 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:7717777368 (7.7 GB) TX bytes:6506041953 (6.5 GB) ubuntu@docker-node2:~$ wget http://192.168.9.251:9000/software/etcd-v3.0.12-linux-amd64.tar.gz
ubuntu@docker-node2:~$ tar zxvf etcd-v3.0.12-linux-amd64.tar.gz
ubuntu@docker-node2:~$ cd etcd-v3.0.12-linux-amd64
ubuntu@docker-node2:~$ nohup ./etcd --name docker-node2 --initial-advertise-peer-urls http://172.16.1.36:2380 \
--listen-peer-urls http://172.16.1.36:2380 \
--listen-client-urls http://172.16.1.36:2379,http://127.0.0.1:2379 \
--advertise-client-urls http://172.16.1.36:2379 \
--initial-cluster-token etcd-cluster \
--initial-cluster docker-node1=http://172.16.1.15:2380,docker-node2=http://172.16.1.36:2380 \
--initial-cluster-state new& ubuntu@docker-node2:~/etcd-v3.0.12-linux-amd64$ ./etcdctl cluster-health
member cd18d4410e46bbd1 is healthy: got healthy result from http://172.16.1.36:2379
member d05d0bbb1534c7ee is healthy: got healthy result from http://172.16.1.15:2379
cluster is healthy

修改docker配置文件支持etcd,重启docker

查看配置文件位于哪里

systemctl show --property=FragmentPath docker

编辑配置文件内容,接收所有IP请求

sudo vim /usr/lib/systemd/system/docker.service

修改配置ExecStart ,在后面追加 --cluster-store=etcd://172.16.1.36:2379 --cluster-advertise=172.16.1.36:2375

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=etcd://172.16.1.36:2379 --cluster-advertise=172.16.1.36:2375

重新加载配置文件,重启DOCKER DAEMON

sudo systemctl daemon-reload
sudo systemctl restart docker

两台服务器都需要上述操作

创建全局网络,并在网络中添加容器

创建全局网络

ubuntu@docker-node1:~$ sudo docker network ls
NETWORK ID NAME DRIVER SCOPE
0e7bef3f143a bridge bridge local
a5c7daf62325 host host local
3198cae88ab4 none null local
ubuntu@docker-node1:~$ sudo docker network create -d overlay demo
3d430f3338a2c3496e9edeccc880f0a7affa06522b4249497ef6c4cd6571eaa9
ubuntu@docker-node1:~$ sudo docker network ls
NETWORK ID NAME DRIVER SCOPE
0e7bef3f143a bridge bridge local
3d430f3338a2 demo overlay global
a5c7daf62325 host host local
3198cae88ab4 none null local
ubuntu@docker-node1:~$ sudo docker network inspect demo
[
{
"Name": "demo",
"Id": "3d430f3338a2c3496e9edeccc880f0a7affa06522b4249497ef6c4cd6571eaa9",
"Scope": "global",
"Driver": "overlay",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "10.0.0.0/24",
"Gateway": "10.0.0.1/24"
}
]
},
"Internal": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]

添加容器

在node1上添加cli1.yaml,内容如下,网络指定为上面创建的全局网络

version: '2'
services:
cli:
container_name: cli
image: hyperledger/fabric-tools:raft
tty: true
working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer networks:
default:
external:
name: demo

在node2上添加cli2.yaml,内容如下,网络指定为上面创建的全局网络

version: '2'
services:
cli2:
container_name: cli2
image: hyperledger/fabric-tools:raft
tty: true
working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer networks:
default:
external:
name: demo

利用docker-compose分别启动两个节点。

docker-compose -f cli1.yaml up -d

docker-compose -f cli2.yaml up -d

查看demo网络详情,可以看到两个容器已经加入同一网络。

ubuntu@docker-node1:~$ sudo docker network inspect demo
[
{
"Name": "demo",
"Id": "9dc055222c85e1ca09db6d66910c1dba27d342e070f1ca6f976533071344e939",
"Created": "2018-05-23T10:44:36.454709725+08:00",
"Scope": "global",
"Driver": "overlay",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "10.0.0.0/24",
"Gateway": "10.0.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Containers": {
"21da2d4d9b55e60b4636d7d0a9e7513b47784be55990ba46288a29a527ba470e": {
"Name": "cli",
"EndpointID": "411418d95a303f0452415e0481fc11ac41d6755e9680e042042f2afd93f62cca",
"MacAddress": "02:42:0a:00:00:03",
"IPv4Address": "10.0.0.3/24",
"IPv6Address": ""
},
"ep-6725169b38e657bd6cef4d1b1cdf530575b7caf78f78a037d21c65eb2c90e6ab": {
"Name": "cli2",
"EndpointID": "6725169b38e657bd6cef4d1b1cdf530575b7caf78f78a037d21c65eb2c90e6ab",
"MacAddress": "02:42:0a:00:00:02",
"IPv4Address": "10.0.0.2/24",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]

Docker跨主机网络联通之etcd实现的更多相关文章

  1. Docker跨主机网络——overlay

    前言 在Docker网络--单host网络一文中,我为大家总结了Docker的单机网络相关知识和操作,单机网络比较容易.本文我为大家总结Docker跨主机通信相关知识.同样本文大部分内容以CloudM ...

  2. Docker 跨主机网络

    Docker提供两种原生的跨主机网络: Overlay  和  Macvlan libnetwork & CNM libnetwork 是 docker 容器网络库,最核心的内容是其定义的 C ...

  3. Docker 跨主机网络 overlay(十六)

    目录 一.跨主机网络概述 二.准备 overlay 环境 1.环境描述 2.创建 consul 3.修改 docker 配置文件 4.准备就绪 三.创建 overlay 网络 1.在 host1 中创 ...

  4. Docker跨主机网络实践

    Docker使用中网络管理是最麻烦的,在项目初始化前期就需要进行合理的规划,如果在比较理想的单主机的网络通信是比较简单的,但如果涉及到跨主机的网络就需要使用docker自带的overlay netwo ...

  5. docker 跨主机网络:overlay 简介

    简介 docker 在早前的时候没有考虑跨主机的容器通信,这个特性直到 docker 1.9 才出现.在此之前,如果希望位于不同主机的容器能够通信,一般有几种方法: 使用端口映射:直接把容器的服务端口 ...

  6. Docker 跨主机网络方案分析

    PS:文章首发公众号,欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家. 上篇文章介绍了容器网络的单主机网络,本文将进一步介绍多 ...

  7. Docker跨主机网络解决方案

    前言:前面的部分一直都是单机跑docker,但实际生产环境不可能只用一台来跑.肯定会用到多台,因为他们都是内部私有ip,那么多台主机之间的容器如何通信?这个是个很头疼的问题!目前主流几种方法如下:1. ...

  8. 安装docker跨主机网络flannel

    一.实验环境 机器 操作系统 安装服务 172.16.4.36 centos7 docker etcd flannel 172.16.4.37 centos7 docker etcd flanne ( ...

  9. centos7下安装docker(15.2跨主机网络-overlay)

    为支持容器跨主机通信,Docker提供了overlay driver,使用户可以创建基于VxLAN的overlay网络.VxLAN可将二层数据封装到UDP进行传输,VxLAN提供与VLAN相同的以太网 ...

随机推荐

  1. 安装pwntools及对于解决问题方法搜索的经验总结

    安装pwntools 按照网站(https://www.cnblogs.com/xiao3c/p/6799745.html) 中的教程进行安装 下载pwntools 输入命令 git clone ht ...

  2. Xamarin.Forms 自定义 TapGestureRecognizer 附加属性

    While creating Xamarin.Forms applications, definitely you are going to need TapGestureRecognizer oft ...

  3. Firefox 安装 Adobe Flashplayer

    3. 安装Adobe Flash Player: Adobe Flash Player的安装比较容易,只要将对应的文档复制到正确的的位置即可,具体的操作 如下: (1) 将libflashplayer ...

  4. 关于IE浏览器 ajax 请求返回数据不对的问题

    在使用ajax向后台发送请求的时候,在使用ie 进行调试的时候发现根据条件进行查询时,返回的数据与没有根据条件进行查询时数据相同,也就是条件没有发生作用. 经过同事的帮助发现ajax初始化设置时没有c ...

  5. talend工具中往oracle插数据报ORA-01461: can bind a LONG value only for insert into a LONG colum

    今天使用talend往oracle插数据报ORA-01461: can bind a LONG value only for insert into a LONG column 数据源是mysql,开 ...

  6. Vue学习2:模板语法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. centos7 安装php7,报错cannot get uid for user nginx

     

  8. Centos7 pcs pacemaker高可用安装配置详解

  9. laravel composer

    composer config -g repo.packagist composer https://packagist.phpcomposer.com 改安装包的全局镜像网址

  10. Maven不能下载SNAPSHOT包但是能下载RELEASE包的解决办法

    在使用过程中,Maven默认配置是不能下载SNAPSHOT包的,这是基于一种代码稳定性进行考量得出的结论.引入SNAPSHOT包最大的问题就是,由于SNAPSHOT允许重复上传,所以引用一个这样的包开 ...