consul-服务注册与发现

随着微服务的风潮的来临,服务注册和发现成了微服务架构中不可或缺的一部分。想象一下,你的系统被拆分成了n个独立的服务,相互直接的调用如果还是使用传统的配置文件来解决的话,管理起来可就违背了微服务的初衷。本篇文章注重介绍一下consul 使用。

consul与其他常见的服务发现框架对比

zookeeper是一款基于Java的强大的框架,优点是不只是可以做服务发现,他提供了watcher机制可以实时获取服务提供者的从状态,缺点是没有健康检查,他是复杂度高,通过sdk提供服务

etcd是一款相对轻巧的服务框架,他的优点是简单易用,可配置性强,缺点是没有健康检查,需要配合其他服务完成服务发现。

consul相对两者而言,由于是go编译的,不需要安装依赖,即插即用,同时指出http和dns的方式完成操作接口,而且提供了web页面,缺点是不能实时获取服务信息的变化通知。

consul的几个概念

Gossip 疫情传播算法,他是以生活中的电脑传播的,森林大火等方式进行传播,详细介绍可参考https://www.jianshu.com/p/8279d6fd65bb。consul通过Gossip来保证分布式的最终一致性。

Server和Client,其实都是consul运行的实例,区别是Server维护consul状态信息,负责持久化数据,Client只维护自身的状态, 并将 HTTP 和 DNS 接口请求转发给服务端。Server建议配置3或5个,当Server leader挂掉的时候,会有选举算法推举出新的leader。Client可以根据需求进行无限扩展。

consul实战

1,安装docker,未安装可参考https://blog.csdn.net/JiuJieGuDuKe/article/details/100581909

2,docker启动Server和Client

docker pull consul 拉取镜像

#启动第1个Server节点,集群要求要有3个Server,将容器8500端口映射到主机8900端口,同时开启管理界面
docker run -d --name=consul1 -p 8900:8500 -e CONSUL_BIND_INTERFACE=eth0 consul agent --server=true --bootstrap-expect=3 --client=0.0.0.0 -ui
 
#启动第2个Server节点,并加入集群
docker run -d --name=consul2 -e CONSUL_BIND_INTERFACE=eth0 consul agent --server=true --client=0.0.0.0 --join 172.17.0.2
 
#启动第3个Server节点,并加入集群
docker run -d --name=consul3 -e CONSUL_BIND_INTERFACE=eth0 consul agent --server=true --client=0.0.0.0 --join 172.17.0.2
 
#启动第4个Client节点,并加入集群
docker run -d --name=consul4 -e CONSUL_BIND_INTERFACE=eth0 consul agent --server=false --client=0.0.0.0 --join 172.17.0.2

3,测试注册服务

使用postman或者curl等工具发送注册服务请求

http://ip:8900/v1/health/service/mysql1

put请求数据 

{
  "ID": "mysql1",
  "Name": "mysql1",
  "Tags": [
    "primary",
    "v1"
  ],
  "Address": "ip",
  "Port": 3306,
  "Meta": {
    "redis_version": "4.0"
  },
  "EnableTagOverride": false,
  "Check": {
    "id": "mysql1",  
    "name": "mysql1",  
    "tcp": "ip:3306",  
    "interval": "10s",  
    "timeout": "1s"  
  },
  "Weights": {
    "Passing": 10,
    "Warning": 1
  }
}

查看服务状态http://ip.144:8900/v1/health/service/mysql1

4 web ui页面

打开 http://ip:8900/ui/dc1/services 可以查看相关服务的状态

5 consul template

consul官方提供了模板工具,可以通过标签的方式来获取服务状态,详情参考https://github.com/hashicorp/consul-template

 

你可能感兴趣的:(微服务,docker,centos)