简介
之前公司用的是Consul进行服务发现以及服务管理,自己一直以来只是用一下,但是没有具体的深入,觉得学习不可以这样,所以稍微研究了一下。
网上有很多关于Consul的介绍和对比,我这里也不献丑了,大家搜索的时候可能会经常看到这么一个表格,此表格采摘自:https://luyiisme.github.io/2017/04/22/spring-cloud-service-discovery-products/
Feature | Consul | zookeeper | etcd | euerka |
---|---|---|---|---|
服务健康检查 | 服务状态,内存,硬盘等 | (弱)长连接,keepalive | 连接心跳 | 可配支持 |
多数据中心 | 支持 | — | — | — |
kv存储服务 | 支持 | 支持 | 支持 | — |
一致性 | raft | paxos | raft | — |
cap | ca | cp | cp | ap |
使用接口(多语言能力) | 支持http和dns | 客户端 | http/grpc | http(sidecar) |
watch支持 | 全量/支持long polling | 支持 | 支持 long polling | 支持 long polling/大部分增量 |
自身监控 | metrics | — | metrics | metrics |
安全 | acl /https | acl | https支持(弱) | — |
spring cloud集成 | 已支持 | 已支持 | 已支持 | 已支持 |
下载并配置Consul
我这里是直接使用的虚拟机进行配置Consul,系统是CentOS 7,Consul的安装和配置其实网上也是有一堆教程,这里简单的介绍一下,Consul的下载地址(https://www.consul.io/downloads.html),根据需要选择不同的包:
下载Consul的ZIP包以及使用unzip进行解压,这里简单贴几个命令:
$ wget https://releases.hashicorp.com/consul/1.2.0/consul_1.2.0_linux_amd64.zip
$ yum install unzip
$ unzip consul_0.7.2_linux_amd64.zip $ mv consul /usr/local/bin/consul
到此,就可以在控制台中输入consul,然后看到有如下打印结果,即代表正常:
开始配置,consul默认有如下几种Mode:
- dev ,快捷配置,一般用于调试模式
- server,服务器
- client,客户端
学习Consul的时候,会有很多教程可能为了快速的入门,所以在配置Consul的时候,直接使用了dev模式,我个人觉得使用这个模式没什么意思,因为使用这个dev效果就跟单机模式是一样的,我们这里是学习分布式架构的,所以不采用。
剩下的还有server模式以及client模式,server模式好理解,在我们搭建的集群中,都是使用此模式。可是client模式主要是用来做什么呢?先看一眼下面的图片:
(图片摘自:https://andyyoung01.github.io/2016/09/27/%E4%BD%BF%E7%94%A8Consul%E8%BF%9B%E8%A1%8C%E6%9C%8D%E5%8A%A1%E5%8F%91%E7%8E%B0/)
上面的图片大致的意思就是有一个server集群,然后如果我们的服务想要加入server集群,就必须要通过client来进行rpc调用。(这个是我的理解,大家可以进行补充)
大致理解了这么一个结构之后,我们开始进行集群的配置,我这里通过虚拟机进行模拟,有如下几台机器:
- 192.168.125.118 server1(集群服务器)
- 192.168.125.121 server2(集群服务器)
- 192.168.125.120 server3(集群服务器)
- 192.168.125.119 client(客户端)
三个做集群服务器,还有一个是客户端,集群服务器是由一个CentOS的虚拟机以及其两个拷贝组成,客户端我是在我的笔记本上装了一个Ubuntu的操作系统来实现的。
大致结构了解了之后,我们开始进行配置:
集群服务器的配置分别为:
$ consul agent -server -ui -bootstrap-expect=3 -data-dir=/tmp/consul -node=server1 -client=0.0.0.0 -bind=192.168.125.118
$ consul agent -server -ui -bootstrap-expect=3 -data-dir=/tmp/consul -node=server2 -client=0.0.0.0 -bind=192.168.125.121
$ consul agent -server -ui -bootstrap-expect=3 -data-dir=/tmp/consul -node=server3 -client=0.0.0.0 -bind=192.168.125.120
简单说一下几个配置:
- agent Consul的核心命令,主要作用有维护成员信息、运行状态检测、声明服务以及处理请求等
- -server 就是代表server模式
- -ui 代表开启web 控制台
- -bootstrap-expect 代表想要创建的集群数目,官方建议3或者5
- -data-dir 数据存储目录
- -node 代表当前node的名称
- -client 应该是一个客户端服务注册的地址,可以和当前server的一致也可以是其他主机地址,系统默认是127.0.0.1
- -bind 集群通讯地址
上述命令执行完成之后,开始将这些分散的服务器组成集群,命令如下,分别在192.168.125.121和192.168.125.120机器上执行:
$ consul join 168.1