CentOS8 Consul微服务架构安装(1)_agent(1)

force-leave    Forces a member of the cluster to enter the "left" state
info           Provides debugging information for operators.
intention      Interact with Connect service intentions
join           Tell Consul agent to join cluster
keygen         Generates a new encryption key
keyring        Manages gossip layer encryption keys
kv             Interact with the key-value store
leave          Gracefully leaves the Consul cluster and shuts down
lock           Execute a command holding a lock
login          Login to Consul using an auth method
logout         Destroy a Consul token created with login
maint          Controls node or service maintenance mode
members        Lists the members of a Consul cluster
monitor        Stream logs from a Consul agent
operator       Provides cluster-level tools for Consul operators
reload         Triggers the agent to reload configuration files
rtt            Estimates network round trip time between nodes
services       Interact with services
snapshot       Saves, restores and inspects snapshots of Consul server state
tls            Builtin helpers for creating CAs and certificates
validate       Validate config files/directories
version        Prints the Consul version
watch          Watch for changes in Consul

## 4 启动


完成Consul的安装后,必须运行agent. agent可以运行为server或client模式.每个数据中心至少必须拥有一台server . 建议在一个集群中有3或者5个server.部署单一的server,在出现失败时会不可避免的造成数据丢失.


其他的agent运行为client模式.一个client是一个非常轻量级的进程.用于注册服务,运行健康检查和转发对server的查询.agent必须在集群中的每个主机上运行.



[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: ‘’)
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


这个输出显示我们自己的节点.运行的地址,健康状态,自己在集群中的角色,版本信息.添加-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
192.168.143.203 10.10.20.200:8301 alive server 1.11.4 2 dc1 default
192.168.143.192 10.10.20.192:8301 alive client 1.11.4 2 dc1 default


## 9 访问ui


![在这里插入图片描述](https://img-blog.csdnimg.cn/d77131325dfd4e48a306b75c09d736ae.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6LCi6LCi5aSn5a625oiR54ix5bCP6LCi,size_20,color_FFFFFF,t_70,g_se,x_16)


## 10 健康检查


### 10.1 定义检查


一个检查可以通过检查定义或HTTP API请求来注册.  
 使用和检查定义来注册检查.和服务类似,因为这是建立检查最常用的方式.


在194节点的配置目录建立两个定义文件:



echo ‘{“check”:{“name”:“ping”,“script”:“ping -c1 baidu.com >/dev/null”, “interval”:“30s”}}’ >/etc/consul.d/ping.json

echo ‘{“service”:{“name”:“web”, “tags”:[“rails”], “port”:80, “check”:{“script”:“curl localhost >/dev/null 2>&1”, “interval”:“10s”}}}’ >/etc/consul.d/web.json


第一个定义增加了一个主机级别的检查,名字为 “ping” . 这个检查每30秒执行一次,执行 ping -c1 163.com. 在基于脚本的健康检查中,脚本运行在与Consul进程一样的用户下.如果这个命令以非0值退出的话这个节点就会被标记为不健康.这是所有基于脚本的健康检查的约定.


第二个命令定义了名为web的服务,添加了一个检查.每十分钟通过curl发送一个请求,确定web服务器可以访问.和主机级别的检查一样.如果脚本以非0值退出则标记为不健康.


现在重启第二个agent或者发送SIGHUP信号



consul reload


![在这里插入图片描述](https://img-blog.csdnimg.cn/00983f11e7684d01a2ca62a30b5e9408.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6LCi6LCi5aSn5a625oiR54ix5bCP6LCi,size_15,color_FFFFFF,t_70,g_se,x_16)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值