Linux环境下部署Consul集群

目录
  • 1.Consul概念
    • 1.1什么是Consul?
    • 1.2Consul的特点
    • 1.3Consul架构
    • 1.4Consul的应用场景包括服务发现、服务隔离与服务配置
  • 2.Consul在linux上的集群部署
    • 2.1前期准备
    • 2.2集群部署

1.Consul概念

1.1什么是Consul?

Consul是一种服务网格解决方案,是HashiCorp公司推出的开源组件,由Go语言开发,部署起来很容易,只需要极少的可执行程序和配置。同时Consul也是一个分布式的,高度可用的系统,它附带了一个简单的内置代理,开箱即用,也支持Envoy等第三方代理集成,它还提供了具有服务发现,配置和分段功能。

1.2Consul的特点

  • 服务发现(Service Discovery):Consul提供了通过DNS或者HTTP接口的方式来注册服务和发现服务。一些应用程序通过Consul很容易的找到它所依赖的服务。
  • 健康检查(Health Checking):Consul的Client可以提供任何数量的健康检查,这些健康检查与应用服务(“ Web服务器是否返回200 OK”)或本地节点(“内存利用率低于90%”)相关联。操作员可以使用此信息来监视集群的健康状况,通过服务发现组件监控,避免流量路由到健康状况不佳的应用主机中。
  • Key/Value存储(Key/Value Store):应用程序可以根据自己的需求使用Consul提供的Key/Value存储。Consul提供了简单易用的HTTP接口,结合其他工具可以实现动态配置(dynamic configuration)、功能标记(feature flagging)、协调(coordination)、领袖选举( leader election)等等功能。
  • 安全的服务通信(Secure Service Communication):Consul可以为服务生成和分发TLS证书,以建立相互的TLS连接。意图可用于定义允许哪些服务通信。服务分割可以很容易地进行管理,其目的是可以实时更改的,而不是使用复杂的网络拓扑和静态防火墙规则。
  • 多数据中心(Multi Datacenter):Consul支持开箱即用的多数据中心。这意味着用户不需要担心需要建立额外的抽象层让业务扩展到多个区域。

1.3Consul架构

根据这幅图可以看到有两个数据中心,分别为DataCenter1和DataCenter2。Consul拥有对多个数据中心的一流支持,这是比较常见的情况。

在每个数据中心中,我们都有客户端和服务器。最好是有三到五台服务器,这对于在故障情况下的可用性和性能之间取得了平衡,因为随着添加更多的机器,一致性会逐渐变慢。但是,客户端的数量没有限制,可以很容易地扩展到数千或数万。

Consul实现多个数据中心都依赖于gossip protocol协议。这样做有几个目的:首先,不需要使用服务器的地址来配置客户端;服务发现是自动完成的。其次,健康检查故障的工作不是放在服务器上,而是分布式的。这使得故障检测比单纯的心跳模式更具可伸缩性。为节点提供故障检测;如果无法访问代理,则节点可能经历了故障。

每个数据中心中的服务器都是一个Raft对等集的一部分。这意味着它们一起工作来选举单个leader,一个被选中的服务器有额外的职责。领导负责处理所有的查询和事务。事务还必须作为协商一致协议的一部分复制到所有对等方。由于这个需求,当非leader服务器接收到RPC请求时,它会将其转发给集群leader。

1.4Consul的应用场景包括服务发现、服务隔离与服务配置

  • 服务发现场景中consul作为注册中心,服务地址被注册到consul中以后,可以使用consul提供的dns、http接口查询,consul支持health check。
  • 服务隔离场景中consul支持以服务为单位设置访问策略,能同时支持经典的平台和新兴的平台,支持tls证书分发,service-to-service加密。
  • 服务配置场景中consul提供key-value数据存储功能,并且能将变动迅速地通知出去,借助Consul可以实现配置共享,需要读取配置的服务可以从Consul中读取到准确的配置信息。
  • Consul可以帮助系统管理者更清晰的了解复杂系统内部的系统架构,运维人员可以将Consul看成一种监控软件,也可以看成一种资产(资源)管理系统。

2.Consul在linux上的集群部署

在consul官网(https://www.consul.io/downloads)上下载linux系统组件的最新版本,示例版本是1.8.5:

2.1前期准备

在虚拟机上准备三台CentOS:

CentOS 7-No.1:192.168.113.128
CentOS 7-No.2:192.168.113.129
CentOS 7-No.3:192.168.113.130

通过Xftp(或者其他工具)把解压好的consul组件分别上传到三台linux服务器里面,组件安装目录随自己喜好,我是放在/root目录里面的:

2.2集群部署

通过Xshell(或者其他工具)输入命令安装集群,先在三台服务器上切换到安装目录:

cd /root/consul_1.8.5_linux_amd64

然后分别在三台服务器上输入如下命令启动对应的Consul组件:

192.168.113.128:./consul agent -server -bootstrap-expect=3 -data-dir=/root/consul_1.8.5_linux_amd64 -node=server1 -bind=192.168.113.128 -client=0.0.0.0 -datacenter=myservicedc1 -ui
192.168.113.129:./consul agent -server -bootstrap-expect=3 -data-dir=/root/consul_1.8.5_linux_amd64 -node=server2 -bind=192.168.113.129 -client=0.0.0.0 -datacenter myservicedc1
192.168.113.130:./consul agent -server -bootstrap-expect=3 -data-dir=/root/consul_1.8.5_linux_amd64 -node=server3 -bind=192.168.113.130 -client=0.0.0.0 -datacenter myservicedc1

如果报执行权限不够(Permission denied),执行如下命令授予执行权限:

//授予执行权限
chmod +x consul

代理配置参数如下,想要了解更加详细配置参数也可以到官网文档(https://www.consul.io/docs/agent/options)查询:

  • -server:此标志用于控制代理是处于服务器还是客户端模式。提供后,代理将充当Consul服务器。
  • -bootstrap-expect:集群要求的最少server数量,当低于这个数量,集群即失效。
  • -data-dir:data存储目录路径。
  • -node:节点id,集群中的每个node必须有一个唯一的名称。默认情况下,Consul使用机器的hostname。
  • -bind:监听的ip地址。默认绑定0.0.0.0,可以不指定。表示Consul监听的地址,而且它必须能够被集群中的其他节点访问。Consul默认会监听第一个Private IP,但最好还是提供一个。生产设备上的服务器通常有好几个网卡,所以指定一个不会出错。
  • -client:客户端的ip地址,0.0.0.0是指谁都可以访问(不加这个,下面的ui :8500无法访问)。
  • -ui:可以访问Consul UI管理界面。
  • -config-dir:指定配置文件夹,Consul会加载其中的所有文件。
  • -datacenter:指定数据中心名称,默认是dc1。

启动Consul集群组件后,会看到如下信息(No cluster leader):

这是因为集群没有指定一个leader,所以需要在128、129跟130服务器上之间指定一个为leader。因为这里我指定了128服务器为leader,所以需要在129、130服务器上输入如下命令加入以128为leader的Consul集群:

./consul join 192.168.113.128

输入命令后会看到如下信息:

这样说明129、130服务器的Consul组件加入集群成功!以下再列举下如何查看集群成员跟状况的命令:

  • 查看集群成员
./consul members
  • 查看集群状况
./consul operator raft list-peers

在浏览器上输入leader的Consul地址访问:

通过上述示例图片可以看到,Consul集群部署成功!

到此这篇关于Linux环境下部署Consul集群的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • .Net Core微服务网关Ocelot集成Consul

    有consul基础的都知道,consul可以发现新增的服务,剔除掉无效的服务,赋予应用自动伸缩的能力.而ocelot如果集成了consul,那ocelot也能拥有这些能力,还可以自主选择负载均衡策略,灵活性更强. (建议看完前一篇文章再来实践这一篇,不然可能有难度) 上干货. 首先打开上一篇新建好的项目,继续添加nuget包: 然后注册相关服务: public void ConfigureServices(IServiceCollection services) { services.AddOc

  • Docker Consul概述以及集群环境搭建步骤(图文详解)

    目录 一.Docker consul概述 二.基于 nginx 与 consul 构建自动发现即高可用的 Docker 服务架构 一.Docker consul概述 容器服务更新与发现:先发现再更新,发现的是后端节点上容器的变化(registrator),更新的是nginx配置文件(agent) registrator:是consul安插在docker容器里的眼线,用于监听监控节点上容器的变化(增加或减少,或者宕机),一旦有变化会把这些信息告诉并注册在consul server端(使用回调和协程

  • .Net Core服务治理Consul自动扩展和服务调用

    今天有写文章的时间了,开心.延续上一篇的话题继续,顺便放上一篇的传送门:点这里. 服务调用 既然服务注册已经搞完了,那么现在就开始调用这些注册好的服务.先做一下准备动作,把consul容器跑起来: 打开控制台确认正常: 然后多跑几个应用程序模拟多点部署: 程序跑完以后检察一下服务列表: 戳进去看看: 一切准备就绪,完美.然后进入编码环节.老规矩,直接上码: public static string Convert(string consulUri, string centerName, stri

  • Consul的搭建和.Net5的注册和获取方法(Win10简单版)

    Consul 是一个用来实现分布式系统服务发现与配置的开源工具.它内置了服务注册与发现框架.分布一致性协议实现.健康检查.Key/Value存储.多数据中心方案,也可以作为配置中心. Consul的下载就不说了,解压包后吧安装路劲放到系统环境变量Path里面去,consul的启动命令. consul agent -dev 验证启动成功网址:localhost:8500 启动后就要给consul注册了 全局仅一次的注册放在StartUp里,怎么封装先不说,具体实现是这样的 //找到Consul C

  • .Net Core服务治理Consul搭建集群

    延续上一篇的话题继续,顺便放上一篇的传送门:点这里. 集群的必要性 consul本身就是管理集群的,现在还需要给consul搞个集群,这是为啥?因为consul单点也容易挂啊!万一管理集群的consul挂掉了,那么相当于上下游应用都变成了瞎子,看不到也调不到.所以集群的必要性不用我说了吧? Server & Client 生产环境下,可以选择上面两种模式,下面我就简称S端.C端.说说它俩有啥不一样: S端: 1.数量不宜过多,一般推荐3.5个,要求是奇数. 2.持久化保存节点数据. 3.多个S端

  • .Net Core服务治理Consul健康检查

    继续上一篇的话题,顺便放上一篇的传送门:点这里. 健康检查 经过之前的操作,我的consul已经支持自动扩展,并且调用也很靠谱.但是这里有个问题,一旦服务列表里的某个服务挂了,consul并不知道,还是会把实际无效的地址返回给我,就算重启consul容器也无法刷新到最新的状态.所以,咱们要监控服务可用性,主动区分出不可用服务,这种手段,就称之为健康检查. 进入编码环节.老规矩,还是进入到之前我封装好的注册方法,在注册时增加健康检查的内容: client.Agent.ServiceRegister

  • Docker容器部署consul的详细步骤

    目录 Consul简介 Consul 使用场景 -consul部署- 容器服务自动加入consul集群 安装Gliderlabs/Registrator Gliderlabs/Registrator 测试服务发现功能是否正常 安装consul-template 安装nginx 配置并启动template Consul简介 Consul 是一个支持多数据中心分布式高可用的 服务发现 和 配置共享 的服务软件,由 HashiCorp 公司用 Go 语言开发, 基于 Mozilla Public Li

  • .Net Core服务治理Consul使用服务发现

    先思考一些问题:它是做什么的.以及怎么使用它.带着这些问题往下走. consul是做什么的 consul用于微服务下的服务治理.服务治理是什么?它包含但不限于:服务发现.服务配置.健康检查.键值存储.安全服务通信.多数据中心等. 为什么需要服务治理?举个例子:最开始的服务比较简单,各服务之间通过API就能访问.后面业务复杂了,服务也跟着复杂了,搞分布式了,而分布式又必然是多服务器部署,这就有一个问题:如果服务之间还是用API访问,那某个服务所在的服务器挂掉以后这个服务就不能用了,也不能自动转移,

  • Linux环境下部署Consul集群

    目录 1.Consul概念 1.1什么是Consul? 1.2Consul的特点 1.3Consul架构 1.4Consul的应用场景包括服务发现.服务隔离与服务配置 2.Consul在linux上的集群部署 2.1前期准备 2.2集群部署 1.Consul概念 1.1什么是Consul? Consul是一种服务网格解决方案,是HashiCorp公司推出的开源组件,由Go语言开发,部署起来很容易,只需要极少的可执行程序和配置.同时Consul也是一个分布式的,高度可用的系统,它附带了一个简单的内

  • windows下搭建Consul集群

    Consul 是 HashiCorp 公司的一个用于实现分布式系统的服务发现与配置工具.Consul内置了服务注册与发现框 架.分布一致性协议实现.健康检查.Key/Value存储.多数据中心方案.由于出现得晚些,Consul具有功能完善.部署简单.使用方便等特点. 安装consul: Consul由Go语言开发,因此也继承了Go语言跨平台,易安装的特点.可以在其官网https://www.consul.io/downloads.html下载,各个平台的安装包都提供了.基本解压就可以使用. 这里

  • linux contos6.8下部署kafka集群的方法

    有3台服务器,ip分别为192.168.174.10,192.168.174.11,192.168.174.12. 1.官网下载,分别在每台机器上解压安装 # 创建kafka的安装目录 mkdir -p /usr/local/software/kafka # 解压 tar -xvf kafka_2.12-1.1.0.tgz -C /usr/local/software/kafka/ 2.修改每台服务器的/etc/profile文件,设置kafka环境变量,添加如下内容 export KAFKA_

  • Linux下Kafka分布式集群安装教程

    Kafka(http://kafka.apache.org/) 是由 LinkedIn 使用 Scala 编写的一个分布式消息系统,用作 LinkedIn 的活动流(Activity Stream)和运营数据处理管道(Pipeline)的基础,具有高水平扩展和高吞吐量.Spack.Elasticsearch 都支持与 Kafka 集成.下面看一下几种分布式开源消息队列系统的对比: Kafka 集群架构: 一般不建议直接使用 Kafka 自带的 Zookeeper 建立 zk 集群,这里我们使用独

  • LINUX中NGINX反向代理下的TOMCAT集群(详解)

    Nginx具有反向代理(注意和正向代理的区别)和负载均衡等特点. 这次Nginx安装在 192.168.1.108 这台linux 机器上.安装Nginx 先要装openssl库,gcc,PCRE,zlib库等. Tomcat 安装在192.168.1.168 和 192.168.1.178 这两台机器上.客户端通过访问192.168.1.108 反向代理访问到 192.168.1.168 和 192.168.1.178 里Tomcat 部署的工程内容. 1.Linux 下安装Nginx (机器

  • Linux下安装Hadoop集群详细步骤

    目录 1.在usr目录下创建Hadoop目录,将安装包导入目录中并解压文件 2.进入vim /etc/profile文件并编辑配置文件 3.使文件生效 4.进入Hadoop目录下 5.编辑配置文件 6.进入slaves添加主节点和从节点 7.将各个文件复制到其他虚拟机上 8.格式化hadoop (仅在主节点中进行操作) 9.回到Hadoop目录下(仅在主节点操作) 1.在usr目录下创建Hadoop目录,将安装包导入目录中并解压文件   2.进入vim /etc/profile文件并编辑配置文件

  • script_tool_for_linux.bash: Linux 环境下的 hosts 一键部署脚本

    Linux 环境下的 hosts 一键部署脚本,由 @lstoars 贡献; @fluviusmagnus 提供增强版本. 官方网站:https://github.com/racaljk/hosts/tree/master/hosts_tools #!/bin/sh # # script_tool_for_linux # # Use command: `sudo sh script_tool_for_linux.sh` or # `su -c 'sh script_tool_for_linux.

  • Mongodb在Linux环境下的部署

    Mongodb这个文档型非关系型数据库,可以说它是最像关系型的了,之前大叔主要讲如何使用mongodb,而没有说过如何去部署和安装它,而今天大叔有必要讲一下,如何在linux环境下去部署这个mongodb,下面请跟我来! 一 wget下面安装包 # wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-amazon-3.4.2.tgz 二 tar解压方案包 tar xzy tar xzf redis-3.2.8.tar.gz 三 添

  • linux环境下的Oracle部署教程

    一. 环境及相关软件 虚拟机:VMwore Workstation Linux系统:CentOSORACLE: ORACLE_112030_Linux-x86-64 Xmanger软件 二. 安装虚拟机及Linux系统 1. 安装虚拟机 2. 安装Centos 2.1 新建虚拟机 2.2 下一步,选择后续装操作系统 2.3 选择操作系统,选择linux,版本选择centos 64位 2.4 虚拟机命名及文件位置选择 2.6 选择硬盘大小,练习时可选择默认20G 2.7 下一步,即已完成准备创建虚

  • 使用docker compose搭建consul集群环境的例子

    consul基本概念 server模式和client模式 server模式和client模式是consul节点的类型:client不是指的用户客户端. server模式提供数据持久化功能. client模式不提供持久化功能,并且实际上他也不工作,只是把用户客户端的请求转发到server模式的节点.所以可以把client模式的节点想象成LB(load balance),只负责请求转发. 通常server模式的节点需要配置成多个例如3个,5个.而client模式节点个数没有限制. server模式启

随机推荐