IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    MySQL on Docker: Multi-Host Networking for MySQL Containers

    royalwzy发表于 2017-01-28 13:27:40
    love 0
    这篇文章会在基于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


沪ICP备19023445号-2号
友情链接