构建自动发现的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高可用:三台可运许坏一台,五台可运许坏两台
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协议
端口含义
局域网使用8301,外网使用8302
通过API获取集群信息
容器服务自动加入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
安装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高可用:三台可运许坏一台,五台可运许坏两台
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协议
端口含义
局域网使用8301,外网使用8302
通过API获取集群信息
容器服务自动加入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
安装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 //启动
------------恢复内容结束------------