2024年最全CentOS8 Consul微服务架构安装(1)_agent(1),Linux运维开发面试

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 2024年最全CentOS8 Consul微服务架构安装(1)_agent(1),Linux运维开发面试
[root@controller ~]# consul agent -dev -config-dir /etc/consul.d
==> Starting Consul agent...
           Version: '1.11.4'
           Node ID: '76590d82-0f5e-b8be-1248-ec541e4ab541'
         Node name: 'controller'
        Datacenter: 'dc1' (Segment: '<all>')
            Server: true (Bootstrap: false)
       Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, gRPC: 8502, DNS: 8600)
      Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302)
           Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false, Auto-Encrypt-TLS: false
==> Log data will now stream in as it occurs:
   。。。。(省略)

5 集群成员

新开一个终端窗口运行consul members, 你可以看到Consul集群的成员.

[root@controller ~]# consul members
Node        Address         Status  Type    Build   Protocol  DC   Partition  Segment
controller  127.0.0.1:8301  alive   server  1.11.4  2         dc1  default    <all>

这个输出显示我们自己的节点.运行的地址,健康状态,自己在集群中的角色,版本信息.添加-detailed选项可以查看到额外的信息.

6 停止Agent

Ctrl-C

在退出中,Consul提醒其他集群成员,这个节点离开了.如果你强行杀掉进程.集群的其他成员应该能检测到这个节点失效了.当一个成员离开,他的服务和检测也会从目录中移除.当一个成员失效了,他的健康状况被简单的标记为危险,但是不会从目录中移除.Consul会自动尝试对失效的节点进行重连.允许他从某些网络条件下恢复过来.离开的节点则不会再继续联系.

7 注册服务

7.1 定义一个服务

可以通过提供服务定义或者调用HTTP API来注册一个服务.服务定义文件是注册服务的最通用的方式.

首先,为Consul配置创建一个目录.Consul会载入配置文件夹里的所有配置文件.centos 路径为 /etc/consul.d

然后,将编写服务定义配置文件.假设有一个名叫web的服务运行在 80端口.另外,我们将给他设置一个标签.这样我们可以使用他作为额外的查询方式:

echo '{"service": {"name": "web", "tags": ["rails"], "port": 80}}' \
    >/etc/consul.d/web.json

重启agent , 设置配置目录:

consul agent -dev -config-dir /etc/consul.d
==> Starting Consul agent...
...
    [INFO] agent: Synced service 'web'
...

此时输出了 “synced” 了 web这个服务.意思是这个agent从配置文件中载入了服务定义,并且成功注册到服务目录.

7.2 查询服务

可以通过DNS或者HTTP的API来查询服务.

DNS API

在DNS API中,服务的DNS名字是 NAME.service.consul. 虽然是可配置的,但默认的所有DNS名字会都在consul命名空间下.这个子域告诉Consul,我们在查询服务,NAME则是服务的名称.

上面注册的Web服务.它的域名是 web.service.consul :

dig @127.0.0.1 -p 8600 web.service.consul
HTTP API
curl http://localhost:8500/v1/catalog/service/web
[{"Node":"hdp2","Address":"10.0.0.52","ServiceID":"web","ServiceName":"web","ServiceTags":["rails"],"ServiceAddress":"","ServicePort":80,"ServiceEnableTagOverride":false,"CreateIndex":4,"ModifyIndex":254}]

7.3 更新服务

服务定义可以通过配置文件并发送SIGHUP给agent来进行更新.这样你可以让你在不关闭服务或者保持服务请求可用的情况下进行更新.

8 建立集群

当一个agent启动时,他开始不知道其他节点的信息,他是一个成员的孤立集群.为了了解其他集群成员这个agent必须加入一个已经存在的集群.要加入一个已经存在的集群,只需要知道一个已经存在的集群成员.通过与这个成员的沟通来发现其他成员,Consul agent可以加入任何agent而不只是出于server模式的agent.

启动了另外的2台主机, 192.168.143.192 和192.168.143.194,先安装consul

每个集群中的节点都必须要一个唯一的名字.Consul默认会使用机器的hostname.我们可以使用-node手动覆盖他.也可以使用-bind指定一个绑定的地址让Consul在这个地址上进行监听,这个地址必须可以被其他集群成员访问到.绑定地址不是必须提供,Consul选择第一个私有IP进行监听,不过最好还是指定一个.生产环境的服务器通常有多个网络接口.所以指定一个不会让Consul绑错网络接口.

第一个节点将扮演集群的唯一server,我们使用-server指定他.

最后,加入 config-dir选项,指定服务和健康检查定义文件存放的路径.

创建server
#创建文件夹
mkdir -p /consul/{config,data}
#配置10.10.20.200节点
consul agent -server -bootstrap-expect=2 -data-dir=/consul/data -node=192.168.143.203 -bind=10.10.20.200 -enable-script-checks=true -config-dir=/consul/config -client 0.0.0.0 -ui &
[1] 20336
#配置10.10.20.194节点
consul agent -server -bootstrap-expect=2 -data-dir=/consul/data -node=192.168.143.194 -bind=10.10.20.194 -enable-script-checks=true -config-dir=/consul/config -client 0.0.0.0 -ui &
[1] 208893

参数解释:

-node:节点的名称 
-bind:绑定的一个地址,用于节点之间通信的地址,可以是内外网,必须是可以访问到的地址 
-server:表示这个节点是个Server
-bootstrap-expect:表示期望提供的Server节点数目。数目一达到,它就会被激活,然后就是leader了
-data-dir:Agent用于存储状态的数据目录,这是所有Agent所必需的
-datacenter:指明数据中心的名字,默认是"dc1"。同一数据中心中的节点应位于单个LAN上
-client:将Client接口(包括HTTP和DNS服务器)绑定到的地址
-ui:启动UI
创建client
consul agent -data-dir=/consul/data -node=192.168.143.192 -bind=10.10.20.192 -enable-script-checks=true -config-dir=/consul/config -client 0.0.0.0 -ui &
[1] 160873

报错:

  1. [ERROR] agent.anti_entropy: failed to sync remote state: error=“No cluster leader”
    未加入集群,就没有leader ,正常现象
  2. [ERROR] tain an address: Failed to start TCP listener on “10.10.20.192” port 8301: listen tcp 10.10.20.192:8301: bind: cannot assign requested address"
    -bind=10.10.20.192这里要写内网IP
  3. [ERROR] agent.anti_entropy: failed to sync remote state: error=“No known Consul servers”
    client未加入集群,正常现象
加入集群

重开一个终端

除了203以外的节点:

[root@stone ~]# consul join 10.10.20.200
Successfully joined cluster by contacting 1 nodes.

正确输出:

2022-04-15T11:39:27.230+0800 [INFO]  agent.server.serf.lan: serf: EventMemberJoin: 192.168.143.194 10.10.20.194
2022-04-15T11:39:27.230+0800 [INFO]  agent.server: Adding LAN server: server="192.168.143.194 (Addr: tcp/10.10.20.194:8300) (DC: dc1)"
2022-04-15T11:39:27.230+0800 [INFO]  agent.server: member joined, marking health alive: member=192.168.143.194 partition=default
2022-04-15T11:39:27.231+0800 [INFO]  agent.server.serf.wan: serf: EventMemberJoin: 192.168.143.194.dc1 10.10.20.194
2022-04-15T11:39:27.231+0800 [INFO]  agent.server: Handled event for server in area: event=member-join server=192.168.143.194.dc1 area=wan
2022-04-15T11:39:36.037+0800 [INFO]  agent.server.serf.lan: serf: EventMemberJoin: 192.168.143.192 10.10.20.192
2022-04-15T11:39:36.037+0800 [INFO]  agent.server: member joined, marking health alive: member=192.168.143.192 partition=default

验证:

root@controller ~]# consul members
Node             Address            Status  Type    Build   Protocol  DC   Partition  Segment
192.168.143.194  10.10.20.194:8301  alive   server  1.11.4  2         dc1  default    <all>
192.168.143.203  10.10.20.200:8301  alive   server  1.11.4  2         dc1  default    <all>
192.168.143.192  10.10.20.192:8301  alive   client  1.11.4  2         dc1  default    <default>
### 最后的话
最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!
### 资料预览
给大家整理的视频资料:
![](https://ucc.alicdn.com/images/user-upload-01/img_convert/a64708ed868f00a956c70a87547309eb.png)
给大家整理的电子书资料:
  
![](https://ucc.alicdn.com/images/user-upload-01/img_convert/b7613bedcba90267c681751b62455a3f.png)
**如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!**
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
,让我有持续创作的动力!**
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**


相关文章
|
7天前
|
机器学习/深度学习 前端开发 算法
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
34 3
|
5天前
|
前端开发 搜索推荐 安全
陪玩系统架构设计陪玩系统前后端开发,陪玩前端设计是如何让人眼前一亮的?
陪玩系统的架构设计、前后端开发及前端设计是构建吸引用户、功能完善的平台关键。架构需考虑用户需求、技术选型、安全性等,确保稳定性和扩展性。前端可选用React、Vue或Uniapp,后端用Spring Boot或Django,数据库结合MySQL和MongoDB。功能涵盖用户管理、陪玩者管理、订单处理、智能匹配与通讯。安全性方面采用SSL加密和定期漏洞扫描。前端设计注重美观、易用及个性化推荐,提升用户体验和平台粘性。
32 0
|
14天前
|
弹性计算 运维 Serverless
卓越效能,极简运维,体验Serverless高可用架构,完成任务可领取转轮日历!
卓越效能,极简运维,体验Serverless高可用架构,完成任务可领取转轮日历!
|
21天前
|
运维 监控 Java
后端开发中的微服务架构实践与挑战####
在数字化转型加速的今天,微服务架构凭借其高度的灵活性、可扩展性和可维护性,成为众多企业后端系统构建的首选方案。本文深入探讨了微服务架构的核心概念、实施步骤、关键技术考量以及面临的主要挑战,旨在为开发者提供一份实用的实践指南。通过案例分析,揭示微服务在实际项目中的应用效果,并针对常见问题提出解决策略,帮助读者更好地理解和应对微服务架构带来的复杂性与机遇。 ####
|
20天前
|
消息中间件 运维 安全
后端开发中的微服务架构实践与挑战####
在数字化转型的浪潮中,微服务架构凭借其高度的灵活性和可扩展性,成为众多企业重构后端系统的首选方案。本文将深入探讨微服务的核心概念、设计原则、关键技术选型及在实际项目实施过程中面临的挑战与解决方案,旨在为开发者提供一套实用的微服务架构落地指南。我们将从理论框架出发,逐步深入至技术细节,最终通过案例分析,揭示如何在复杂业务场景下有效应用微服务,提升系统的整体性能与稳定性。 ####
32 1
|
25天前
|
监控 Serverless 云计算
探索Serverless架构:开发实践与优化策略
本文深入探讨了Serverless架构的核心概念、开发实践及优化策略。Serverless让开发者无需管理服务器即可运行代码,具有成本效益、高可扩展性和提升开发效率等优势。文章还详细介绍了函数设计、安全性、监控及性能和成本优化的最佳实践。
|
21天前
|
消息中间件 运维 API
后端开发中的微服务架构实践####
本文深入探讨了微服务架构在后端开发中的应用,从其定义、优势到实际案例分析,全面解析了如何有效实施微服务以提升系统的可维护性、扩展性和灵活性。不同于传统摘要的概述性质,本摘要旨在激发读者对微服务架构深度探索的兴趣,通过提出问题而非直接给出答案的方式,引导读者深入
38 1
|
22天前
|
负载均衡 监控 API
后端开发中的微服务架构实践与挑战
本文深入探讨了微服务架构在后端开发中的应用,分析了其优势和面临的挑战,并通过案例分析提出了相应的解决策略。微服务架构以其高度的可扩展性和灵活性,成为现代软件开发的重要趋势。然而,它同时也带来了服务间通信、数据一致性等问题。通过实际案例的剖析,本文旨在为开发者提供有效的微服务实施指导,以优化系统性能和用户体验。
|
27天前
|
消息中间件 运维 开发者
后端开发中的微服务架构实践与挑战####
本文深入探讨了微服务架构在后端开发中的应用,从其核心概念、设计原则到实际部署过程中面临的挑战进行了全面剖析。不同于传统的单体应用,微服务通过将复杂系统拆解为一系列小型、独立的服务,提高了系统的灵活性和可维护性。然而,这种架构的转变也伴随着服务间通信、数据一致性、部署复杂性等新问题。本文旨在为开发者提供一套应对这些挑战的策略,同时分享一些成功案例,以期促进微服务架构的有效实施。 ####
|
26天前
|
消息中间件 监控 API
后端开发中的微服务架构实践与挑战####
本文深入探讨了微服务架构在现代后端开发中的应用,分析了其优势、实施过程中的关键考虑因素及面临的挑战。不同于传统的单体应用,微服务通过拆分功能模块为独立服务,提升了系统的灵活性和可维护性。我们将从微服务的基本概念入手,逐步剖析其在真实场景下的应用案例,并讨论如何有效应对服务间通信、数据一致性等复杂问题,旨在为开发者提供一套实用的微服务落地指南。 ####
22 0