docker容器之consul

一、consul解决了什么问题?

如果后端应用服务器集群节点数量很多,前端负载均衡器配置和管理会很麻烦的问题
负载均衡器的节点配置条目数量会很多,后端节点的网络位置发生了变化还需要修改所有调用这些后端节点的负载均衡器配置等问题)

二、consul的模式

client模式:可用于接收后端服务发来的注册信息,并转发给server节点,没有持久化能力
server模式:可用于接收后端服务/client模式的节点发来的注册信息,还可在server节点之间同步注册信息,具有持久化注册信息到本地的能力
server-leader节点:负责同步注册信息给其它的server节点,并对各个节点做健康检查。

三、consul的工作原理

consul提供的一些关键特性:
服务注册与发现:consul通过DNS或者HTTP接口使服务注册和服务发现变的很容易,一些外部服务,例如saas提供的也可以一样注册。
健康检查:健康检测使consul可以快速的告警在集群中的操作。和服务发现的集成,可以防止服务转发到故障的服务上面。
Key/Value存储:一个用来存储动态配置的系统。提供简单的HTTP接口,可以在任何地方操作。
多数据中心:无需复杂的配置,即可支持任意数量的区域。

安装consul是用于服务注册,也就是容器本身的一些信息注册到consul里面,其他程序可以通过consul获取注册的相关服务信息,这就是服务注册与发现。

四、实操consul连接负载均衡与容器

步骤一:完成consul的部署


启动consul后默认会监听5个端口:
8300:replication、leader farwarding的端口
8301:lan cossip的端口
8302:wan gossip的端口
8500:web ui界面的端口
8600:使用dns协议查看节点信息的端口

查看集群信息
#查看members状态
consul members
Node             Address             Status  Type    Build  Protocol  DC
consul-server01  192.168.80.15:8301  alive   server  0.9.2  2         dc1

#查看集群状态
consul operator raft list-peers

consul info | grep leader
	leader = true
	leader_addr = 192.168.80.15:8300

通过 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			#集群节点详细信息

2.完成gliderlabs/registrator:latest镜像的拉取,并完成启动


-------- registrator服务器 --------
//容器服务自动加入 Nginx 集群
1. 安装 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.66.70 \
consul://192.168.66.66: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和端口。

3.先部署节点服务器,做三个nginx的容器

验证consul可以注册发现

4.完成负载均衡器的部署以及相关的设置

. 配置 nginx
vim /usr/local/nginx/conf/nginx.conf
......
http {
     include       mime.types;
     include  vhost/*.conf;       				#添加虚拟主机目录
     default_type  application/octet-stream;
......

//创建虚拟主机目录
mkdir /usr/local/nginx/conf/vhost

//创建日志文件目录
mkdir /var/log/nginx

//启动nginx
nginx


http {
    include       mime.types;
    include consul.conf;
....
 
        location / {
            root   html;
            index  index.html index.htm;
            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://container_backend;
        }
....
}

5.在负载均衡器中完成插件的安装,实现配置模板文件


wget  https://releases.hashicorp.com/consul-template/0.19.3/consul-template_0.19.3_linux_amd64.zip
##网上下载或者导入文件

[root@localhost opt]#ls
consul-template_0.19.3_linux_amd64.zip  nginx-1.24.0  nginx-1.24.0.tar.gz  nginx-1.25.3  nginx-1.25.3.tar.gz  rh
[root@localhost opt]#unzip consul-template_0.19.3_linux_amd64.zip 
Archive:  consul-template_0.19.3_linux_amd64.zip
  inflating: consul-template         
[root@localhost opt]#ls
consul-template  consul-template_0.19.3_linux_amd64.zip  nginx-1.24.0  nginx-1.24.0.tar.gz  nginx-1.25.3  nginx-1.25.3.tar.gz  rh
[root@localhost opt]#mv consul-template /usr/local/bin/
[root@localhost opt]#mkdir consul-template
[root@localhost opt]#cd consul-template/
[root@localhost consul-template]#vim nginx.ctmpl

[root@localhost consul-template]#vim nginx.ctmpl 
[root@localhost consul-template]#cat nginx.ctmpl 
  upstream container_backend {
    {{range service "docker-nginx"}}
     server {{.Address}}:{{.Port}};
    {{end}}
  }

  • 22
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Docker上运行Consul,可以按照以下步骤进行操作: 1. 首先,需要在Docker主机上安装Gliderlabs/Registrator。Gliderlabs/Registrator是一个用于自动注册和注销Docker容器服务的工具。可以使用以下命令在Docker主机上安装Gliderlabs/Registrator: ``` docker run -d \ --name=registrator \ --net=host \ -v /var/run/docker.sock:/tmp/docker.sock \ --restart=always \ gliderlabs/registrator:latest \ -ip=<Docker主机IP地址> \ consul://<Consul服务器IP地址>:8500 ``` 其中,`<Docker主机IP地址>`是Docker主机的IP地址,`<Consul服务器IP地址>`是Consul服务器的IP地址。这个命令将在Docker主机上启动一个名为registrator的容器,并将其连接到Consul服务器。 2. 接下来,需要在Docker主机上启动Consul容器。可以使用以下命令在Docker主机上启动Consul容器: ``` docker run -d \ --name=consul \ -p 8500:8500 \ consul ``` 这个命令将在Docker主机上启动一个名为consul容器,并将其映射到主机的8500端口。 3. 现在,Consul已经在Docker上成功运行了。可以使用以下命令来验证Consul是否正常运行: ``` curl http://<Docker主机IP地址>:8500/v1/catalog/nodes ``` 其中,`<Docker主机IP地址>`是Docker主机的IP地址。如果Consul正常运行,将返回一个包含节点信息的JSON响应。 这样,你就可以在Docker上成功运行Consul了。请注意,这只是一个简单的示例,实际的部署可能需要根据具体情况进行调整。 #### 引用[.reference_title] - *1* *3* [Docker容器Consul部署](https://blog.csdn.net/qq1356059950/article/details/126145773)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [4.Docker--Consul](https://blog.csdn.net/weixin_43554927/article/details/126899667)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值