Consul入门

10 篇文章 0 订阅

一、Consul介绍

1.1 Consul是什么?

Consul是HashiCorp公司推出的开源工具,是使用Go语言实现的分布式系统的服务发现与配置管理中心服务。它具有以下优点:

  1. 基于raft协议,语法简洁;
  2. 支持健康检查和HTTP、DNS等协议;
  3. 支持跨数据中心的集群;
  4. 跨平台支持

1.2 什么是服务发现

比如说有两个服务,一个a服务,另外一个b服务。假如a服务要调用服务b,那么b服务先会在注册中心进行注册。注册中心维护了一个服务列表,所有注册过服务的名称和地址都会保存在该服务列表中。所以,当a服务要嗲用b服务的时候,首先a服务会从注册中心根据服务名称查询b服务的地址,然后再根据地址调用b服务。在实际开发中,Consul就是作为这个服务的注册中心被使用。除了维护所有注册服务的地址以外,注册中心还维护了注册服务的状态。它会定时检查所有服务的状态,如果服务已经关闭,那么它就会把服务从服务列表中删除掉。

1.3 Consul的组成

在Consul集群架构中,主要包含了Client、Server、Server-Leader、Data Center几部分,如下图所示:
在这里插入图片描述

  • Client:客户端模式。在这种模式下,所有注册到当前节点的服务会被转发到Server,该节点本身不会保存这些信息。
  • Server:服务端模式。与Client模式的功能相似,但是在该模式下,如果节点发生故障,它会把所有信息保存在本地,防止节点数据的丢失。
  • Server-Leader:服务的领导者。与Server不一样的是,它需要负责同步注册信息给其他Server,同时也要负责对各个节点的健康进行检测。
  • Data Center:每一个数据中心都是有Client和Server组成。一般建议一个数据中心应该包含3~5个Server。但对于Client没有该限制。

1.4 Consul的下载和安装

官方下载地址:https://releases.hashicorp.com/consul/

我们可以执行命令下载最新的压缩包。例如:

$ wget https://releases.hashicorp.com/consul/1.5.1/consul_1.5.1_linux_amd64.zip

下载完成后,执行命令直接解压缩。

$ unzip consul_1.5.1_linux_amd64.zip

最后,把解压缩后的可执行文件移动到/usr/local/bin目录下。

$ mv ./consul /usr/local/bin

二、搭建Consul集群

Consul是典型的C/S结构,每一个数据中心都包含客户端和服务端。但是要求每个数据中心都包含至少一个服务节点,建议3~5个服务节点,以防数据发生丢失的情况。

(1)环境准备
我们在vmware上准备三台服务器,每一台服务器运行一个服务节点或客户端节点。然后配置每一台服务器的网络,例如:

sudo vim /etc/network/interfaces

修改为每一台机器分配一个IP地址,例如:

node1:192.168.31.20
node2:192.168.31.101
node3:192.168.31.156

分配完成后重启网络。

$ sudo /etc/init.d/networking restart

最后,每一台服务测试一下网络,保证三台服务器的网络可以互相连接。

(2)启动Consul Server
完成consul安装后,必须运行agent。agent可以使用server或client的方式运行,但是至少要有一个服务端的agent,其他agent可运行为client模式。一个client是一个非常轻量级的进程,它必须运行在集群中的每一台主机上。它负责服务注册、运行健康检查、转发对server的查询等等。

# 命令格式:
consul agent [-server] [-bootstrap-expect 节点数量] [-data-dir 目录名] [-node=节点名] [-bind=节点IP] [-ui] [-config-dir 配置文件目录] [-rejoin] [-join 节点IP] [-client 服务地址]

参数说明:

  • -server:指定agent的运行模式为server模式;
  • -bootstrap-expect:指定数据中心期望提供的server节点数量。如果指定该参数,那么只有当节点达到了该数量的时候,consul才会引导整个集群;
  • -data-dir:提供一个目录,用于存放agent的状态信息;
  • -node:节点名称,在整个集群中是唯一的,用于标识一个节点。默认名称为该节点的主机名;
  • -bind:绑定宿主机的IP地址,用于集群内部通信的IP地址,默认为0.0.0.0;
  • -ui:如果指定该参数,就会启动一个ui界面;
  • -config-dir:保存consul配置文件的目录;
  • -rejoin:如果指定该参数,那么consul重启后会自动重新加入集群中;
  • -join:启动时候加入集群的地址;
  • -client:consul监听服务地址,该地址提供了HTTP、DNS、RPC等服务,默认为127.0.0.1。如果要对外提供服务,需要修改为0.0.0.0;

例如:

# 在机器192.168.31.20创建node1节点
$ sudo mkdir /etc/consul.d
$ consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -node=n1 -bind=192.168.31.20 -ui  -config-dir /etc/consul.d -rejoin -join 192.168.31.20 -client 0.0.0.0

# 在机器192.168.31.101创建node2节点
$ sudo mkdir /etc/consul.d
$ consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -node=n2 -bind=192.168.31.101 -config-dir=/etc/consul.d  -rejoin -join 192.168.31.20

上面node2节点没有指定-ui和-client参数,因此无法通过该节点地址查询所有服务,只能通过node1节点查询。

(3)启动Consul Client

运行Client的命令格式与Consul Server相似,命令如下:

# 在机器192.168.31.156创建node3节点
$ sudo mkdir /etc/consul.d
$ consul agent  -data-dir /tmp/consul -node=n3 -bind=192.168.31.156 -config-dir /etc/consul.d -rejoin -join 192.168.31.20

运行client无需指定-server、-bootstrap-expect、-ui、-client参数。-join指定要加入到集群的地址。

(4)查看集群成员

启动完成后,可以执行consul members命令查看到Consul集群中的所有成员信息。
在这里插入图片描述
我们也可以使用web方式查看。在浏览器上输入“http://192.168.31.20:8500”回车,效果如下所示:
在这里插入图片描述

三、注册服务

搭建好集群后,我们可以在集群中的任意一个节点上注册服务。

注册服务有两种方式:定义服务文件或者是调用Consul提供的API注册服务。下面主要介绍定义服务文件方式注册服务。

3.1 定义服务文件

第一步:在/etc/consul.d目录下新建一个json文件,文件名可以自行定义。

$ cd /etc/consul.d
$ vim web.json

第二步:编辑文件,配置服务信息。

{
  "service": {
    "name": "web",
    "tags": ["zhong"],
    "address": "127.0.0.1",
    "port": 10000,
    "checks": [
      {
        "http": "http://localhost:10000/test",
        "interval": "10s"
      }
    ]
  }
}

上面代码定义了一个名为web的服务。服务地址是127.0.0.1:10000,也就是说,该服务是部署到本地机器上。

第三步:定义服务。在$GOPATH/src目录下新建test.go文件。

package main

import (
        "fmt"
        "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
        fmt.Println("hello handler....")
}

func testHandler(w http.ResponseWriter, r *http.Request) {
        fmt.Println("hello testHandler....")
}

func main() {
        http.HandleFunc("/", handler)
        http.HandleFunc("/test", testHandler)
        http.ListenAndServe(":10000", nil)
}

第四步:启动服务。

$ go run test.go

第五步:重启运行Consul Agent。运行成功后可以在web上查看注册的服务。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值