项目简介
随着虚拟化和容器技术的日趋成熟,Docker越来越受到人们的关注,目前Docker已经发展到1.10版本,并且已经可以在生产环境大规模部署。本文介绍EdgeScaler集群系统,使用Swarm+Docker+Registrator+Etcd+Confd+HAProxy搭建了一个可自动可扩展的docker集群。
应用场景
EdgeScaler能满足一下两种业务场景:
1. 提供APP服务器集群服务,并提供负载均衡,端口暴露,资源隔离等基本功能。
2. 为开发人员提供内部PaaS级的测试环境。
集群架构
在EdgeScaler中,我们使用swarm对集群进行管理,其架构如下:
其中:
- swarm管理集群可以使用主从节点提高管理节点高可用性,通过标准RESTFul API对管理需求提供服务。
- 由于Docker属于系统级别的虚拟化隔离,其功能特性依然依赖宿主机,目前在隔离性方面还有待完善,所以在实际生成环境中会将docker host运行在虚拟机中,虚拟机网络可以根据不同情况配置成互相隔离的专用网络,形成局部的封闭环境,保护物理主机的正常运行。
- 在本图中左侧虚拟机为单独的局域网络
组件描述
Swarm:版本号为1.1.2。Swarm是一个docker官方提供的服务,他可以将多个docker实例抽象成一个ip加端口的地址,供其他docker管理工具调用。
Docker:版本号为1.10.2,自1.9+版本以后docker支持overlay网络,此网络为swarm跨主机网络方案。
Registrator:为最新registrator镜像,Registrator为docker端口服务映射服务,它监听docker socket端口信息,并对信息进行整理,存入如Etcd这样的服务发现的K-V存储系统中。
Etcd:在分布式系统中,如何管理节点间的状态同样一直是一个难题,Etcd是专门为集群环境的服务发现和注册而设计,它提供了数据TTL失效、数据改变监视、多值、目录监听、分布式锁原子操作等功能,可以方便的跟踪并管理集群节点的状态。
Confd: Confd是一个轻量级的配置管理工具,通过定期从etcd中读出关心数据,并更新本地配置文件,同时reload读取配置文件的应用。
HAProxy: HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理。
集群搭建
环境准备
IP定义:
etcd_host:为发现服务集群IP地址
swarm_manager_host:为swarm管理节点IP地址
swarm_local_node_host:为swarm从节点本地IP地址
Docker 安装并配置
获取最新的docker程序curl -fsSL https://get.docker.com/ | sh
在所有swarm节点中配置docker daemon监听配置,使用nohup命令使daemon后台运行。
nohup docker daemon -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock –cluster-store etcd://etcd_host:2379 –cluster-advertise swarm_local_node_host:2375 &
-H 代表daemon监听所有2375端口的网络请求,并监听本地客户端socket请求信息
–cluster-store 指定发现服务系统
–cluster-advertise 广播本地节点服务地址启动后,可运行如下命令测试
docker version
获取swarm
最简单的获取安装swarm方法是直接拉去swarm镜像:docker pull swarm
Etcd集群搭建
在所有节点上搭建etcd服务发现系统,可从https://github.com/coreos/etcd/releases下载最新版本的Etcd,并用如下shell脚本运行Etcd服务,推荐节点数目>3并且为奇数。NAME=infra0 MASTER_NAME=infra0 SLAVE_NAME_1=infra1 SLAVE_NAME_2=infra2 LOCAL_IP=10.192.33.92 MASTER=10.192.33.34 SLAVE_IP_1=10.192.33.92 SLAVE_IP_2=10.192.33.94 etcd -name $NAME -initial-advertise-peer-urls http://$LOCAL_IP:2380 \ -listen-peer-urls http://$LOCAL_IP:2380 \ -listen<