consul 日志配置_安装Consul集群

TIPS

  • 本文基于Consul 1.5.3,理论适用于Consul 1.6及更低版本。
  • 安装单机版Consul详见:《安装单机版Consul》

知识预热

Consul常用命令

e737d21230719139dcf4d40f4bce2774.png

参考文档

这里只列出几个常用的命令,consul有将近20个命令,本文不作展开,详见:https://www.consul.io/docs/commands/index.html

consul agent 命令详解

常用选项

consul agent 命令的常用选项如下:

  • -data-dir

  • 作用:指定agent储存状态的数据目录

    • 这是所有agent都必须的
    • 对于server尤其重要,因为他们必须持久化集群的状态
  • -config-dir

  • 作用:指定service的配置文件和检查定义所在的位置

    • 通常会指定为”某一个路径/consul.d”(通常情况下,.d表示一系列配置文件存放的目录)
  • -config-file

  • 作用:指定一个要装载的配置文件

    • 该选项可以配置多次,进而配置多个配置文件(后边的会合并前边的,相同的值覆盖)
  • -dev

  • 作用:创建一个开发环境下的server节点

    • 该参数配置下,不会有任何持久化操作,即不会有任何数据写入到磁盘
    • 这种模式不能用于生产环境(因为第二条)
  • -bootstrap-expect

  • 作用:该命令通知consul server我们现在准备加入的server节点个数,该参数是为了延迟日志复制的启动直到我们指定数量的server节点成功的加入后启动。

  • -node

  • 作用:指定节点在集群中的名称

    • 该名称在集群中必须是唯一的(默认采用机器的host)
    • 推荐:直接采用机器的IP
  • -bind

  • 作用:指明节点的IP地址

    • 有时候不指定绑定IP,会报Failed to get advertise address: Multiple private IPs found. Please configure one.的异常
  • -server

  • 作用:指定节点为server

    • 每个数据中心(DC)的server数推荐至少为1,至多为5
    • 所有的server都采用raft一致性算法来确保事务的一致性和线性化,事务修改了集群的状态,且集群的状态保存在每一台server上保证可用性
    • server也是与其他DC交互的门面(gateway)
  • -client

  • 作用:指定节点为client,指定客户端接口的绑定地址,包括:HTTP、DNS、RPC

    • 默认是127.0.0.1,只允许回环接口访问
    • 若不指定为-server,其实就是-client
  • -join

  • 作用:将节点加入到集群

  • -datacenter(老版本叫-dc,-dc已经失效)

  • 作用:指定机器加入到哪一个数据中心中

示例1:命令参数方式执行

1consul agent -data-dir /tmp/node2 -node=node2 -bind=192.168.11.145 -datacenter=dc1 -ui -client=192.168.11.145 2

示例2:配置文件方式执行

准备一个配置文件,名称任意,例如consul.json,内容如下:

1{ 2 "datacenter": "us-east-1", 3 "data_dir": "/Users/zhouli/develop/software/consul-data/", 4 "addresses": { 5 "https": "0.0.0.0" 6 }, 7 "ports": { 8 "http": 8500 9 }, 10 "acl" : { 11 "enabled": true, 12 "default_policy": "deny", 13 "down_policy": "extend-cache", 14 "tokens" : { 15 "master" : "b1gs33cr3t" 16 } 17 } 18} 19

启动时,让consul读取配置文件:

1consul agent -dev -config-file="consul-config/consul.json" 2

参考文档

consul agent 有20来个选项,本文只列出了常用选项,其他选项未作展开,详见: https://www.consul.io/docs/agent/options.html

Consul集群搭建

a77e4f4265fbbc8c5ebae0ae8b19fe42.png

主机规划

准备三台CentOS 7的虚拟机,主机规划如下:

3b12347f5f12ed9b17f44dbd2aade080.png

搭建步骤

  • 启动node0机器上的Consul(node0机器上执行):

1consul agent -data-dir /tmp/node0 -node=node0 -bind=192.168.11.143 -datacenter=dc1 -ui -client=192.168.11.143 -server -bootstrap-expect 1 2
  • 启动node1机器上的Consul(node1机器上执行):

1consul agent -data-dir /tmp/node1 -node=node1 -bind=192.168.11.144 -datacenter=dc1 -ui 2
  • 启动node2机器上的Consul(node2机器上执行):

1consul agent -data-dir /tmp/node2 -node=node2 -bind=192.168.11.145 -datacenter=dc1 -ui -client=192.168.11.145 2
  • 将node1节点加入到node0上(node1机器上执行):

1consul join 192.168.11.143 2
  • 将node2节点加入到node0上(node2机器上执行):

1consul join -rpc-addr=192.168.11.145:8400 192.168.11.143 2
  • 这样一个简单的Consul集群就搭建完成了,在node1上查看当前集群节点:

1consul members -rpc-addr=192.168.11.143:8400 2

结果如下:

1Node Address Status Type Build Protocol DC 2node0 192.168.11.143:8301 alive server 0.7.0 2 dc1 3node1 192.168.11.144:8301 alive client 0.7.0 2 dc1 4node2 192.168.11.145:8301 alive client 0.7.0 2 dc1 5

说明集群已经搭建成功了。

我们分析一下,为什么第5步和第6步需要加-rpc-addr 选项,而第4步不需要加任何选项呢?原因是-client 指定了客户端接口的绑定地址,包括:HTTP、DNS、RPC,而consul join 、consul members 都是通过RPC与Consul交互的。

访问测试

如上,我们三个节点都加了-ui 参数启动了内建的界面。我们可以通过:http://192.168.11.143:8500/ui/ 或者 http://192.168.11.145:8500/ui/ 进行访问,也可以在node1机器上通过 http://127.0.0.1:8500/ui/ 进行访问,原因是node1没有开启远程访问 ,三种访问方式结果一致。

必看文章

  • 使用Consul做服务发现的若干姿势

本文首发

安装Consul集群​www.itmuch.com

代码交流 2021