在上一篇中讲解了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进行访问

微服务Consul系列之集群搭建的更多相关文章

  1. 微服务架构:Eureka集群搭建

    版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! 服务注册.发现是微服务架构的关键原理之一,由于微服务架构是由一系列职责单一的细粒度服务构成的网状结构,服务之间通过轻量机制进行通信,这就必 ...

  2. 微服务Consul系列之服务注册与服务发现

    在进行服务注册之前先确认集群是否建立,关于服务注册可以看上篇微服务Consul系列之集群搭建的介绍,两种注册方式:一种是注册HTTP API.另一种是通过配置文件定义,下面讲解的是基于后者配置文件定义 ...

  3. (转)淘淘商城系列——Solr集群搭建

    http://blog.csdn.net/yerenyuan_pku/article/details/72957201 我们之前做的搜索使用的是Solr的单机版来实现的,正是由于我们现在商品数据量不多 ...

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

    使用Consul解决了哪些问题 是否在为不同环境来维护不同项目配置而发愁 是否有因为配置的更改导致代码还要进行修改.发布因为客流量大了还要规避开高峰期等到半夜来发布 微服务架构下应用的分解业务系统与服 ...

  5. java架构之路-(微服务专题)nacos集群精讲实战

    上次回顾: 上次博客,我们主要说了微服务的发展历程和nacos集群单机的搭建,单机需要-m standalone启动,集群建议使用nginx做一下反向代理,自行保证mysql和ngxin的高可用. 本 ...

  6. 使用 Loki 微服务模式部署生产集群

    转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247500523&idx=1&sn=0994af2b50 ...

  7. 微服务:Eureka配置集群环境

    一.注册中心编码 1.使用idea创建一个spring boot项目,pom如下: <?xml version="1.0" encoding="UTF-8" ...

  8. Hadoop框架:单服务下伪分布式集群搭建

    本文源码:GitHub·点这里 || GitEE·点这里 一.基础环境 1.环境版本 环境:centos7 hadoop版本:2.7.2 jdk版本:1.8 2.Hadoop目录结构 bin目录:存放 ...

  9. 微服务 consul使用

    前言 常见的注册中心有zookeeper .eureka.consul.etcd.从生态发展.便利性.语言无关性等角度来综合考量,选择consul,多数据中心支持,支持k-v能力,可扩展为配置中心.g ...

随机推荐

  1. win32线程栈溢出问题 (二)

    3.2.函数递归调用引发的栈溢出 写一段最简单的无穷递归代码,如下: #include "stdafx.h" void f(void) { f(); } int _tmain(in ...

  2. AtCoder Grand Contest 004题解

    传送门 \(A\) 咕咕 int a,b,c; int main(){ scanf("%d%d%d",&a,&b,&c); if((a&1^1)|( ...

  3. (13)打鸡儿教你Vue.js

    一小时复习 vue.js是一个JavaScriptmvvm库,是以数据驱动和组件化的思想构建的,相比angular.js,vue.js提供了更加简洁,更加容易理解的api,如果习惯了jquery操作d ...

  4. getchar与putchar缓冲区以及字符串数组、指针

    getchar与putchar缓冲区 有下面的语句段: while ((s = getchar()) != '\n'){ putchar(s); putchar("\n"); } ...

  5. 三层交换+DHCP实验详解

  6. 三层设备-SHRP详解

    步骤:3-sw1enconf tvlan databasevtp domain s2t117vtp servervlan 10vlan 20vlan 30vlan 40exitint r f0/7 - ...

  7. linux10.日志服务器建立和克隆机的网卡问题

    日志服务器建立       克隆虚拟机网卡混乱问题处理           vim /etc/udev/rules.d/70-perisistent-net.rules 调整mac地址与设备的对应关系 ...

  8. 部署gerrit环境完整记录【转】

    开发同事提议在线上部署一套gerrit代码审核环境,废话不多说,部署gerrit的操作记录如下:提前安装好java环境,mysql环境,nginx环境测试系统:centos6.5下载下面三个包,放到/ ...

  9. C语言中size_t类型详细说明【转载】

    来看看网上的一些说法: C语言 size_t到底是个什么东东? 大神求解 . 简单理解为 unsigned int就可以了 . 这是在不同的机器里面的的头文件定义的相应宏定义,实际上是unsigned ...

  10. Apache-dbutils 简介及事务处理

    一:commons-dbutils简介 commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化 ...