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

本文涉及的产品
云解析DNS-重点域名监控,免费拨测 20万次(价值200元)
简介: 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行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**


相关文章
|
存储 安全 Java
每日大厂面试题大汇总 —— 今日的是“美团-后端开发-一面”
文章汇总了美团后端开发一面的面试题目,内容涉及哈希表、HashMap、二叉树遍历、数据库索引、死锁、事务隔离级别、Java对象相等性、多态、线程池拒绝策略、CAS、设计模式、Spring事务传播机制及RPC序列化工具等。
308 0
|
9月前
|
Web App开发 运维 Linux
破防了!原来CentOS联网设置竟藏在这个路径?网友:5年运维都白干了!
默认情况下,新装的 CentOS 无法直接上网。可通过点击桌面右上角的网络图标,启动 `eth0` 连接网络。为实现自动连接,右键该图标选择“编辑连接”,在 `System eth0` 设置中勾选“自动连接”。这样配置后,系统重启也能自动联网。
348 19
破防了!原来CentOS联网设置竟藏在这个路径?网友:5年运维都白干了!
|
存储 消息中间件 NoSQL
每日大厂面试题大汇总 —— 今日的是“京东-后端开发-一面”
文章汇总了京东后端开发一面的面试题目,包括ArrayList与LinkedList的区别、HashMap的数据结构和操作、线程安全问题、线程池参数、MySQL存储引擎、Redis性能和线程模型、分布式锁处理、HTTP与HTTPS、Kafka等方面的问题。
518 0
|
NoSQL 前端开发 关系型数据库
第四次面试总结 — 嘉和智能 - 全栈开发
本文是作者对嘉和智能全栈开发岗位的第四次面试总结,主要围绕对各种技术栈的了解程度进行提问,包括数据库的使用经验、对Redis和nginx的理解以及前端技能水平。
134 1
|
SQL 安全 关系型数据库
第三次面试总结 - 吉云集团 - 全栈开发
本文是作者对吉云集团全栈开发岗位的第三次面试总结,面试结果非常好,内容全面覆盖了Java基础、MySQL和项目经验,作者认为自己的MySQL基础知识稍弱,需要加强。
160 0
第三次面试总结 - 吉云集团 - 全栈开发
|
消息中间件 存储 前端开发
资深Android开发的5个经典面试题
本文首发于公众号“AntDream”,欢迎关注。文章详细解答了五个常见的Android面试题,涵盖内存泄漏与溢出、Binder机制、MVC/MVP/MVVM架构、Handler机制及Context对象等内容,帮助读者深入了解Android开发的核心概念。
307 0
|
JSON 安全 前端开发
第二次面试总结 - 宏汉科技 - Java后端开发
本文是作者对宏汉科技Java后端开发岗位的第二次面试总结,面试结果不理想,主要原因是Java基础知识掌握不牢固,文章详细列出了面试中被问到的技术问题及答案,包括字符串相关函数、抽象类与接口的区别、Java创建线程池的方式、回调函数、函数式接口、反射以及Java中的集合等。
188 0
|
存储 Java 数据库
每日大厂面试题大汇总 —— 今日的是“顺丰-后端开发-一面”
文章汇总了顺丰后端开发一面的面试题目,涵盖了Java虚拟机内存模型、HashMap与ConcurrentHashMap的区别、Spring框架设计模式、SpringBoot与SpringMVC差异、Nacos注册中心原理、Seata分布式架构、MySQL事务隔离级别、数据库死锁问题解决方法、乐观锁实现方式、HBASE底层设计、BIO与NIO区别、以及为何不使用现有开源框架而选择自建平台等问题。
165 0
|
缓存 关系型数据库 MySQL
百度搜索:蓝易云【CentOS8服务器安装MySQL报错:no match mysql-community-server】
现在,你已经成功安装了MySQL服务器并解决了"no match mysql-community-server"的报错问题。祝你使用愉快!
413 1
|
Linux 数据库管理 Python
CentOS7编译安装Python3.10(含OpenSSL1.1.1安装),创建虚拟环境,运行Django项目(含sqlite版本报错)
CentOS7编译安装Python3.10(含OpenSSL1.1.1安装),创建虚拟环境,运行Django项目(含sqlite版本报错)
1822 4