一、consul简介
1.1 什么是consul
consul是HashCorp公司推出使用go语言编写的开源工具,用于实现分布式系统的服务发现与配置
1.2 consul的特性:
服务发现:支持服务发现。你可以通过 DNS 或 HTTP 的方式获取服务信息。
健康检查:支持健康检查。可以提供与给定服务相关联的任何数量的健康检查(如 web 状态码或 cpu 使用率)。
K/V 存储:键/值对存储。你可用通过 consul 存储如动态配置之类的相关信息。多数据中心:支持多数据中心,开箱即用。内外网的服务采用不同的端口进行监听。
多数据中心集群可以避免单数据中心的单点故障,而其部署则需要考虑网络延迟,分片等情况等。
WEB-UI:支持 WEB-UI。点点点,你就能够了解你的服务现在的运行情况,一目了然,对开发运维是非常友好的。
二、consul集群服务的搭建
2.1 案例概述:
公司提出一个新需求,使用Docker将Consul、Consul Template、Registrator和Nginx组装成一个值得信任且可扩展的服务框架,可在这个框架中添加和移除服务,不需要重写任何配置,也不需要重启任何服务,一切都能正常运行。
2.2 环境
主机 | 安装工具 |
---|---|
consul服务器 主机ip 192.168.17.10 | Docker、Consul、Consul-template模板、nginx代理服务 |
容器服务器 主机ip 192.168.17.20 | Docker、registrator、nginx容器 |
2.3 Docker Compose容器编排
2.3.1、YAML是一种标记语言很直观的数据序列化格式
2.3.2、文件格式及编写注意事项:
不支持制表符tab键缩进,需要使用空格缩进
通常开头缩进2个空格
字符后缩进1个空格,如冒号、逗号、横杆
用#号注释
如果包含特殊字符用单引号引起来
布尔值必须用引号括起来
2.4 Docker Compose配置常用字段
字段 | 描述 |
---|---|
build dockerfile context | 指定Dockerfile文件名构建镜像上下文路径 |
image | 指定镜像 |
command | 执行命令,覆盖默认命令 |
container name | 指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale |
deploy | 指定部署和运行服务相关配置,只能在Swarm模式使用 |
environment | 添加环境变量 |
networks | 加入网络 |
ports | 暴露端口号,与-p相同,但端口号不能低于60 |
volume | 挂载宿主机路径或命令卷 |
restart | 重启策略,默认no,always,no-failure,unless-stoped |
hostname | 容器主机名 |
2.5 Docker Compose常用命令
字段 | 描述 |
---|---|
build | 重新构建服务 |
ps | 列出容器 |
up | 创建和启动容器 |
exec | 在容器里面执行命令 |
scale | 指定一个服容器启动数量 |
top | 显示容器进程 |
logs | 查看容器输出 |
down | 删除容器、网络、数据卷和镜像 |
stop/start/restart | 停止/启动/重启服务 |
2.6 案例部署
2.6.1 server1和server2安装docker (前面博客有步骤)
2.6.2 server1上安装Compose
上传docker-compose到/root目录下
[root@server1 ~]# cp -p docker-compose /usr/local/bin/ #将docker-compose移动到/usr/local/bin
[root@server1 ~]# chmod +x /usr/local/bin/docker-compose #加权限
[root@server1 ~]# mkdir compose_nginx/
[root@server1 compose_nginx]# yum -y install tree
[root@server1 compose_nginx]# tree ./
./
├── docker.compose.yaml #创建模板
├── nginx #创建nginx目录
│ ├── Dockerfile #复制容器脚本
│ ├── nginx