cnsullinux环境后台启动_Consul入门:实现分布式系统的服务发现与配置

更新时间:2023-07-07 19:46:24 阅读: 评论:0

cnsullinux环境后台启动_Consul⼊门:实现分布式系统的服务
发现与配置
Consul可以⽤来实现分布式系统的服务发现与配置,它是HashiCorp公司推出的⼀款实⽤开源⼯具,⽀持Linux等平台。Consul是分布式的、⾼可⽤的、可横向扩展的。本⽂介绍它的⼊门知识。
Consul具备的特性
服务发现: Consul提供了通过DNS或者HTTP接⼝的⽅式来注册服务和发现服务。⼀些外部的服务通过Consul很容易的找到它所依赖的服务。
健康检测: Consul的Client提供了健康检查的机制,可以通过⽤来避免流量被转发到有故障的服务上。
Key/Value存储: 应⽤程序可以根据⾃⼰的需要使⽤Consul提供的Key/Value存储。Consul提供了简单易⽤的HTTP接⼝,结合其他⼯具可以实现动态配置、功能标记、领袖选举等等功能。
多数据中⼼: Consul⽀持开箱即⽤的多数据中⼼. 这意味着⽤户不需要担⼼需要建⽴额外的抽象层让业务扩展到多个区域。
Consul架构
以下是Consul架构图:
Consul Cluster由部署和运⾏了Consul Agent的节点组成。在Cluster中有两种⾓⾊:Server和 Client。
Server和Client的⾓⾊和Consul Cluster上运⾏的应⽤服务⽆关, 是基于Consul层⾯的⼀种⾓⾊划分。
Consul Server: ⽤于维护Consul Cluster的状态信息。 官⽅建议是: ⾄少要运⾏3个或者3个以上的Consul Server。 多个rver之中需要选举⼀个leader, 这个选举过程Consul基于Raft协议实现. 多个Server节点上的Consul数据信息保持强⼀致性。在局域⽹内与本地客户端通讯,通过⼴域⽹与其他数据中⼼通讯。
Consul Client: 只维护⾃⾝的状态, 并将HTTP和DNS接⼝请求转发给服务端。
Consul安装
Consul⽤Golang实现,因此具有天然可移植性(⽀持 Linux、windows 和macOS)。安装包仅包含⼀个可执⾏⽂件。Consul安装⾮常简单,只需要下载对应系统的软件包并解压后就可使⽤。
1.Consul安装
这⾥以Linux系统为例:
$ unzip consul_1.2.1_linux_amd64.zip
$ mv consul /usr/local/bin/
其它系统版本可在这⾥下载。
2.验证安装
安装Consul后,通过执⾏consul命令,你可以看到类似的输出:
夜放花千树运⾏:$ consul
usage: consul [--version] [--help] []
Available commands are:
agent          Runs a Consul agent
event          Fire a new event
exec          Executes a command on Consul nodes
force-leave    Forces a member of the cluster to enter the "left" state
info          Provides debugging information for operators.
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
maint          Controls node or rvice 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
snapshot      Saves, restores and inspects snapshots of Consul rver state
validate      Validate config files/directories
version        Prints the Consul version
watch          Watch for changes in Consul
运⾏Consul代理
Consul是典型的C/S架构,可以运⾏服务模式或客户模式。
每⼀个数据中⼼必须有⾄少⼀个服务节点,3到5个服务节点最好。⾮常不建议只运⾏⼀个服务节点,因为在节点失效的情况下数据有极⼤的丢失风险。
其它的所有节点都运⾏在客户端模式下,⼀个客户节点是⾮常轻量的注册服务进程,⽤来处理健康检查,转发请求到服务节点等事务,代理必须在集群中的每个节点上运⾏。
为了简单起见,我们将暂时在开发者模式中启动Consul代理。这个模式可以⾮常容易快速地启动⼀个单节点的Consul环境。但是由于并不保存状态,所以不要在⽣产环境中使⽤。
$ consul agent -dev -bind=0.0.0.0
前赤壁赋多少字在有多个IP的环境下必须指定IP,否则会报如下类似错误:
==> Error starting agent: Failed to get adverti address: Multiple private IPs found. Plea configure one.
我的环境是多IP的情况,这⾥就显⽰指定IP:
运⾏:$ consul agent -dev -bind=192.168.2.210
==> Starting
==> Consul agent running!
Version: 'v1.2.1'
Node ID: 'b76ff298-accd-05ff-8c64-5d79d866dfa9'
Node name: 'dev-master-01'
Datacenter: 'dc1'
Server: true (bootstrap: fal)
Client Addr: 127.0.0.1 (HTTP: 8500, HTTPS: -1, DNS: 8600)
Cluster Addr: 192.168.2.210 (LAN: 8301, WAN: 8302)
Gossip encrypt: fal, RPC-TLS: fal, TLS-Incoming: fal
Atlas:
==> Log data will now stream in as it occurs:
2018/07/14 09:57:06 [DEBUG] Using unique ID "b76ff298-accd-05ff-8c64-5d79d866dfa9" from host as node ID
2018/07/14 09:57:06 [INFO] raft: Initial configuration (index=1): [{Suffrage:Voter ID:192.168.2.210:8300
Address:192.168.2.210:8300}]
2018/07/14 09:57:06 [INFO] rf: EventMemberJoin: dev-master-01 192.168.2.210
2018/07/14 09:57:06 [INFO] rf: EventMemberJoin: dev-master-01.dc1 192.168.2.210
2018/07/14 09:57:06 [INFO] raft: Node at 192.168.2.210:8300 [Follower] entering Follower state (Leader: "")
2018/07/14 09:57:06 [INFO] consul: Adding LAN rver dev-master-01 (Addr: tcp/192.168.2.210:8300) (DC: dc1)
2018/07/14 09:57:06 [INFO] consul: Handled member-join event for rver "dev-master-01.dc1" in area "wan"
2018/07/14 09:57:13 [ERR] agent: failed to sync remote state: No cluster leader
2018/07/14 09:57:14 [WARN] raft: Heartbeat timeout from "" reached, starting election
2018/07/14 09:57:14 [INFO] raft: Node at 192.168.2.210:8300 [Candidate] entering Candidate state in term 2
2018/07/14 09:57:14 [DEBUG] raft: Votes needed: 1
2018/07/14 09:57:14 [DEBUG] raft: Vote granted from 192.168.2.210:8300 in term 2. Tally: 1
2018/07/14 09:57:14 [INFO] raft: Election won. Tally: 1
2018/07/14 09:57:14 [INFO] raft: Node at 192.168.2.210:8300 [Leader] entering Leader state
2018/07/14 09:57:14 [INFO] consul: cluster leadership acquired
2018/07/14 09:57:14 [INFO] consul: New leader elected: dev-master-01
2018/07/14 09:57:14 [DEBUG] consul: ret tombstone GC to index 3
2018/07/14 09:57:14 [INFO] consul: member 'dev-master-01' joined, marking health alive
2018/07/14 09:57:16 [INFO] agent: Synced rvice 'consul'
2018/07/14 09:57:16 [DEBUG] agent: Node info in sync
从上⾯Consul代理启动过程中输出的⽇志信息可以看到代理运⾏在服务器模式并且声明集群的leadship。另外,本地的成员已经被标记为⼀个健康的集群成员。
启动consul后,系统会监听如下端⼝:
运⾏:$ netstat  -tunpea | grep consul
查看集群成员
1.使⽤member命令
在另⼀个终端中运⾏下⾯的指令,就能看到Consul集群所有的节点。
运⾏:$ consul members
输出结果显⽰了节点名称,运⾏的地址,健康状态,在集群中的⾓⾊,以及⼀些版本信息。如果查看更详细的信息可通过-detailed选项来查看。
运⾏:$ consul members -detailed
Node          Address            Status  Tags
dev-master-01  192.168.2.210:8301  alive  build=0.8.1:'e9ca44d,dc=dc1, id=b76ff298-accd-05ff-8c64-
5d79d866dfa9,port=8300, raft_vsn=2,role=consul,vsn=2,vsn_max=3,vsn_min=2,wan_join_port=8302
2.使⽤HTTP API
members命令选项的输出是基于gossip协议的并且其内容是最终⼀致。也就是说,在任何时候你在本地代理看到的内容可能与当前服务器中的状态并不是绝对⼀致的。
如果需要强⼀致性的状态信息,使⽤HTTP API向Consul服务器发送请求:
运⾏:$ curl localhost:8500/v1/catalog/nodes
[
{
"ID": "b76ff298-accd-05ff-8c64-5d79d866dfa9",
"Node": "dev-master-01",
"Address": "192.168.2.210",
"TaggedAddress": {
"lan": "192.168.2.210",
"wan": "192.168.2.210"
},
"Meta": {},
"CreateIndex": 5,
张含韵身高"ModifyIndex": 6
}
苏州社保管理中心]
3.使⽤DNS API
除了HTTP API,DNS接⼝也可⽤被⽤来查询节点信息。启动服务后,本地的8600⼀直处于监听状态,可以接受DNS请求。
$ netstat  -tunpea | grep consul | grep 8600
4.使⽤dig查看节点IP
运⾏:$ dig @127.0.0.1 -p 8600  sul
; <<>> DiG 9.10.3-P4-Ubuntu <<>> @127.0.0.1 -p de.consul
; (1 rver found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<
茶的分类
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;sul.INA
;; ANSWER SECTION:
;; Query time: 1 mc保安职责及工作要求
;; SERVER: 127.0.0.1#8600(127.0.0.1)
;; WHEN: Tue May 09 10:21:18 CST 2017回忆歌曲
;; MSG SIZE  rcvd: 59
停⽌服务
在终端前台运⾏的情况下,可使⽤Ctrl-C来平滑地停⽌代理。停⽌代理后,你可以看到它脱离集群并且关闭的信息。
2018/07/14 10:32:13 [DEBUG] manager: Rebalanced 1 rvers, next active rver is dev-master-01.dc1 (Addr:
tcp/192.168.2.210:8300) (DC: dc1)
2018/07/14 10:33:22 [DEBUG] agent: Service 'consul' in sync
2018/07/14 10:33:22 [DEBUG] agent: Node info in sync
手机内存清理^C==> Caught signal: interrupt
2018/07/14 10:34:17 [DEBUG] http: Shutting down http rver (127.0.0.1:8500)
2018/07/14 10:34:17 [INFO] agent: requesting shutdown
2018/07/14 10:34:17 [INFO] consul: shutting down rver
2018/07/14 10:34:17 [WARN] rf: Shutdown without a Leave
2018/07/14 10:34:17 [ERR] dns: error starting tcp rver: accept tcp 127.0.0.1:8600: u of clod network connection
2018/07/14 10:34:17 [WARN] rf: Shutdown without a Leave
2018/07/14 10:34:17 [INFO] manager: shutting down
2018/07/14 10:34:17 [INFO] agent: shutdown complete
为了优雅地离开集群,Consul会通知其他的集群成员⾃⼰已经脱离了。如果你强制杀死代理的进程,那么其他的集群成员需要侦测节点是否失效。当⼀个成员离开,它的服务以及健康状态将从⽬录中移除。当⼀个成员失效,它的健康会简单地标记为critical,但它并不会被从⽬录中移除。Consul将⾃动尝试重新连接到失效的节点,并允许它在某些⽹络状况下恢复。如果⼀个代理以服务器模式启动,优雅地离开是⾮常重要的,因为这可以避免潜在的可⽤性问题。
启动Web界⾯
Consul⾃带⼀个界⾯美观,功能强⼤的,开箱即⽤的Web界⾯。通过该界⾯我们可以查看所有的服务以及节点,查看所有的健康监测及其当前的状态,以及读取和设置键/值数据。

本文发布于:2023-07-07 19:46:24,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1072017.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:节点   服务   代理   集群   状态   启动   信息
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图