构建自动发现的Docker服务架构

------------恢复内容开始------------

建立consul服务

在建立consul服务中,每个提供服务的节点(在Docker主机上)都要部署和运行consul的client,server和client agent 节点的集合构成consul cluster。
consul agent的两种运行模式:server和client,这里的server的client只是consul集群层面的区分,与搭建在cluster智商的应用服务无关。以server模式运行的consul agent 节点用于维护consul集群的状态

consul集群部署

  • consul高可用:三台可运许坏一台,五台可运许坏两台
    构建自动发现的Docker服务架构

1:consul 192.168.200.11 nginx,consul,consul-template
2:docker01 192.168.200.14 docker-ce,registrator
3: docker02 192.168.200.10 docker-ce,registrator

  • agent:运行一个consul代理
  • -server:切换代理到服务器模式
  • -bootstrap:用于控制一个server是否在bootstrap模式,在一个datacenter中只能有一个server处于bootstrap模式,当一个server处于bootstrap模式时,可以自己选举为raft leader
  • -data-dir:参数指定数据存储目录
  • -bind:还地址用来在集群内部的通讯,集群内所有节点到地址都必须是可达的默认0.0.0.0
  • ui:支持图形界面
  • -data-dir:指定数据目录
  • bind:监听ip
  • -client:可以来自任意地址
[root@consul ~]# unzip consul_0.9.2_linux_amd64.zip 
Archive:  consul_0.9.2_linux_amd64.zip
  inflating: consul                   bad CRC 7dec9211  (should be a8ed58e8)
[root@consul ~]# mv consul /usr/bin/
[root@consul ~]# nohup consul agent -server -bootstrap -ui -data-dir=/var/lib/consul-data -bind=192.168.200.11 -client=0.0.0.0 -node=consul-server01 &> /var/log/consul.log &

[root@consul ~]# consul members  #查看集群成员
Node             Address              Status  Type    Build  Protocol  DC
consul-server01  192.168.200.11:8301  alive   server  0.9.2  2         dc1
[root@consul ~]# consul info   #查看详细信息
[root@consul ~]# consul info  | grep leader  #本机领导者
	leader = true
	leader_addr = 192.168.200.11:8300
[root@consul ~]# consul catalog services  #查看consul所管理的服务
consul
[root@consul ~]# netstat -lnptu | grep consul  #查看consul所有端口
tcp        0      0 192.168.200.11:8300     0.0.0.0:*               LISTEN      12895/consul        
tcp        0      0 192.168.200.11:8301     0.0.0.0:*               LISTEN      12895/consul        
tcp        0      0 192.168.200.11:8302     0.0.0.0:*               LISTEN      12895/consul        
tcp6       0      0 :::8500                 :::*                    LISTEN      12895/consul        
tcp6       0      0 :::8600                 :::*                    LISTEN      12895/consul        
udp        0      0 192.168.200.11:8301     0.0.0.0:*                           12895/consul        
udp        0      0 192.168.200.11:8302     0.0.0.0:*                           12895/consul        
udp6       0      0 :::8600                 :::*                                12895/consul 
#8300:replication和leader farwardingd的端口,在多个server相互之间传递消息的端口
#8301:lan cossipd的端口,在内网使用的端口
#8302:wan gossip的端口,在外网使用的端口
#8500:web的ui界面
#8600:主要做dns协议

端口含义
构建自动发现的Docker服务架构
局域网使用8301,外网使用8302

通过API获取集群信息
构建自动发现的Docker服务架构

容器服务自动加入nginx集群

  • 基于registrator镜像部署容器
    registrator服务会检查应用服务容器运行状态,进行自动注册和注销docker容器服务到服务配置中心consul上
#10,14安装docker

#部署registrator容器服务
[root@docker02 ~]# docker run -d --name=registrator --net=host(网络模式) -v(数据卷映射) /var/run/docker.sock:/tmp/docker.sock --restart=always gliderlabs/registrator:latest -ip=192.168.200.14 consul://192.168.200.11:8500
[root@docker01 ~]# docker run -d --name=registrator --net=host -v /var/run/docker.sock:/tmp/docker.sock --restart=always gliderlabs/registrator:latest -ip=192.168.200.10. consul://192.168.200.11:8500

#测试服务功能
[root@docker01 ~]# mkdir /web
[root@docker01 ~]# vim /web/index.jsp    //编写测试页面
<%@page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 <html>
        <head>
                    <title>docker consul test page</title>
        </head>
<body>
                    <% out.println("Welcome to consul site,http://www.consul.com");%>
       </body>
</html>
[root@docker01 ~]# docker load < tomcat.tar   //准备tomcat并导入镜像
[root@docker01 ~]# docker run -itd -p:8001:8080 -v /web:/usr/local/tomcat/webapps/ROOT --name docker01-t1 -h docker01-t1 tomcat
#把宿主机的8001和容器内的8080映射,-v把根下的web映射到ROOT那
[root@docker01 ~]# docker run -itd -p 8002:8080 -v /web:/usr/local/tomcat/webapps/ROOT --name docker01-t2 -h docker01-t2 tomcat·

#同时测试docker02主机

检测Tomcat
构建自动发现的Docker服务架构

安装consul-template
consul-template是consul自动替换配置文件的应用。一个守护进程,用于实时查询consul集群信息。

#准备template nginx模板文件
[root@consul ~]# mkdir consul
[root@consul ~]# cd consul/
[root@consul consul]# vim nginx.tmp
upstream http_backend{ 
     {{range service "tomcat"}}   
   server {{.Address}}:{{.Port}};    
   {{end}}
} 
server{     
listen 8080;     
server_name localhost 192.168.200.11;     
access_log /usr/local/nginx/logs/crushlinux-access.log;     
index index.html index.jsp index.php;     
location / {          	
proxy_set_header HOST $host;          
proxy_set_header X-Real-IP $remote_addr;          
proxy_set_header Client-IP $remote_addr;          
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header http://http_backend;     
}
}



#检查与依赖包
[root@consul consul]# yum -y install gcc gcc-c++ make pcre-devel zlib-devel openssl-devel

./configure --prefix=/usr/local/nginx --with-http_stub_status_module -- with-http_realip_module --with-pcre --with-http_ssl_module && make -j 2 && make install  //编译安装

[root@docker1 ~]# vim /usr/local/nginx/conf/nginx.conf   
include vhost/*.conf;   //引用vhost下的所有.conf文件

[root@docker1 ~]# mkdir /usr/local/nginx/conf/vhost
[root@docker1 ~]# /usr/local/nginx/sbin/nginx   //启动


------------恢复内容结束------------
------------恢复内容开始------------

建立consul服务

在建立consul服务中,每个提供服务的节点(在Docker主机上)都要部署和运行consul的client,server和client agent 节点的集合构成consul cluster。
consul agent的两种运行模式:server和client,这里的server的client只是consul集群层面的区分,与搭建在cluster智商的应用服务无关。以server模式运行的consul agent 节点用于维护consul集群的状态

consul集群部署

  • consul高可用:三台可运许坏一台,五台可运许坏两台
    构建自动发现的Docker服务架构

1:consul 192.168.200.11 nginx,consul,consul-template
2:docker01 192.168.200.14 docker-ce,registrator
3: docker02 192.168.200.10 docker-ce,registrator

  • agent:运行一个consul代理
  • -server:切换代理到服务器模式
  • -bootstrap:用于控制一个server是否在bootstrap模式,在一个datacenter中只能有一个server处于bootstrap模式,当一个server处于bootstrap模式时,可以自己选举为raft leader
  • -data-dir:参数指定数据存储目录
  • -bind:还地址用来在集群内部的通讯,集群内所有节点到地址都必须是可达的默认0.0.0.0
  • ui:支持图形界面
  • -data-dir:指定数据目录
  • bind:监听ip
  • -client:可以来自任意地址
[root@consul ~]# unzip consul_0.9.2_linux_amd64.zip 
Archive:  consul_0.9.2_linux_amd64.zip
  inflating: consul                   bad CRC 7dec9211  (should be a8ed58e8)
[root@consul ~]# mv consul /usr/bin/
[root@consul ~]# nohup consul agent -server -bootstrap -ui -data-dir=/var/lib/consul-data -bind=192.168.200.11 -client=0.0.0.0 -node=consul-server01 &> /var/log/consul.log &

[root@consul ~]# consul members  #查看集群成员
Node             Address              Status  Type    Build  Protocol  DC
consul-server01  192.168.200.11:8301  alive   server  0.9.2  2         dc1
[root@consul ~]# consul info   #查看详细信息
[root@consul ~]# consul info  | grep leader  #本机领导者
	leader = true
	leader_addr = 192.168.200.11:8300
[root@consul ~]# consul catalog services  #查看consul所管理的服务
consul
[root@consul ~]# netstat -lnptu | grep consul  #查看consul所有端口
tcp        0      0 192.168.200.11:8300     0.0.0.0:*               LISTEN      12895/consul        
tcp        0      0 192.168.200.11:8301     0.0.0.0:*               LISTEN      12895/consul        
tcp        0      0 192.168.200.11:8302     0.0.0.0:*               LISTEN      12895/consul        
tcp6       0      0 :::8500                 :::*                    LISTEN      12895/consul        
tcp6       0      0 :::8600                 :::*                    LISTEN      12895/consul        
udp        0      0 192.168.200.11:8301     0.0.0.0:*                           12895/consul        
udp        0      0 192.168.200.11:8302     0.0.0.0:*                           12895/consul        
udp6       0      0 :::8600                 :::*                                12895/consul 
#8300:replication和leader farwardingd的端口,在多个server相互之间传递消息的端口
#8301:lan cossipd的端口,在内网使用的端口
#8302:wan gossip的端口,在外网使用的端口
#8500:web的ui界面
#8600:主要做dns协议

端口含义
构建自动发现的Docker服务架构
局域网使用8301,外网使用8302

通过API获取集群信息
构建自动发现的Docker服务架构

容器服务自动加入nginx集群

  • 基于registrator镜像部署容器
    registrator服务会检查应用服务容器运行状态,进行自动注册和注销docker容器服务到服务配置中心consul上
#10,14安装docker

#部署registrator容器服务
[root@docker02 ~]# docker run -d --name=registrator --net=host(网络模式) -v(数据卷映射) /var/run/docker.sock:/tmp/docker.sock --restart=always gliderlabs/registrator:latest -ip=192.168.200.14 consul://192.168.200.11:8500
[root@docker01 ~]# docker run -d --name=registrator --net=host -v /var/run/docker.sock:/tmp/docker.sock --restart=always gliderlabs/registrator:latest -ip=192.168.200.10. consul://192.168.200.11:8500

#测试服务功能
[root@docker01 ~]# mkdir /web
[root@docker01 ~]# vim /web/index.jsp    //编写测试页面
<%@page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 <html>
        <head>
                    <title>docker consul test page</title>
        </head>
<body>
                    <% out.println("Welcome to consul site,http://www.consul.com");%>
       </body>
</html>
[root@docker01 ~]# docker load < tomcat.tar   //准备tomcat并导入镜像
[root@docker01 ~]# docker run -itd -p:8001:8080 -v /web:/usr/local/tomcat/webapps/ROOT --name docker01-t1 -h docker01-t1 tomcat
#把宿主机的8001和容器内的8080映射,-v把根下的web映射到ROOT那
[root@docker01 ~]# docker run -itd -p 8002:8080 -v /web:/usr/local/tomcat/webapps/ROOT --name docker01-t2 -h docker01-t2 tomcat·

#同时测试docker02主机

检测Tomcat
构建自动发现的Docker服务架构

安装consul-template
consul-template是consul自动替换配置文件的应用。一个守护进程,用于实时查询consul集群信息。

#准备template nginx模板文件
[root@consul ~]# mkdir consul
[root@consul ~]# cd consul/
[root@consul consul]# vim nginx.tmp
upstream http_backend{ 
     {{range service "tomcat"}}   
   server {{.Address}}:{{.Port}};    
   {{end}}
} 
server{     
listen 8080;     
server_name localhost 192.168.200.11;     
access_log /usr/local/nginx/logs/crushlinux-access.log;     
index index.html index.jsp index.php;     
location / {          	
proxy_set_header HOST $host;          
proxy_set_header X-Real-IP $remote_addr;          
proxy_set_header Client-IP $remote_addr;          
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header http://http_backend;     
}
}



#检查与依赖包
[root@consul consul]# yum -y install gcc gcc-c++ make pcre-devel zlib-devel openssl-devel

./configure --prefix=/usr/local/nginx --with-http_stub_status_module -- with-http_realip_module --with-pcre --with-http_ssl_module && make -j 2 && make install  //编译安装

[root@docker1 ~]# vim /usr/local/nginx/conf/nginx.conf   
include vhost/*.conf;   //引用vhost下的所有.conf文件

[root@docker1 ~]# mkdir /usr/local/nginx/conf/vhost
[root@docker1 ~]# /usr/local/nginx/sbin/nginx   //启动


------------恢复内容结束------------

上一篇:单机 consul + netcore 服务注册发现


下一篇:.Net Core微服务——Consul(4):主从、集群