Docker consul、容器服务更新与发现

目录

实验前准备

Consul服务器:192.168.188.17,consul服务,nginx服务,consul-template守护进程

Registrator服务器:192.168.188.11,registrator容器,nginx容器

Consul部署

建立consul服务器

mkdir /opt/consul

cp consul_0.9.2_linux_amd64.zip /opt/consul

cd /opt/consul

unzip consul_0.9.2_linux_amd64.zip

mv consul /usr/local/bin/

设置代理

在后台启动consul服务端

复制代码
consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.10.23 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &

参数解释

-server:以server身份启动。默认是client。

-bootstrap:用来控制一个server是否在bootstrap模式,在一个数据中心中只能有一个server处于bootstrap模式,当一个server处于 bootstrap模式时,可以自己选举为 server-leader。

-bootstrap-expect=2:集群要求的最少server数量,当低于这个数量,集群即失效。

-ui:指定开启 UI 界面,这样可以通过 http://localhost:8500/ui 这样的地址访问 consul 自带的 web UI 界面。

-data-dir :指定数据存储目录。

-bind:指定用来在集群内部的通讯地址,集群内的所有节点到此地址都必须是可达的,默认是0.0.0.0。

-client:指定 consul 绑定在哪个 client 地址上,这个地址提供 HTTP、DNS、RPC 等服务,默认是 127.0.0.1。

-node:节点在集群中的名称,在一个集群中必须是唯一的,默认是该节点的主机名。

-datacenter:指定数据中心名称,默认是dc1。

查看端口

netstat -anpt | grep consul

端口解释

启动consul后默认会监听5个端口:

8300:replication、leader farwarding的端口

8301:lan cossip的端口

8302:wan gossip的端口

8500:web ui界面的端口

8600:使用dns协议查看节点信息的端口

查看集群信息

查看members状态

consul members

查看集群状态

consul operator raft list-peers

consul info | grep leader

通过http api获取集群信息

curl 127.0.0.1:8500/v1/status/peers #查看集群server成员

curl 127.0.0.1:8500/v1/status/leader #集群 server-leader

curl 127.0.0.1:8500/v1/catalog/services #注册的所有服务

curl 127.0.0.1:8500/v1/catalog/nginx #查看 nginx 服务信息

curl 127.0.0.1:8500/v1/catalog/nodes #集群节点详细信息

Registrator服务器

容器服务自动加入Nginx集群

安装Gliderlabs/Registrator

Gliderlabs/Registrator 可检查容器运行状态自动注册,还可注销 docker 容器的服务到服务配置中心,目前支持 Consul、Etcd 和 SkyDNS2

复制代码
docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
--ip=192.168.188.11 \
consul://192.168.188.17:8500

参数解释

--net=host:把运行的docker容器设定为host网络模式。

-v /var/run/docker.sock:/tmp/docker.sock :把宿主机的Docker守护进程(Docker daemon)默认监听的Unix域套接字挂载到容器中。

--restart=always:设置在容器退出时总是重启容器。

--ip:刚才把network指定了host模式,所以我们指定ip为宿主机的ip。

consul:指定consul服务器的IP和端口

测试服务发现功能

在registrator服务器上创建

docker run -itd -p:83:80 --name test-01 -h test01 nginx

docker run -itd -p:84:80 --name test-02 -h test02 nginx

docker run -itd -p:88:80 --name test-03 -h test03 httpd

docker run -itd -p:89:80 --name test-04 -h test04 httpd

-h:设置容器主机名

验证http和nginx服务是否注册到consul,在浏览器中输入http://192.168.188.17:8500

部署consul-template

Consul-Template是一个守护进程,用于实时查询Consul集群信息,并更新文件系统上任意数量的指定模板,生成配置文件。更新完成以后,可以选择运行 shell 命令执行更新操作

准备template nginx模板文件

在consul服务器上操作

vim /opt/consul/nginx.ctmpl

#定义一个nginx upstream简单模板

复制代码
upstream http_backend {
  {{range service "nginx"}}
   server {{.Address}}:{{.Port}};
   {{end}}
}
#定义一个server,监听端口8000,反向代理到upstream
server {
  listen 8000;
  server_name localhost 192.168.188.17;
  access_log /var/log/nginx/dzd.com-access.log;
  index index.html 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_pass http://http_backend;
  }
}

编译安装nginx

yum -y install pcre-devel zlib-devel gcc gcc-c++ make

useradd -M -s /sbin/nologin nginx

tar zxvf nginx-1.12.0.tar.gz -C /opt/

cd /opt/nginx-1.12.0/

./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make -j && make install

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

配置nginx

vim /usr/local/nginx/conf/nginx.conf

添加虚拟主机目录

创建虚拟主机目录

mkdir /usr/local/nginx/conf/vhost

创建日志文件目录

mkdir /var/log/nginx

启动nginx

Nginx

配置并启动template

unzip consul-template_0.19.3_linux_amd64.zip -d /opt/

cd /opt/

mv consul-template /usr/local/bin/

前台启动template服务,注意启动后不要中止进程(ctrl+c)

复制代码
consul-template --consul-addr 192.168.188.17:8500 \
--template "/opt/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/dzd.conf:/usr/local/nginx/sbin/nginx -s reload" \
--log-level=info

再开一个终端查看生成配置文件

vim /usr/local/nginx/conf/vhost/dzd.conf

访问template-nginx

在Registrator服务器上

docker ps -a

docker exec -it test-01 bash

echo "this is test1 web" > /usr/share/nginx/html/index.html

exit

docker exec -it test-02 bash

echo "this is test2 web" > /usr/share/nginx/html/index.html

exit

浏览器访问http://192.168.188.17:8000,多次刷新

增加nginx容器节点

新建一个容器(registrator服务器上)

docker run -itd -p:85:80 --name test-05 -h test05 nginx

如果上面的template服务没关,就可以看到更新内容

查看生成配置文件(consul服务器上)

vim /usr/local/nginx/conf/vhost/dzd.conf

回浏览器刷新,能看到新增的节点上的内容

没写页面,所以展示的就是nginx默认页面

consul多节点

添加一台已有docker环境的服务器192.168.188.16加入到现在的集群中

复制代码
consul agent \
-server \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.188.16 \
-client=0.0.0.0 \
-node=consul-server02 \
-enable-script-checks=true  \
-datacenter=dc1  \
-join 192.168.188.17 &> /var/log/consul.log &

参数解释

-enable-script-checks=true:设置检查服务为可用

-datacenter: 数据中心名称

-join:加入到已有的集群中

可以用consul numbers或者consul operator raft list-peers查看集群信息

相关推荐
高旭博4 小时前
7. kubernetes资源——service服务
云原生·容器·kubernetes
斯普信专业组4 小时前
Docker 常用命令与时区配置指南
docker·容器·eureka
天一生水water16 小时前
ubuntu使用毫秒镜像方式安装docker mysql
ubuntu·阿里云·docker
Qayrup18 小时前
docker 搭建私有仓库,推送并拉取
运维·docker·容器
郭庆汝19 小时前
docker拉取英伟达官方cuda11.8镜像
docker·cuda11.8
天下不喵20 小时前
Ubuntu24.04安装Docker过程记录
docker
黑黍21 小时前
如何在k8s中配置并使用nvidia显卡
云原生·容器·kubernetes
冷血~多好21 小时前
使用docker部署elk,实现日志追踪
elk·docker·容器
会飞的小蛮猪1 天前
SkyWalking运维之路(Java探针接入)
java·运维·经验分享·容器·skywalking