一、环境说明:

1.一台虚拟机,该系统已经装好了docker;

  ip 192.168.10.224 虚拟网卡,与主机互通

  操作系统rhel6 内核 2.6.32  64位

  docker版本 1.7.1

2.一台主机

  ip 192.168.10.103

  操作系统windows server 2008R  64位

  ningx版本 1.8.0

二、思路及部署图

consul-Server 是运行在docker里的consul实例的server模式,可以通过DNS或者HTTP接口使服务注册并对容器进行健康状态检查,consul-registrator可以通过监听docker的start和stop事件来获取启动的实例的端口和ip配置,并通过consul-server提供的api注册接口注册到consul服务里。这里有一点需要注意,docker的restart方法貌似监视不到。另外比consul-registrator先启动的实例,也是无法监听到的,所以在部署的时候需要注意一下启动顺序。这里已经把最重要的一部分,自动监听注册docker实例的ip和端口完成了,接下来需要借助consul-template将consul-server中注册的服务拉去同步并写到nginx配置中,再重新启动nginx就可以了。consul-template会实时监控consul-server中的服务和状态,将新添加的服务和已经移除的服务,通过一个配置的模板写到一个指定的文件中,这里我们指定的文件就是nginx的配置了。另外介绍一下ngingx,它是可以热启动的,也就是在工作状态下重新加载配置,主要是nginx启动时会开启俩个实例,一个master实例监控配置信息,另外一个实例做负载和转发。整体思路就是这样,有需要了解其具体技术的,博客园里有很多介绍,这里就不具体再介绍了。

三、步骤

1.配置docker阿里云加速

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://96x7opee.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

2.下载需要用到的docker镜像,order

sudo docker pull registry.cn-hangzhou.aliyuncs.com/hw/consul-registrator:1.0.0

sudo docker pull registry.cn-hangzhou.aliyuncs.com/hw/consul-server:1.0.0

sudo docker pull registry.cn-hangzhou.aliyuncs.com/hw/order:1.0.0

3.启动consul-server

docker run -d -p : -p : -p :/udp --name consul-server-node1  registry.cn-hangzhou.aliyuncs.com/hw/consul-server:1.0. -bootstrap -advertise 192.168.10.224

4.启动consul-registrator

docker run -d --name=consul-registrator-node1 --net=host --volume=/var/run/docker.sock:/tmp/docker.sock  registry.cn-hangzhou.aliyuncs.com/hw/consul-registrator:1.0.  consul://0.0.0.0:8500

5.部署一个order镜像

docker run -d -p : --name order1 order

6.配置模板,启动consul-template

events {
worker_connections ;
} http {
include mime.types;
default_type application/octet-stream;
sendfile on;
{{range services}} {{$name := .Name}} {{$service := service .Name}}
upstream {{$name}} {
{{range $service}}server {{.Address}}:{{.Port}} max_fails= fail_timeout= weight=;
{{else}}server 127.0.0.1:; # force a {{end}}
} {{end}} server {
listen default_server; location / {
root /usr/share/nginx/html/;
index index.html;
} location /stub_status {
stub_status;
} {{range services}} {{$name := .Name}}
location /{{$name}}/ {
proxy_pass http://{{$name}}/;
}
{{end}}
}
}
F:\nginx-1.8.0\consul-template.exe  -consul-addr 192.168.10.224:8500 -template F:\nginx-1.8.0\conf\nginx-template.conf:F:\nginx-1.8.0\conf\nginx.conf:"nginx -s reload -p F:\\nginx-1.8.0"

注意后面的nginx -s reload -p F:\\nginx-1.8.0要在-p后面加上nginx目录位置否则会报日志目录无法找到的错误。

这里-consul-addr是刚才我们启动的consul-server的地址和端口,我们用网页可以打开有一个简单的界面。-template中冒号前面填写我们的模板路径,后面填写输出的位置。

7.启动nginx

启动前先测试一下配置文件是否正确。注意先cd到nginx的目录,否则就需要带参数去运行,具体可参见官网的文档。

F:\nginx-1.8.>nginx.exe -t

在验证没有问题后,就可以启动了。因为我配置是监听80端口,所以我先把IIS停掉了,不然这里会出错。

F:\nginx-1.8.>start nginx.exe

至此,所有配置就已经完成。我们在浏览器中输入http://192.168.10.103/order/api/values 来查看一下是否能顺利访问。

OK,这表示整个流程已经走通。我们来验证一下,是否能在docker启动新实例时自动注册到我们的nginx配置中。

首先我们在虚拟机terminal中输入 docker stop order1

在主机中浏览一下http://192.168.10.224:8500/ui我们的consul服务有没有将order移除

可以看到这个时候,order1是没有的,我们查看ngingx.conf能看到order也是被移除掉的。

浏览器访问http://192.168.10.103/order/api/values,也发现不能访问。

我们回来虚拟机上,在terminal里输入docker start order1,

再查看http://192.168.10.224:8500/ui,发现服务已经注册了order,我们在浏览器访问http://192.168.10.103/order/api/values,发现又能正常访问,nginx.conf配置中也重新把order节点加上。

本文原创,转载请注明出处。

使用docker+consul+nginx集成分布式的服务发现与注册架构的更多相关文章

  1. 基于Docker + Consul + Nginx + Consul-Template的服务负载均衡实现(转)

    转:https://www.jianshu.com/p/fa41434d444a 前言 上一篇文章使用 Consul 和 Registrator 在 docker 的容器环境中搭建了服务注册和发现集群 ...

  2. 我是服务的执政官-服务发现和注册工具consul简介

    服务发现和注册 我们有了两个服务.服务A的IP地址是192.168.0.1,端口9001,服务B的IP地址192.168.0.2,端口9002.我们的客户端需要调用服务A和服务B,我们只需要在配置文件 ...

  3. 服务发现和注册和Eureka

    一 Spring Cloud特点 # 约定优于配置 # 开箱即用,快速启动 # 适用于各种环境,可以部署在PC server或者 云环境 # 轻量级的组件 # 组件的支持很丰富,功能齐全 # 选型中立 ...

  4. SpringCloud微服务实战一:Spring Cloud Eureka 服务发现与注册中心(高可用实列为两个注册中心)

    微服务架构: 微服务架构的核心思想是,一个应用是由多个小的.相互独立的.微服务组成,这些服务运行在自己的进程中,开发和发布都没有依赖.不同服务通过一些轻量级交互机制来通信,例如 RPC.HTTP 等, ...

  5. nginx动态配置及服务发现那些事

    Reference: http://xiaorui.cc/2016/10/16/nginx%E5%8A%A8%E6%80%81%E9%85%8D%E7%BD%AE%E5%8F%8A%E6%9C%8D% ...

  6. 第2-1-1章 FastDFS分布式文件服务背景及系统架构介绍

    目录 1 背景 1.1 为什么需要分布式文件服务 1.1.1 单机时代 1.1.2 独立文件服务器 1.1.3 分布式文件系统 1.2 什么是FastDFS 2 系统架构 2.1 Tracker集群 ...

  7. docker+fastdfs+nginx 实现分布式大文件存储系统以及视频缓存播放

    废话不多说,直接开撸 首先是一些准备工作: 1.关闭防火墙 service iptables stop --- fastdfs虽然在docker部署,但是使用的是主机网络,所以关闭防火墙. 2  下载 ...

  8. Spring集成ignite,服务发现问题

    问题: 解决办法: 修改C:\Windows\System32\drivers\etc\hosts 配置主机名和ip对应关系: 试试!

  9. dubbo的服务发现和注册如何实现

    Dubbo通常我们是如何使用的? #================================================================================== ...

随机推荐

  1. node使用buffer生成图片

    buffer是node里的一个模块,这个模块的出现是因为js没有阅读和操作二进制数据流而出现的 buffer是什么及作用? Buffer顾名思义叫缓冲区,用于存储速度不同步的设备或优先级不同的设备之间 ...

  2. [转载] 应用于负载均衡的一致性哈希及java实现

    转载自http://blog.csdn.net/haitao111313/article/details/7537799 这几天看了几遍一致性哈希的文章,但是都没有比较完整的实现,因此试着实现了一下, ...

  3. python进阶------进程线程(一)

    Python中的进程线程 一.进程线程的概念 1.1进程: 进程就是一个程序在一个数据集上的一次动态执行过程.进程一般由程序.数据集.进程控制块三部分组成.我们编写的程序用来描述进程要完成哪些功能以及 ...

  4. 阿里Dubbo疯狂更新,关Spring Cloud什么事?

    最近,开源社区发生了一件大事,那个全国 Java 开发者使用最广的开源服务框架 Dubbo 低调重启维护,并且 3 个月连续发布了 4 个维护版本. 我上次在写放弃Dubbo,选择最流行的Spring ...

  5. 【小技巧解决大问题】使用 frp 突破阿里云主机无弹性公网 IP 不能用作 Web 服务器的限制

    背景 今年 8 月份左右,打折价买了一个阿里云主机,比平常便宜了 2000 多块.买了之后,本想作为一个博客网站的,毕竟国内的服务器访问肯定快一些.满心欢喜的下单之后,却发现 http 服务,外网怎么 ...

  6. Maven启动Java Web工程,8081和8086端口号被占用

    Maven启动Java Web工程, <!-- 配置tomcat插件 --> <build> <plugins> <plugin> <groupI ...

  7. 关于web程序中使用KindEditor向数据库插入带有格式的数据时出现的问题

    最近做一个项目,需要对输入的文字在存入数据库之前进行文本格式编辑,于是我用到了KindEditor,当然怎么用在asp.net页面中,这里就不过多叙述了. 主要是遇到在将赋予格式的文本插入数据库时遇到 ...

  8. 使用face_recognition批量识别图片中的人数

    #使用face_recognition实现从图片中选中人数并分别输出txtimport face_recognition import cv2 import os fin = 'D:\\Users\\ ...

  9. Java中常用加减密方式

    1.加密概述: 加密就是是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使以获得了加密的信息,但因不知解密方式,仍无法了解信息的内容.大体上又分为双向加密和单向加密. 2.单项加密 2.1.概 ...

  10. 08-图8 How Long Does It Take

    原题: Given the relations of all the activities of a project, you are supposed to find the earliest co ...