前言
上一篇文章我们部署了单一宿主机下的一套服务,这仅限于个人环境或者测试环境搭建,真正的生产环境下所有的服务必然是在不同的宿主机上(否则微服务就没有意义了),我们提到通过搭建docker swarm集群来实现容器的跨主机通信
阶段
该文档为第二阶段——集群部署
该阶段更加贴合实际的生产环境,我们将所有服务都分散在不同的宿主机上,再通过网络互联,最后只将网关等有需要的服务暴露出去即可
环境准备
虚拟机3台(centOS7)
安装docker
部署架构
主机 | ip | 集群角色 | 部署服务 |
---|---|---|---|
hyper1 | 10.18.32.215 | manager | 注册中心、配置中心、网关 |
hyper2 | 10.18.32.161 | worker | mysql, redis, nginx |
hyper3 | 10.18.32.68 | worker | 子服务A、子服务B |
集群搭建
-
在hyper1上执行集群初始化命令
docker swarm init #返回如下token信息,则其他主机通过该代码加入集群 #docker swarm join --token SWMTKN-1-0oxo6qrxwvl8xlneq0jqz2zd87nkj7c0vyf1h9m8kcj3qbzd4v-3eu9zb5athq0s2n79rncbejb1 ip:port
-
hyper2、hyper3加入集群
加入集群时建议关闭防火墙,或者暴露指定端口
之后在hyper1输入docker node ls
查看集群信息 -
在hyper1创建共享网络
docker network create -d overlay --attchable test-swarm #注意网络类型与上文不同,是overlay
部署调整
- redis、mysql及各服务通过–network 加入test-swarm网络
- 各服务可直接通过配置redis、mysql容器名连接对应数据库(之前只能通过暴露在161宿主机上的端口来访问)
- 各服务可直接通过配置eureka容器名,将服务注册到其他宿主机的注册中心上
后记
至此,我们只是在之前的基础上搭建一个集群,略微做了点调整,就可以将服务任意地部署在不同的宿主机上,这更加符合真实的生产环境。
docker部署相比于传统的部署方式方便快捷(不用安装mysq,redis、jdk,升级方便,部署过程更加个性化,甚至可以感受到部署过程中的趣味 )。
但是为了搭建高可用的微服务体系,我们往往需要部署多个注册中心保证实例注册和获取的稳定性、多个网关用来做进一步负载以及网关服务的稳定性、多个子服务以缓解各服务的压力提高各服务的稳定性。
如果使用目前介绍的方式部署上述场景,则大量的docker命令明显不合理(传统方式就根本没法玩了),因此下篇文章我们使用docker stack命令进行更复杂场景的部署
上一篇:springcloud+vue docker部署记录—1
下一篇:springcloud+vue docker部署记录—3