继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

安装Consul集群

大目
关注TA
已关注
手记 133
粉丝 6640
获赞 1784

TIPS

知识预热

Consul常用命令

命令 解释 示例
agent 运行一个consul agent consul agent -dev
join 将agent加入到consul集群 consul join IP
members 列出consul cluster集群中的members consul members
leave 将节点移除所在集群 consul leave

参考文档

这里只列出几个常用的命令,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:命令参数方式执行

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

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

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

{
    "datacenter": "us-east-1",
    "data_dir": "/Users/zhouli/develop/software/consul-data/",
    "addresses": {
        "https": "0.0.0.0"
    },
    "ports": {
        "http": 8500
    },
    "acl" : {
        "enabled": true,
        "default_policy": "deny",
        "down_policy": "extend-cache",
        "tokens" : {
          "master" : "b1gs33cr3t"
        }
      }
}

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

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

参考文档

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

Consul集群搭建

Consul架构图

主机规划

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

主机名称 IP 作用 是否允许远程访问
node0 192.168.11.143 consul server
node1 192.168.11.144 consul client
node2 192.168.11.145 consul client

搭建步骤

  • 启动node0机器上的Consul(node0机器上执行):
consul agent -data-dir /tmp/node0 -node=node0 -bind=192.168.11.143 -datacenter=dc1 -ui -client=192.168.11.143 -server -bootstrap-expect 1
  • 启动node1机器上的Consul(node1机器上执行):
consul agent -data-dir /tmp/node1 -node=node1 -bind=192.168.11.144 -datacenter=dc1 -ui
  • 启动node2机器上的Consul(node2机器上执行):
consul agent -data-dir /tmp/node2 -node=node2 -bind=192.168.11.145 -datacenter=dc1 -ui -client=192.168.11.145
  • 将node1节点加入到node0上(node1机器上执行):
consul join 192.168.11.143
  • 将node2节点加入到node0上(node2机器上执行):
consul join -rpc-addr=192.168.11.145:8400  192.168.11.143
  • 这样一个简单的Consul集群就搭建完成了,在node1上查看当前集群节点:
consul members -rpc-addr=192.168.11.143:8400

结果如下:

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

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

我们分析一下,为什么第5步和第6步需要加-rpc-addr 选项,而第4步不需要加任何选项呢?原因是-client 指定了客户端接口的绑定地址,包括:HTTP、DNS、RPC,而consul joinconsul 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没有开启远程访问 ,三种访问方式结果一致。

必看文章

本文首发

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP

热门评论

大目老师, 如果我想持久化key value. 那该如何操作

查看全部评论