专栏首页Nodejs技术栈微服务Consul系列之集群搭建

微服务Consul系列之集群搭建

在上一篇中讲解了Consul的安装、部署、基本的使用,使得大家有一个基本的了解,本节开始重点Consul集群搭建,官方推荐3~5台Server,因为在异常处理中,如果出现Leader挂了,只要有超过一半的Server还处于活跃状态,consul就会重新选举新的Leader,保证集群可以正常工作。

准备工作

测试用建议本地搭建几台虚拟机用于调试,这里的虚拟机分别为3台Server模式,1台Client模式,共以下4台:

  • 192.168.6.128 Server模式(初始设置为Leader)
  • 192.168.6.129 Server模式
  • 192.168.6.130 Server模式
  • 192.168.6.131 Client模式

下载相应平台版本的Consul解压copy至/usr/local/bin/(系统的环境变量)目录,这里以1.4.0版本为例,具体安装参照上篇-consul下载安装指南。

创建 /usr/src/consul目录,存放Consul的启动配置文件consul_config.json

{
    "datacenter": "consul_cluster",
    "node_name": "consul_1",
    "server": true,
    "bootstrap_expect": 3,
    "data_dir": "/usr/src/consul/data",
    "log_level": "DEBUG",
    "enable_syslog": true,
    "enable_script_checks": true,
    "bind_addr": "192.168.6.128",
    "client_addr": "192.168.6.128",
}
  • node_name:节点名称,等同于-node
  • data_dir:数据存放目录
  • enable_syslog:consul日志写入系统的syslog目录是否启用
  • enable_script_checks:是否启用监控检测脚本
  • bind_addr:等同于-bind
  • client_addr:等同于-client

Server端部署

  • 部署第一台192.168.6.128

注意:在第一台启动的时候加上-ui,只初始化一次,在其它2个节点进行相同操作,但是配置文件中的node_namebind_addrclient_addr要进行更改,每台机器保持唯一。

$ sudo consul agent -ui -config-file=/usr/src/consul/consul_config.json

-config-file:加载启动的配置文件

  • 部署第二台192.168.6.129

修改/usr/src/consul/consul_config.json

{
    "datacenter": "consul_cluster",
    "node_name": "consul_2",
    "server": true,
    "bootstrap_expect": 3,
    "data_dir": "/usr/src/consul/data",
    "log_level": "DEBUG",
    "enable_syslog": true,
    "enable_script_checks": true,
    "bind_addr": "192.168.6.129",
    "client_addr": "192.168.6.129",
}

执行命令启动命令

$ sudo consul agent -config-file=/usr/src/consul/consul_config.json
  • 部署第三台192.168.6.130

修改/usr/src/consul/consul_config.json

{
    "datacenter": "consul_cluster",
    "node_name": "consul_3",
    "server": true,
    "bootstrap_expect": 3,
    "data_dir": "/usr/src/consul/data",
    "log_level": "DEBUG",
    "enable_syslog": true,
    "enable_script_checks": true,
    "bind_addr": "192.168.6.130",
    "client_addr": "192.168.6.130"
}

执行命令启动命令

$ sudo consul agent -config-file=/usr/src/consul/consul_config.json

截止目前服务端已经全部启动,但是还没有加入集群,因此还只是单节点的集群,可以在某台机器上查看成员情况:

注意:直接使用consul members会报错,需要绑定ip地址

$ consul members --http-addr 192.168.6.128:8500
Node      Address             Status  Type    Build  Protocol  DC              Segment
consul_1  192.168.6.128:8301  alive   server  1.4.0  2         consul_cluster  <all>

Server端集群建立

每个Consul Agent之后,都是相对独立的并不知道其它节点的存在,现在我们要做的是加入集群,将上面创建的consul_2、consul_3加入到同一个集群consul_1中。

  • 第二台192.168.6.129加入到consul_1中
$ consul join --http-addr 192.168.6.129:8500 192.168.6.128
Successfully joined cluster by contacting 1 nodes. # 成功返回的消息
  • 第三台192.168.6.130加入到consul_1中
$ consul join --http-addr 192.168.6.130:8500 192.168.6.128

目前服务端的集群已经创建完毕,可以看下我们目前的集群成员情况:

consul members --http-addr 192.168.6.128:8500
Node      Address             Status  Type    Build  Protocol  DC              Segment
consul_1  192.168.6.128:8301  alive   server  1.4.0  2         consul_cluster  <all>
consul_2  192.168.6.129:8301  alive   server  1.4.0  2         consul_cluster  <all>
consul_3  192.168.6.130:8301  alive   server  1.4.0  2         consul_cluster  <all>
  • 通过HTTP API的方式查看集群leader
$ curl 192.168.6.128:8500/v1/status/leader

"192.168.6.128:8300"
  • 通过HTTP API的方式查看集群成员
$ curl 192.168.6.128:8500/v1/status/peers 

["192.168.6.129:8300","192.168.6.130:8300","192.168.6.128:8300"]

Client端部署

现在开始客户端的部署,方式同服务端有不同

修改/usr/src/consul/consul_config.json

{
    "datacenter": "consul_cluster",
    "node_name": "consul_4",
    //"server": true, 不指定为服务端,默认走客户端
    // "bootstrap_expect": 3, 只在server模式有效
    "data_dir": "/usr/src/consul/data",
    "log_level": "DEBUG",
    "enable_syslog": true,
    "enable_script_checks": true,
    "bind_addr": "192.168.6.131",
    "client_addr": "192.168.6.131"
}

执行启动命令:

通过-join参数也可以加入一个已经启动的集群

$ sudo consul agent -config-file=/usr/src/consul/consul_config.json -join=192.168.6.128

在查看当前集群成员,可以看到为3个Server模式和1个Client模式

$ consul members --http-addr 192.168.6.128:8500
Node      Address             Status  Type    Build  Protocol  DC              Segment
consul_1  192.168.6.128:8301  alive   server  1.4.0  2         consul_cluster  <all>
consul_2  192.168.6.129:8301  alive   server  1.4.0  2         consul_cluster  <all>
consul_3  192.168.6.130:8301  alive   server  1.4.0  2         consul_cluster  <all>
consul_4  192.168.6.131:8301  alive   client  1.4.0  2         consul_cluster  <default>

管理工具中查看

在部署第一台192.168.6.128机器的时候,consul agent之后有跟一个-ui参数,这个是用于启动WebUI界面,这个是Consul本身所提供的Web可视化界面,浏览器输入http://192.168.6.128:8500进行访问

作者:五月君
链接:https://www.imooc.com/article/284028
来源:首发于慕课网
博客:《Node.js技术栈》https://github.com/Q-Angelo/Nodejs-Roadmap

本文分享自微信公众号 - Nodejs技术栈(NodejsDeveloper),作者:五月君

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-04-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 微服务Consul系列之服务部署、搭建、使用

    以上只是列举的笔者曾经遇到的几点问题,当然问题还不止于这些,下面介绍的Consul可以有效解决这些问题,当然还有一些其它的优点,让我们一起期待下文的Consul...

    五月君
  • JavaScript 浮点数之迷:0.1 + 0.2 为什么不等于 0.3?

    “0.1 + 0.2 = ?” 这个问题,你要是问小学生,他也许会立马告诉你 0.3。但是在计算机的世界里就没有这么简单了,做为一名程序开发者在你面试时如果有人...

    五月君
  • 一次 RabbitMQ 生产故障引发的服务重连限流思考

    原由是生产环境 RabbitMQ 消息中间件因为某些原因出现了故障导致当时一些相关的服务短时间不可用,后来 RabbitMQ 修复之后,按理来说服务是要正常恢复...

    五月君
  • Kubernetes中Consul重启自动加入集群实践

    近期频繁的容器母机调整导致我们的业务需要多次重启,不得不寻找一种自动重建Consul集群的方式。在网上搜索和学习一番后发现,基本没有针对Kubernetes容器...

    sherlock99
  • consul基础运维-备份还原导入导出

    工作中要保证生产环境部署的consul的集群能够安全稳定地对外提供服务,即使出现系统故障也能快速恢复,这里将讲述部分的备份还原操作及KV的导入导出操作。

    jeremyxu
  • consul怎么在windows下安装

    1.去官网下载:https://www.consul.io/downloads.html 2.解压:

    ydymz
  • spring cloud: 使用consul来替换eureka

    eureka官方已经正式宣布:自2.0起不再维护该项目,并在github 项目wiki上放出了一段吓唬人的话:

    菩提树下的杨过
  • 安装Consul集群

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

    用户1516716
  • consul服务中心

    2.1. 添加 maven 依赖 2.2. springboot 配置 application.yml 注册服务

    suveng
  • 研究consul的service mesh功能

    来源:https://jeremy-xu.oschina.io/2018/07/%E7%A0%94%E7%A9%B6consul%E7%9A%84service...

    程序猿DD

扫码关注云+社区

领取腾讯云代金券