MySQL on Docker: Multi-Host Networking for MySQL Containers

1月 28th, 2017

这篇文章会在基于Calico网络驱动的多台宿主机上部署MySQL Replication;

Docker v1.12版本的Swarm模式是一个原生的编排工具,然而它不支持其它的网络插件(比如Calico,Weave,Flannel);如果想要运行这些网络插件,必须在Swarm模式外面运行,并且使用其它的编排工具(Kubernetes, Mesos 或者 Docker Swarm);

Calico不能被称为”overlay network”,这意味着它不会将一个数据包封装在另一个数据包中;它使用纯第3层方法,并避免与第2层解决方案相关联的数据包封装,这简化了诊断,减少了传输开销并提高了性能;Calico还实现BGP协议,用于与纯IP网络相结合的路由,从而允许虚拟网络的因特网扩展;

— 测试环境,三台宿主机都安装了Docker引擎v1.12.3版本;
192.168.10.201 docker1.htsec.com docker1
192.168.10.202 docker2.htsec.com docker2
192.168.10.203 docker3.htsec.com docker3

— Key-Value存储(etcd);
etcd是一个开源的分布式键值存储,主要用于配置共享和服务发现;一个简单的应用场景是存储数据库的连接或者是特性标示;

Calico需要etcd进行操作;etcd可以使用多个实例进行集群,例子中使用三个节点的etcd集群来保证高可用性;

1.分别安装etcd包;
yum install -y etcd;

2.修改相应的配置文件;
[root@docker1 ~]# vi /etc/etcd/etcd.conf
ETCD_NAME=etcd1
ETCD_LISTEN_PEER_URLS=”http://0.0.0.0:2380″
ETCD_LISTEN_CLIENT_URLS=”http://0.0.0.0:2379″
ETCD_INITIAL_ADVERTISE_PEER_URLS=”http://192.168.10.201:2380″
ETCD_INITIAL_CLUSTER=”etcd1=http://192.168.10.201:2380,etcd2=http://192.168.10.202:2380,etcd3=http://192.168.10.203:2380″
ETCD_INITIAL_CLUSTER_STATE=”new”
ETCD_INITIAL_CLUSTER_TOKEN=”etcd-cluster-1″
ETCD_ADVERTISE_CLIENT_URLS=”http://0.0.0.0:2379″

[root@docker2 ~]# vi /etc/etcd/etcd.conf
ETCD_NAME=etcd2
ETCD_LISTEN_PEER_URLS=”http://0.0.0.0:2380″
ETCD_LISTEN_CLIENT_URLS=”http://0.0.0.0:2379″
ETCD_INITIAL_ADVERTISE_PEER_URLS=”http://192.168.10.202:2380″
ETCD_INITIAL_CLUSTER=”etcd1=http://192.168.10.201:2380,etcd2=http://192.168.10.202:2380,etcd3=http://192.168.10.203:2380″
ETCD_INITIAL_CLUSTER_STATE=”new”
ETCD_INITIAL_CLUSTER_TOKEN=”etcd-cluster-1″
ETCD_ADVERTISE_CLIENT_URLS=”http://0.0.0.0:2379″

[root@docker3 ~]# vi /etc/etcd/etcd.conf
ETCD_NAME=etcd3
ETCD_LISTEN_PEER_URLS=”http://0.0.0.0:2380″
ETCD_LISTEN_CLIENT_URLS=”http://0.0.0.0:2379″
ETCD_INITIAL_ADVERTISE_PEER_URLS=”http://192.168.10.203:2380″
ETCD_INITIAL_CLUSTER=”etcd1=http://192.168.10.201:2380,etcd2=http://192.168.10.202:2380,etcd3=http://192.168.10.203:2380″
ETCD_INITIAL_CLUSTER_STATE=”new”
ETCD_INITIAL_CLUSTER_TOKEN=”etcd-cluster-1″
ETCD_ADVERTISE_CLIENT_URLS=”http://0.0.0.0:2379″

3.分别启动docker1,docker2和docker3上的etcd服务;
systemctl start etcd.service
systemctl enable etcd.service

4.检查etcd集群状态;
[root@docker1 ~]# etcdctl member list
29868e609fc76b11: name=etcd3 peerURLs=http://192.168.10.203:2380 clientURLs=http://0.0.0.0:2379 isLeader=false
6ebf0a399d4f3850: name=etcd1 peerURLs=http://192.168.10.201:2380 clientURLs=http://0.0.0.0:2379 isLeader=true
af11bb15f5145af9: name=etcd2 peerURLs=http://192.168.10.202:2380 clientURLs=http://0.0.0.0:2379 isLeader=false
[root@docker1 ~]# etcdctl cluster-health
member 29868e609fc76b11 is healthy: got healthy result from http://0.0.0.0:2379
member 6ebf0a399d4f3850 is healthy: got healthy result from http://0.0.0.0:2379
member af11bb15f5145af9 is healthy: got healthy result from http://0.0.0.0:2379
cluster is healthy

— 安装Calico;
1.下载Calico并使它可执行;
$ wget http://www.projectcalico.org/builds/calicoctl -P /usr/local/bin
$ chmod +x /usr/local/bin/calicoctl

2.在docker1上创建calico节点,指定Docker宿主机的IP地址;

docker run -d –restart=always –net=host –privileged –name=calico-node \
-e HOSTNAME=docker1.htsec.com -e IP=192.168.10.201 \
-e IP6= -e CALICO_NETWORKING_BACKEND=bird -e AS= -e NO_DEFAULT_POOLS= \
-e ETCD_AUTHORITY=127.0.0.1:2379 -e ETCD_SCHEME=http \
-v /var/log/calico:/var/log/calico -v /lib/modules:/lib/modules \
-v /var/run/calico:/var/run/calico \
calico/node:latest

docker run -d –restart=always –net=host –privileged –name=calico-node \
-e HOSTNAME=docker2.htsec.com -e IP=192.168.10.202 \
-e IP6= -e CALICO_NETWORKING_BACKEND=bird -e AS= -e NO_DEFAULT_POOLS= \
-e ETCD_AUTHORITY=127.0.0.1:2379 -e ETCD_SCHEME=http \
-v /var/log/calico:/var/log/calico -v /lib/modules:/lib/modules \
-v /var/run/calico:/var/run/calico \
calico/node:latest

docker run -d –restart=always –net=host –privileged –name=calico-node \
-e HOSTNAME=docker3.htsec.com -e IP=192.168.10.203 \
-e IP6= -e CALICO_NETWORKING_BACKEND=bird -e AS= -e NO_DEFAULT_POOLS= \
-e ETCD_AUTHORITY=127.0.0.1:2379 -e ETCD_SCHEME=http \
-v /var/log/calico:/var/log/calico -v /lib/modules:/lib/modules \
-v /var/run/calico:/var/run/calico \
calico/node:latest

TODO:
http://severalnines.com/blog/mysql-docker-multi-host-networking-mysql-containers-part-2-calico

标签:
目前还没有任何评论.