搭建consul 集群

上图是官网提供的一个事例系统图,图中的Server是consul服务端高可用集群,Client是consul客户端。consul客户端不保存数据,客户端将接收到的请求转发给响应的Server端。Server之间通过局域网或广域网通信实现数据一致性。每个Server或Client都是一个consul agent。Consul集群间使用了GOSSIP协议通信和raft一致性算法。上面这张图涉及到了很多术语:

Agent——agent是一直运行在Consul集群中每个成员上的守护进程。通过运行 consul agent 来启动。agent可以运行在client或者server模式。指定节点作为client或者server是非常简单的,除非有其他agent实例。所有的agent都能运行DNS或者HTTP接口,并负责运行时检查和保持服务同步。
Client——一个Client是一个转发所有RPC到server的代理。这个client是相对无状态的。client唯一执行的后台活动是加入LAN gossip池。这有一个最低的资源开销并且仅消耗少量的网络带宽。
Server——一个server是一个有一组扩展功能的代理,这些功能包括参与Raft选举,维护集群状态,响应RPC查询,与其他数据中心交互WAN gossip和转发查询给leader或者远程数据中心。
DataCenter——虽然数据中心的定义是显而易见的,但是有一些细微的细节必须考虑。例如,在EC2中,多个可用区域被认为组成一个数据中心?我们定义数据中心为一个私有的,低延迟和高带宽的一个网络环境。这不包括访问公共网络,但是对于我们而言,同一个EC2中的多个可用区域可以被认为是一个数据中心的一部分。
Consensus——在我们的文档中,我们使用Consensus来表明就leader选举和事务的顺序达成一致。由于这些事务都被应用到有限状态机上,Consensus暗示复制状态机的一致性。
Gossip——Consul建立在Serf的基础之上,它提供了一个用于多播目的的完整的gossip协议。Serf提供成员关系,故障检测和事件广播。更多的信息在gossip文档中描述。这足以知道gossip使用基于UDP的随机的点到点通信。
LAN Gossip——它包含所有位于同一个局域网或者数据中心的所有节点。
WAN Gossip——它只包含Server。这些server主要分布在不同的数据中心并且通常通过因特网或者广域网通信。
RPC——远程过程调用。这是一个允许client请求server的请求/响应机制。
在每个数据中心,client和server是混合的。一般建议有3-5台server。这是基于有故障情况下的可用性和性能之间的权衡结果,因为越多的机器加入达成共识越慢。然而,并不限制client的数量,它们可以很容易的扩展到数千或者数万台。

同一个数据中心的所有节点都必须加入gossip协议。这意味着gossip协议包含一个给定数据中心的所有节点。这服务于几个目的:第一,不需要在client上配置server地址。发现都是自动完成的。第二,检测节点故障的工作不是放在server上,而是分布式的。这是的故障检测相比心跳机制有更高的可扩展性。第三:它用来作为一个消息层来通知事件,比如leader选举发生时。

每个数据中心的server都是Raft节点集合的一部分。这意味着它们一起工作并选出一个leader,一个有额外工作的server。leader负责处理所有的查询和事务。作为一致性协议的一部分,事务也必须被复制到所有其他的节点。因为这一要求,当一个非leader得server收到一个RPC请求时,它将请求转发给集群leader。

server节点也作为WAN gossip Pool的一部分。这个Pool不同于LAN Pool,因为它是为了优化互联网更高的延迟,并且它只包含其他Consul server节点。这个Pool的目的是为了允许数据中心能够以low-touch的方式发现彼此。这使得一个新的数据中心可以很容易的加入现存的WAN gossip。因为server都运行在这个pool中,它也支持跨数据中心请求。当一个server收到来自另一个数据中心的请求时,它随即转发给正确数据中想一个server。该server再转发给本地leader。

这使得数据中心之间只有一个很低的耦合,但是由于故障检测,连接缓存和复用,跨数据中心的请求都是相对快速和可靠的。

使用Consul也非常简单,基本可以做到开箱即用

这篇文章《使用C# 和Consul进行分布式系统协调 》是在单机上做的, 我们现在要大家一个3节点的集群,本文就是介绍如何搭建一个3节点的Consul集群:

1. 准备工作

a) 启动三台虚拟机

    s1:10.0.0.5

    s2:10..0.0.6

    s3:10..0.0.7

b) 每台机器上在 /usr/local 新建文件夹    

mkdir –p /usr/local/consul/data

c) 下载consul,并将其考入到/usr/local/consul中

 下载地址:https://www.consul.io/downloads.html

sudo wget https://releases.hashicorp.com/consul/0.7.2/consul_0.7.2_linux_amd64.zip

2. 启动server agent

a) 进入consul目录中

b) 执行命令:

sudo ./consul agent -server -bootstrap-expect 2 -data-dir=data -node=n1 -bind=10.0.0.5 -client=0.0.0.0 &

注:

  1. server: 以server身份启动。
  2. bootstrap-expect:集群要求的最少server数量,当低于这个数量,集群即失效。
  3. data-dir:data存放的目录,更多信息请参阅consul数据同步机制
  4. node:节点id,在同一集群不能重复。
  5. bind:监听的ip地址。
  6. client 客户端的ip地址
  7. & :在后台运行,此为linux脚本语法
  8. 更多参数及配置说明见consul官方说明文档https://www.consul.io/docs/agent/options.html

c) 修改node和bind信息,分别在另外两台机器中执行 上面命令。

sudo ./consul agent -server -bootstrap-expect 2 -data-dir=data -node=n2 -bind=10.0.0.6 -client=0.0.0.0 &

sudo ./consul agent -server -bootstrap-expect 2 -data-dir=data -node=n3 -bind=10.0.0.5 -client=0.0.0.0 &

d) 在s2、s3中分别执行:

./consul join 10.0.0.7

到这里整个consul server 集群就算完成了,可以利用consul members查看集群中包含的node信息。使用consul info命令可以查看当前节点状态,包括是否在集群中,是否为leader(主)。

3. 搭建管理工具

consul自带的WEB UI,Web ui是consul提供的可视化的服务web界面,可以对key/value和服务、节点进行操作

a) 下载consul web ui(包含一个html和一个static文件件),和本机中的consul放到同级目录。

b) 在本机启动consul,需要设置-ui-dir ./webui

sudo ./consul agent -server -bootstrap-expect 2 -data-dir=data -node=n3 -bind=10.0.0.7 -ui-dir=webui -client 0.0.0.0 &
打开浏览器访问8500 端口:

本文来自合作伙伴“doNET跨平台”,了解相关信息可以关注“opendotnet”微信公众号

时间: 2024-08-02 23:07:19

搭建consul 集群的相关文章

zookeeper(三)--- 搭建zookeeper集群

  zookeeper(三)--- 搭建zookeeper集群          环境         vagrant虚拟机         centos7         SecureCRT      软件         zookeeper3.4.6.tar.gz        步骤         1.使用vagrant创建3个虚拟机         IP地址:192.168.21.222,192.168.21.223,192.168.22.224         2.使用SecureCR

搭建cdn集群关于swift和web服务器的几点疑问

问题描述 采用LVS(转发)+tengine(代理)+swift(存储端)+nginx(web服务器)搭建cdn集群,有几点想不明白:1.采用tengine做代理端,用户请求访问一个带视频的网页,该请求是先发给nginx(web服务器)还是先发给swift(存储端)?我的理解是先发给web服务器,因为感觉swift存储端好像只有上传和下载的功能2.如果第一个问题是先发给nginx,那么swift里面的视频,是怎么从源站缓存进去的?以及swift节点里面的视频是怎么样返回给用户的?3.如果我想测试

Linux上搭建mysql集群,window进行远程

问题描述 Linux上搭建mysql集群,window进行远程 我想在window上远程Linux的mysql,Linux上的mysql是分布式mysql集群. 希望有经验的大牛能个指引.Linux上的mysql集群如何搭建?搭建完成后,window怎么远程? 解决方案 window下的mysql集群搭建Linux下MySQL/MariaDB Galera集群搭建过程

amoeba搭建mysql集群时数据更新时出现这个错误

问题描述 amoeba搭建mysql集群时数据更新时出现这个错误 Fatal error: Uncaught exception 'Zend_Db_Table_Row_Exception' with message 'Cannot refresh row as parent is missing' in lib/Zend/Db/Table/Row/Abstract.php(2) : eval()'d code(1) : eval()'d code(1) : eval()'d code:319 解

activemq使用kahadb持久化搭建分布式集群后发下消息处理速度明显不如单台机器的性能,为什么会下降呢

问题描述 activemq使用kahadb持久化搭建分布式集群后发下消息处理速度明显不如单台机器的性能,为什么会下降呢 最近在linux下测试ActiveMQ5.11 ,使用两台电脑进行分布式布控,测试处理消息性能时,发现对消息的处理速度远不如一台机器工作处理速度,搭建分布式集群后哪里会影响其速度吗? 解决方案 先做性能瓶颈分析,比如网络I/O. CPU, 内存等都有可能是瓶颈.需要先找到瓶颈的地方

Linux服务器下搭建hadoop集群环境 redhat5/Ubuntu 12.04

Ubuntu 12.04 下搭建 hadoop 集群环境步骤 一. 搭建环境前的准备: 我的本机Ubuntu 12.04 32bit作为maser,就是上篇hadoop单机版环境搭建时用的那台机子,http://www.linuxidc.com/Linux/2013-01/78112.htm 还在KVM中虚拟了4台机子,分别起名为: son-1        (ubuntu 12.04 32bit),son-2        (ubuntu 12.04 32bit),son-3        (

Linux下搭建tomcat集群全记录(转)

本文将讲述如何在Linux下搭建tomcat集群,以及搭建过程中可能的遇到的问题和解决方法.为简单起见,本文演示搭建的集群只有两个tomact节点外加一个apache组成,三者将安装在同一机器上:apache: 安装路径:/usr/local/apache2端口:90tomcat1:安装路径:/usr/local/apache-tomcat-6.0.33-1端口:6080tomcat2:安装路径:/usr/local/apache-tomcat-6.0.33-2端口:7080 2.所需要软件列表

activemq 集群-activemq使用kahadb持久化搭建分布式集群后发下消息处理速度明显不如一台机器的性能

问题描述 activemq使用kahadb持久化搭建分布式集群后发下消息处理速度明显不如一台机器的性能 最近在linux下测试ActiveMQ5.11 ,使用两台电脑进行分布式布控,测试处理消息性能时,发现对消息的处理速度远不如一台机器工作处理速度,搭建分布式集群后哪里会影响其速度吗? 解决方案 有谁使用过的?教教怎么配置会提高些消息处理速度 解决方案二: MySQL Master Slave 数据同步,集群mysql master slave projectActiveMq master/sl

windows7下搭建hadoop集群环境

问题描述 有人会在win7下搭建hadoop集群环境吗?我急需要搭建,有会的帮帮忙吧,我整了两天了没弄出来,着急死了!cygwin安装完运行sshlocalhost出现这种错误,是怎么回事啊? 解决方案 解决方案二:我是真心不会,帮顶吧,有份资料可以参考下,去搜"王家林hadoop".解决方案三:楼上的问题解决了吗?我跟你遇到了完全相同的问题~跪求答案