新郑市网站建设小程,山东专业网站建设,网站开发技术有包括,wordpress优化seo第四阶段
时 间#xff1a;2023年8月8日
参加人#xff1a;全班人员
内 容#xff1a;
DockerConsulRegistrator
实现服务注册与发现 目录
一、服务注册中心引言
CAP理论是分布式架构中重要理论#xff1a;
二、服务注册中心软件
#xff08;一#xff09;Zoo…第四阶段
时 间2023年8月8日
参加人全班人员
内 容
DockerConsulRegistrator
实现服务注册与发现 目录
一、服务注册中心引言
CAP理论是分布式架构中重要理论
二、服务注册中心软件
一ZooKeeper
二Eureka
三Etcd
四Consul
常用的服务发现产品之间的比较
三、Consul介绍
一Consul主要功能
二Consul工作模式
三架构设计
四架构优势
四、构建自动发现的 Docker 服务架构
一建立 Consul 服务
1、Consul集群部署
2、consul高可用
二安装consul
1、下载consul二进制包
3、查看集群信息
4、通过API获取集群信息
五、容器服务自动加入 Nginx 集群
1. 基于 Registrator 镜像部署容器
2. 测试服务发现功能是否正常
3. 验证Tomcat服务是否注册到了consul集群
4. 安装 consul-template
5. 准备 template nginx 模板文件
6. 编译安装 nginx
7. 配置 nginx
8. 配置并启动 consul-template
9. 访问 template-nginx 配置文件
10. 增加一个测试的容器节点 一、服务注册中心引言 服务注册中心本质上是为了解耦服务提供者和服务消费者。对于任何一个微服务原则上都应存在或者支持多个提供者这是由微服务的分布式属性决定的。 更进一步为了支持弹性扩缩容特性一个微服务的提供者的数量和分布往往是动态变化的也是无法预先确定的。因此原本在单体应用阶段常用的静态LB机制就不再适用了需要引入额外的组件来管理微服务提供者的注册与发现而这个组件就是服务注册中心。 微服务-将一个大型的单体架构拆分成多个小的服务组件。
CAP理论是分布式架构中重要理论 一致性(Consistency) (所有节点在同一时间具有相同的数据) 可用性(Availability) (保证每个请求不管成功或者失败都有响应) 分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作) 二、服务注册中心软件
一ZooKeeper ZooKeeper是一个分布式的开放源码的分布式应用程序协调服务是Google的Chubby一个开源的实现是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件提供的功能包括配置维护、域名服务、分布式同步、组服务等。 ZooKeeper的目标就是封装好复杂易出错的关键服务将简单易用的接口和性能高效、功能稳定的系统提供给用户。
二Eureka Eureka是基于RESTRepresentational State Transfer服务主要以AWS云服务为支撑提供服务发现并实现负载均衡和故障转移。我们称此服务为Eureka服务。Eureka提供了Java客户端组件Eureka Client方便与服务端的交互。客户端内置了基于round-robin实现的简单负载均衡。在Netflix为Eureka提供更为复杂的负载均衡方案进行封装以实现高可用它包括基于流量、资源利用率以及请求返回状态的加权负载均衡。
三Etcd etcd 是一个分布式键值对存储系统由coreos 开发内部采用 raft 协议作为一致性算法用于可靠、快速地保存关键数据并提供访问。通过分布式锁、leader选举和写屏障(write barriers)来实现可靠的分布式协作。etcd集群是为高可用、持久化数据存储和检索而准备。
四Consul Consul 是 HashiCorp 公司推出的开源工具用于实现分布式系统的服务发现与配置。 与其他分布式服务注册与发现的方案比如 Airbnb 的 SmartStack 等相比Consul 的方案更“一站式”内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案不再需要依赖其他工具比如 ZooKeeper 等。使用起来也较为简单。Consul 用 Golang 语言实现因此具有天然可移植性(支持 Linux、windows 和 Mac OS X) 安装包仅包含一个可执行文件方便部署与 Docker 等轻量级容器可无缝配合。
常用的服务发现产品之间的比较 三、Consul介绍 Consul是一个分布式高可用且支持多数据中心的服务发现配置和编排工具。 Consul支持大规模部署配置和维护面向服务的体系结构。
一Consul主要功能
1、服务发现
通过DNS或HTTP接口使得消费者发现服务应用程序可以轻松找到所依赖的服务。 2、健康检查
防止将请求转发不健康的主机。 3、键值存储
可以使用分层键/值存储比如功能标记、动态配置等。 4、多数据中心
开箱即用不需要复杂的配置。这就意味这不用建立抽象的逻辑来扩展多个地区。
二Consul工作模式 1、Consul agent是Consul核心组件分为client和server两种工作模式。 默认以client模式运行提供服务注册、健康检查、 转发查询给server leader。 server模式启动时使用-server选项指定用于维护Consul集群状态、Raft协议进行选举。 2、agent必须在每个Consul节点运行所有运行Consul agent节点构成Consul集群。 3、官方建议Consul集群至少3或5个节点运行Consul agent server模式client节点不限。 4、通过join或rejoin选项加入集群。一旦加入集群信息使用gossip算法同步到整个集群节点。 三架构设计 在现实工作中我们一直渴望着追求提供高质量、高可用的服务架构体系同时减少不必要的部署和维护代价减少容错率。面对如此高的要求可以有两种架构方案 1、DockerEtcdConfdNginx 2、DockerConsulNginx 使用 Docker 将 Consul、Consul Template、Registrator 和 Nginx 组装成一个值得信任且可扩展的服务框架这套架构在这个框架中添加和移除服务不需要重写任何配置也不需要重启任何服务一切都能正常运行。工作流程很简单 四架构优势 DockerConsulNginx虽然看起来是三个组件的运用但却证明是一个有机的整体。它们互相联系、互相作用完全满足我们对高可用、高效服务架构方案的需求是Docker生态圈中最理想的组合之一具有以下优势 1、自动发现与注册组件consul使用 Raft 算法来保证一致性比复杂的Paxos 算法更直接。相比较而言zookeeper 采用的是 Paxos而 etcd 使用的则是 Raft 2、支持多数据中心多数据中心集群可以避免单数据中心的单点故障zookeeper 和 etcd 均不提供多数据中心功能的支持 3、自动、实时发现及无感知服务刷新具备资源弹性伸缩自如 4、支持健康检查负载能动态在可用的服务实例上进行均衡etcd 不提供此功能 5、支持足够多台Docker容器(前提架构资源足以保证性能支撑) 6、支持http 和dns 协议接口zookeeper 的集成较为复杂etcd 只支持 http 协议 7、服务规模方便进行快速调整官方提供web管理界面etcd 无此功能 8、Consul template 搭配consul使用支持多种接入层如Nginx、Haproxy。 四、构建自动发现的 Docker 服务架构
一建立 Consul 服务 要想利用 Consul 提供的服务实现服务的注册与发现我们需要建立 Consul 服务。在 Consul 方案中每个提供服务的节点Docker主机上都要部署和运行 Consul 的 client所有运行 Consul agent节点的集合构成 Consul Cluster。Consul agent 有两种运行模式Server 和 Client。 这里的 Server 和 Client 只是 Consul 集群层面的区分与搭建在 Cluster 之上的应用服务无关。以 Server 模式运行的 Consul agent 节点用于维护 Consul 集群的状态官方建议每个 Consul Cluster 至少有 3 个或以上的运行在 Server mode 的 AgentClient 节点不限。
1、Consul集群部署 如下图所示左边三台Consul agent server 集群通过选举选出一台Leader。来管理右边的client。获取集群状态信息。
Consul agent server -bootstrap自动选举本机为Leader。管理台client。获取集群信息。
2、consul高可用
3台允许坏1台5台允许坏2台 主机名 IP地址 软件 huyang1 192.168.100.121 nginx consul consul-template huyang2 192.168.100.122 docker-ce registrator huyang3 192.168.100.123 docker-ce registrator
二安装consul
1、下载consul二进制包
下载地址 Install | Consul | HashiCorp Developer
[roothuyangl ~]# unzip consul_0.9.2_linux_amd64.zip
[roothuyangl ~]# mv consul /usr/bin/ [roothuyangl ~]# nohup consul agent -server -bootstrap -ui -data-dir/var/lib/consul-data -bind192.168.100.131 -client0.0.0.0 -nodeconsul-server01 /var/log/consul.log 配置项说明 agent:运行一个consul代理。 -server :切换代理到服务器模式。 -bootstrap用来控制一个 server 是否在 bootstrap 模式在一个 datacenter 中只能 有一个 server 处于 bootstrap 模式当一个 server 处于 bootstrap 模式时可以自己 选举为 raft leader。 -data-dir 参数指定数据存储目录 -bind -bind该地址用来在集群内部的通讯集群内的所有节点到地址都必须是可达的默认是 0.0.0.0。 -ui参数指定开启 UI 界面这样可以通过 http://localhost:8500/ui 这样的地址访问 consul 自带的 web UI 界面。 -client consul 绑定在哪个 client 地址上这个地址提供 HTTP、DNS、RPC 等服务 默认是 127.0.0.1。 -node节点在集群中的名称在一个集群中必须是唯一的默认是该节点的主机名。 安装 consul 是用于服务注册也就是容器本身的一些信息注册到 consul 里面其他程 序可以通过 consul 获取注册的相关服务信息这是就是所为的服务注册与发现。
3、查看集群信息
查看huyangl ~集群成员信息
[roothuyangl ~]# consul members
查看huyangl ~集群中的leader
[roothuyangl ~]# consul info | grep leader
查看huyangl ~集群中管理的服务
[roothuyangl ~]# consul catalog services 查看监听的端口 启动consul后默认会监听5个端口 8300 replication、leader farwarding的端口 8301 lan cossip的端口 8302 wan gossip的端口 8500 web ui界面的端口 8600 使用dns协议查看节点信息的端口 可参考下图查看端口的意思 4、通过API获取集群信息
[roothuyangl ~]# curl 127.0.0.1:8500/v1/status/peers //查看集群 server 成员
[roothuyangl ~]# curl
127.0.0.1:8500/v1/status/leader //集群 Raf leader
[roothuyangl ~]# curl
127.0.0.1:8500/v1/catalog/services
//注册的所有服务
[roothuyangl ~]# curl
127.0.0.1:8500/v1/catalog/nginx //查看 nginx 服务信息
[roothuyangl ~]# curl
127.0.0.1:8500/v1/catalog/nodes //集群节点详细信息 五、容器服务自动加入 Nginx 集群
1. 基于 Registrator 镜像部署容器 Registrator 服务会检查应用服务容器的运行状态进行自动注册和注销 docker 容器服务到服务配置中心Consul上。目前支持与 Consul、etcd 和 SkyDNS2等软件进行整合。
在 192.168.100.132/192.168.100.133 节点操作
1安装docker-ce [roothuyang2 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo [roothuyang2 ~]# yum -y install yum-utils device-mapper-persistent-data lvm2 [roothuyang2 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo [roothuyang2 ~]# ls /etc/yum.repos.d/ [rootlocalhost ~]# yum -y install docker-ce [rootlocalhost ~]# systemctl start docker [rootlocalhost ~]# systemctl enable docker 2阿里云镜像加速器
阿里云登录 - 欢迎登录阿里云安全稳定的云计算服务平台 [roothuyang2 ~]# cat END /etc/docker/daemon.json
{registry-mirrors:[ https://nyakyfun.mirror.aliyuncs.com ]}END [roothuyang2 ~]# systemctl daemon-reload
[roothuyang2 ~]# systemctl restart docker
[roothuyang2 ~]# docker version 3部署registrator容器服务
注意192.168.100.133主机需要注意IP地址
[roothuyang2 ~]# docker run -d --nameregistrator --nethost -v /var/run/docker.sock:/tmp/docker.sock --restartalways gliderlabs/registrator:latest -ip192.168.100.132 consul://192.168.100.131:8500 [roothuyang3 ~]# docker run -d --nameregistrator --nethost -v /var/run/docker.sock:/tmp/docker.sock --restartalways gliderlabs/registrator:latest -ip192.168.100.133 consul://192.168.100.131:8500 2. 测试服务发现功能是否正常
创建Tomcat测试页面并部署tomcat测试容器
1huyang2主机
[roothuyang2 ~]# mkdir /web
[roothuyang2 ~]# vim /web/index.jsp
配置如下
% page languagejava importjava.util.* pageEncodingUTF-8%
htmlheadtitledocker consul test page/title/headbody% out.println(Welcome to consul site,http://www.consul.com);%/body
/html [roothuyang2 ~]# docker run -itd -p:8001:8080 -v /web:/usr/local/tomcat/webapps/ROOT --name huyang2-t1 -h huyang2-t1 tomcat
[roothuyang2 ~]# docker run -itd -p:8002:8080 -v /web:/usr/local/tomcat/webapps/ROOT --name huyang2-t2 -h huyang2-t2 tomcat 访问网页测试192.168.100.132:8001
192.168.100.132:8002 2huyang3主机
[roothuyang3 ~]# mkdir /web
[roothuyang3 ~]# vim /web/index.jsp
配置如下
% page languagejava importjava.util.* pageEncodingUTF-8%
htmlheadtitledocker consul test page/title/headbody% out.println(Welcome to consul site,http://www.consul.com);%/body
/html[roothuyang3 ~]# docker run -itd -p:8001:8080 -v /web:/usr/local/tomcat/webapps/ROOT --name huyang3-t1 -h huyang3-t1 tomcat
[roothuyang3 ~]# docker run -itd -p:8002:8080 -v /web:/usr/local/tomcat/webapps/ROOT --name huyang3-t2 -h huyang3-t2 tomcat 访问网页测试192.168.100.133:8001
192.168.100.133:8002 3. 验证Tomcat服务是否注册到了consul集群
浏览器输入 http://192.168.100.131:8500点击”NODES“再点击“consul-server01”” 会出现 5 个服务。 [roothuyang1 ~]#
curl 127.0.0.1:8500/v1/catalog/services 从以上结果中发现Tomcat服务已经注册到 consul 里面说明服务正常
4. 安装 consul-template Consul-Template 是基于 Consul 的自动替换配置文件的应用。在 Consul-Template 没出现之前构建服务大多采用的是 Zookeeper、EtcdConfd 这样类似的系统。 Consul-template 是一个守护进程用于实时查询 consul 集群信息并更新文件系统上的任意数量的指定模板生成配置文件更新完成以后可以选择运行 shell 命令执行更新操作例如重新加载 nginx。 Consul-Template 可以查询 Consul 中的服务目录、Key、Key-values 等。这种强大的抽象功能和查询语言模板可以使 Consul-Template 特别适合动态的创建配置文件。例如创建 Apache/Nginx Proxy Balancers、Haproxy Backends、Varnish Servers、Application Configurations 等。
5. 准备 template nginx 模板文件
[roothuyang1 ~]# mkdir consul
[roothuyang1 ~]# cd consul/
[roothuyang1 consul]# vim /root/consul/nginx.tmp 6. 编译安装 nginx
[roothuyang1 ~]# yum -y install gcc gcc-c make pcre-devel zlib-devel openssl-devel [roothuyang1 ~]# tar xf nginx-1.16.0.tar.gz
[roothuyang1 ~]# cd nginx-1.16.0/
[roothuyang1 nginx--1.16.0]# ./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 7. 配置 nginx
[roothuyang1 ~]# vim
/usr/local/nginx/conf/nginx.conf
include vhost/*.conf; //在 http 段里面添加虚拟主机目录
[roothuyang1 ~]# mkdir /usr/local/nginx/conf/vhost/
[roothuyang1 ~]# /usr/local/nginx/sbin/nginx 8. 配置并启动 consul-template
手动上传 consul-template_0.19.3_linux_amd64.zip 包到/root 目录下
[roothuyang1 ~]#wget https://releases.hashicorp.com/consul-template/0.19.3/consul-template_0.19.3_linux_amd64.zip
[roothuyang1 ~]# unzip consul-template_0.19.3_linux_amd64.zip
[rootconsul ~]# mv consul-template /usr/bin/ 在前台启动 template 服务需要指定 template 模板文件及生成路径即可启动后不要按 ctrlc 中止。 [roothuyang1 ~]# consul-template -consul-addr 192.168.100.131:8500 -template /root/consul/nginx.tmp:/usr/local/nginx/conf/vhost/crushlinux.conf:/usr/local/nginx/sbin/nginx -s reload --log-levelinfo 生成的配置文件如下。
[rootconsul ~]# cat
/usr/local/nginx/conf/vhost/crushlinux.conf [roothuyang1 ~]# netstat -lnpt | grep nginx 9. 访问 template-nginx 配置文件
通过浏览器访问nginx 监听的8080 端口 10. 增加一个测试的容器节点
1增加一个tomcat容器节点测试服务发现及配置更新功能。
[roothuyang2 ~]# docker run -itd -p:8003:8080 -v /web:/usr/local/tomcat/webapps/ROOT --name huyang2-t3 -h huyang2-t3 tomcat 2观察consul-template服务他会自动从模板更新/usr/local/nginx/conf/vhost/crushlinux.conf 文件内容并且重载 nginx 服务。 3查看/usr/local/nginx/conf/vhost/crushlinux.conf 文件内容
[roothuyang1 ~]# cat
/usr/local/nginx/conf/vhost/crushlinux.conf