1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 这就是你日日夜夜想要的docker!!!---------docker+consul+ nginx集成分布式的服务

这就是你日日夜夜想要的docker!!!---------docker+consul+ nginx集成分布式的服务

时间:2022-12-18 06:14:48

相关推荐

这就是你日日夜夜想要的docker!!!---------docker+consul+ nginx集成分布式的服务

文章目录

一、Docker consul容器服务更新与发现理论1、基本架构2、基于nginx和consul构建高可用及自动发现的Docker服务架构3、Docker consul自动发现服务架构的构建 二、部署单节点consul1、拓扑图如下2、nginx代理服务器部署consul服务3、通过HTTP api获取集群信息4、web服务器上连接consul,创建nginx容器服务5、反向代理服务器安装consul-template,准备模板文件6、反向代理服务器编写template nginx模板文件7、反向代理服务器编译安装nginx8、启动template,指定template模板文件及生成路径9、反向代理服务器重新打开终端查看产生的配置文件10、客户端浏览器测试,结合nginx服务器日志验证

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

Consul是一个分布式、高可用的系统,是一个为了解决在生产环境中服务注册,服务发现,服务配置的一个工具,它有多个组件,提供如下几个关键功能:

服务发现: Consul的某些客户端可以提供一个服务,例如api或者mysql,其它客户端可以使用Consul去发现这个服务的提供者。使用DNS或者HTTP,应用可以很容易的找到他们所依赖的服务。

健康检查: Consul客户端可以提供一些健康检查,这些健康检查可以关联到一个指定的服务(服务是否返回200 OK),也可以关联到本地节点(内存使用率是否在90%以下)。这些信息可以被一个操作员用来监控集群的健康状态,被服务发现组件路由时用来远离不健康的主机。

键值存储: 应用可以使用Consul提供的分层键值存储用于一些目的,包括动态配置、特征标记、协作、leader选举等等。通过一个简单的HTTP API可以很容易的使用这个组件。

多数据中心: Consul对多数据中心有非常好的支持,这意味着Consul用户不必担心由于创建更多抽象层而产生的多个区域。

1、基本架构

注册中心: 每个服务提供者向注册中心登记自己的服务,将服务名与主机Ip,端口等一些附加信息告诉注册中心,注册中心按服务名分类组织服务清单。如A服务运行在192.168.1.82:3000,192.168.1.83:3000实例上。那么维护的内容如下:

2、基于nginx和consul构建高可用及自动发现的Docker服务架构

上方拓扑图是基于Docker完成的,然后将consul、consul template、registrator和nginx组装成一个值得信任且可扩展的服务框架,此架构可以灵活的、不需要重启任何服务、不需要重写任何配置的添加和移除服务

拓扑图解释

consul template:配置文件模板

registrator:注册机制

consul server:consul服务

例如:当后方增加了一个容器时,容器会注册registrator,registrator发现增加了一个容器的时候,会通知consul server要更新,consul server使用consul template模板更新

3、Docker consul自动发现服务架构的构建

1、每个提供服务的节点上都要部署和运行consul的agent

2、consul agent有两种运行模式:server和client

3、server和client只是consul集群层面的区分,与搭建在cluster之上的应用服务无关

二、部署单节点consul

1、拓扑图如下

2、nginx代理服务器部署consul服务

[root@localhost ~]# mkdir /consul[root@localhost ~]# cd /consul/[root@localhost consul]# rz -E'//上传压缩包'rz waiting to receive.[root@localhost consul]# unzip consul_0.9.2_linux_amd64.zip -d /usr/bin'//解压'Archive: consul_0.9.2_linux_amd64.zipinflating: /usr/bin/consul [root@localhost consul]# consul agent \'//设置代理'> -server \'//服务功能'> -bootstrap \'//参与选举'> -ui \'//提供web界面'> -data-dir=/var/lib/consul-data \'//提供一个代理存储数据目录'> -bind=192.168.233.132 \'//绑定本地地址'> -client=0.0.0.0 \'//面对的客户端地址'> -node=consul-server01 &> /var/log/consul.log&' //定义节点名称,日志混合输出到log,并且放到后台运行'[1] 2173[root@localhost consul]# jobs[1]+ 运行中consul agent -server -bootstrap -ui -data-dir=/var/lib/consul-data -bind=192.168.110.132 -client=0.0.0.0 -node=consul-server01 &>/var/log/consul.log &[root@localhost consul]# consul members'//查看集群信息'Node AddressStatus Type Build Protocol DCconsul-server01 192.168.110.132:8301 alive server 0.9.2 2 dc1[root@localhost consul]# consul info |grep leader'//查看管理信息'leader = trueleader_addr = 192.168.110.132:8300

3、通过HTTP api获取集群信息

curl 127.0.0.1:8500/v1/status/peers '/查看集群server成员'curl 127.0.0.1:8500/v1/status/leaders '//查看集群Raf 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 '//集群节点详细信息'

4、web服务器上连接consul,创建nginx容器服务

[root@localhost ~]# docker run -d \> --name=registrator \ '//定义容器名称'> --net=host \'定义网络'> -v /var/run/docker.sock:/tmp/docker.sock \ '指定数据卷,存储信息' > --restart=always \ > gliderlabs/registrator:latest \'定义镜像'> -ip=192.168.233.133 \ '指定本地地址'> consul://192.168.233.132:8500 '指定consul管理节点地址、端口'[root@localhost ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUSPORTSNAMES703ee87d399d gliderlabs/registrator:latest "/bin/registrator -i…" 2 minutes ago Restarting (1) 31 seconds ago registrator[root@localhost ~]# docker run -itd -p 83:80 --name test -h test nginx'//创建容器,用来测试服务发现功能是否正常'[root@localhost ~]# docker run -itd -p 84:80 --name test-02 -h test02 nginx[root@localhost ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUSPORTSNAMESeb5045196611 httpd "httpd-foreground" 7 seconds ago Up 7 seconds 0.0.0.0:86->80/tcp test-0403473a1137bd httpd "httpd-foreground" 10 seconds agoUp 9 seconds 0.0.0.0:85->80/tcp test-032e2cee1e6494 nginx "nginx -g 'daemon of…" 39 seconds agoUp 38 seconds 0.0.0.0:84->80/tcp test-0287a47780cfd1 nginx "nginx -g 'daemon of…" 12 minutes agoUp 12 minutes 0.0.0.0:83->80/tcp test-01[root@localhost consul]# firewall-cmd --get-active-zonespublicinterfaces: ens33[root@localhost consul]# firewall-cmd --zone=public --add-port=8500/tcp'//设置防火墙规则或者关闭防火墙'success

浏览器测试:192.168.110.132:8500

查看日志

[root@localhost ~]# docker logs -f test-01192.168.233.1 - - [27/Apr/:02:43:43 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" "-"'//发现访问IP是物理网卡的网关'[root@localhost consul]# curl 127.0.0.1:8500/v1/catalog/services{"consul":[],"httpd":[],"nginx":[]}'//再次查看祖册的所有服务'

5、反向代理服务器安装consul-template,准备模板文件

compose-template介绍

compose-template是一个守护进程,用于实时查询consul集群信息

并且运维人员可以在consul服务器上,定制任意的模板,生成配置文件

compose可以查询consul中的服务目录、key、key-values等

这种强大的抽象功能和查询语言模板使得consul-template特别适合动态的创建配置文件,也就是自动化增加服务

[root@localhost consul]# rz -E'//上传consul-template软件包'rz waiting to receive.[root@localhost consul]# lsconsul-template_0.19.3_linux_amd64.zip[root@localhost consul]# unzip consul-template_0.19.3_linux_amd64.zip -d /usr/binArchive: consul-template_0.19.3_linux_amd64.zipinflating: /usr/bin/consul-template

6、反向代理服务器编写template nginx模板文件

此模板用于nginx反向代理模板

nginx.ctmpl跟nginx没有直接关系,

consul是docker的一种自动管理机制

nginx.ctmpl中的参数以变量的形式写入

[root@localhost consul]# mkdir /var/log/nginx[root@localhost consul]# vim nginx.ctmplupstream http_backend {{{range service "nginx"}}server {{.Address}}:{{.Port}};{{end}}}server {listen 88;server_name localhost 192.168.110.132;access_log /var/log/nginx/-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;}}

7、反向代理服务器编译安装nginx

[root@localhost consul]# yum install gcc gcc-c++ make expat* pcre* perl* zlib* -y'//安装环境报'[root@localhost consul]# rz -E'//上传源码包并编译'rz waiting to receive.[root@localhost consul]# lsconsul-template_0.19.3_linux_amd64.zip nginx-1.12.2.tar.gz nginx.ctmpl[root@localhost consul]# tar zxf nginx-1.12.2.tar.gz [root@localhost consul]# lsconsul-template_0.19.3_linux_amd64.zip nginx-1.12.2 nginx-1.12.2.tar.gz nginx.ctmpl[root@localhost consul]# cd nginx-1.12.2[root@localhost nginx-1.12.2]# ./configure --prefix=/usr/local/nginx[root@localhost nginx-1.12.2]# make && make install [root@localhost nginx-1.12.2]# mkdir /usr/local/nginx/conf/vhost/'//创建虚拟主机目录'[root@localhost nginx-1.12.2]# vim /usr/local/nginx/conf/nginx.conf'//编辑配置文件,添加目录'#user nobody;worker_processes 1;#error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;#pid logs/nginx.pid;events {worker_connections 1024;}http {include mime.types;include vhost/*.conf;'//添加路径'default_type application/octet-stream;...省略内容[root@localhost nginx-1.12.2]# /usr/local/nginx/sbin/nginx'/启动nginx'[root@localhost nginx-1.12.2]# netstat -natp | grep nginxtcp 00 0.0.0.0:80 0.0.0.0:*LISTEN5819/nginx: master [root@localhost nginx-1.12.2]# firewall-cmd --zone=public --add-port=80/tcp'//防火墙规则设置80端口'

8、启动template,指定template模板文件及生成路径

[root@localhost consul]# consul-template -consul-addr 192.168.110.132:8500 -template "/root/nginx.ctmpl:/usr/local/nginx/conf/vhost/shang.conf:/usr/local/nginx/sbin/nginx -s reload" --log-level=info

9、反向代理服务器重新打开终端查看产生的配置文件

[root@consul ~]# vim /usr/local/nginx/conf/vhost/shang.conf upstream http_backend {server 192.168.110.133:84;server 192.168.110.133:83;}server {listen 88;server_name localhost 192.168.110.132;access_log /var/log/nginx/-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;}}

10、客户端浏览器测试,结合nginx服务器日志验证

[root@localhost ~]# docker logs -f test-01'//nginx服务器动态查看test-01日志'[root@localhost ~]# docker logs -f test-02'//重新打开终端,动态查看test-02日志'[root@localhost ~]# firewall-cmd --zone=public --add-port=88/tcp'//主节点设置防火墙规则,放通88端口'success

浏览器使用192.168.110.132:88访问,查看日志会发现是轮询出现的

测试consul-template自动在线更新

[root@localhost ~]# docker run -itd --name test-06 -p 2000:80 nginx136853509dee16aeda4afe1b2d5bd5277341ef8157d6976745188005c69cb5c7'//nginx服务器添加一个容器'[root@localhost consul]# cat /usr/local/nginx/conf/vhost/tang.conf

这就是你日日夜夜想要的docker!!!---------docker+consul+ nginx集成分布式的服务发现与注册架构

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。