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查询,与其他数据中心交互WANgossip和转发查询给leader或者远程数据中心。

DataCenter——虽然数据中心的定义是显而易见的,但是有一些细微的细节必须考虑。例如,在
EC2中,多个可用区域被认为组成一个数据中心?我们定义数据中心为一个私有的,低延迟和高带
宽的一个网络环境。这不包括访问公共网络,但是对于我们而言,同一个EC2中的多个可用区域可
以被认为是一个数据中心的一部分。

Consensus——在我们的文档中,我们使用Consensus来表明就leader选举和事务的顺序达成一
致。由于这些事务都被应用到有限状态机上,Consensus暗示复制状态机的一致性。

Gossip——Consul建立在Serf的基础之上,它提供了一个用于多播目的的完整的gossip协议。
Serf提供成员关系,故障检测和事件广播。更多的信息在gossip文档中描述。这足以知道gossip使
用基于UDP的随机的点到点通信。

LAN Gossip——它包含所有位于同一个局域网或者数据中心的所有节点。 WAN

Gossip——它只包含Server。这些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的核心知识

Gossip协议
传统的监控,如ceilometer,由于每个节点都会向server报告状态,随着节点数量的增加server的压力
随之增大。在所有的Agent之间(包括服务器模式和普通模式)运行着Gossip协议。服务器节点和普通
Agent都会加入这个Gossip集群,收发Gossip消息。每隔一段时间,每个节点都会随机选择几个节点发
送Gossip消息,其他节点会再次随机选择其他几个节点接力发送消息。这样一段时间过后,整个集群都
能收到这条消息。示意图如下。

 RAFT一致性算法

为了实现集群中多个ConsulServer中的数据保持一致性,consul使用了基于强一致性的RAFT算法。
在Raft中,任何时候一个服务器可以扮演下面角色之一:
1. Leader: 处理所有客户端交互,日志复制等,一般一次只有一个Leader.
2. Follower: 类似选民,完全被动
3. Candidate(候选人): 可以被选为一个新的领导人。
Leader全权负责所有客户端的请求,以及将数据同步到Follower中(同一时刻系统中只存在一个
Leader)。Follower被动响应请求RPC,从不主动发起请求RPC。Candidate由Follower向Leader转换的中间状态
关于RAFT一致性算法有一个经典的动画http://thesecretlivesofdata.com/raft/,其中详细介绍了选
举,数据同步的步骤。

Consul 集群搭建

首先需要有一个正常的Consul集群,有Server,有Leader。这里在服务器Server1、Server2、Server3
上分别部署了Consul Server。(这些服务器上最好只部署Consul程序,以尽量维护Consul Server的稳定)

服务器Server4和Server5上通过Consul Client分别注册Service A、B、C,这里每个Service分别部署在
了两个服务器上,这样可以避免Service的单点问题。(一般微服务和Client绑定)

在服务器Server6中Program D需要访问Service B,这时候Program D首先访问本机Consul Client提供
的HTTP API,本机Client会将请求转发到Consul Server,Consul Server查询到Service B当前的信息返回

Agent 以 client 模式启动的节点。在该模式下,该节点会采集相关信息,通过 RPC 的方式向
server 发送。Client模式节点有无数个,官方建议搭配微服务配置
Agent 以 server 模式启动的节点。一个数据中心中至少包含 1 个 server 节点。不过官方建议使用
3 或 5 个 server 节点组建成集群,以保证高可用且不失效率。server 节点参与 Raft、维护会员信
息、注册服务、健康检查等功能。

安装consul并启动
在每个consul节点上安装consul服务,下载安装过程和单节点一致。

#从官网下载最新版本的Consul服务
wget https://releases.hashicorp.com/consul/1.5.3/consul_1.5.3_linux_amd64.zip
##使用unzip命令解压
unzip consul_1.5.3_linux_amd64.zip
##将解压好的consul可执行命令拷贝到/usr/local/bin目录下
cp consul /usr/local/bin
##测试一下
consul
##登录s1虚拟机,以server形式运行
consul agent -server -bootstrap-expect 3 -data-dir /etc/consul.d -node=server-1
-bind=192.168.74.101 -ui -client 0.0.0.0 &
##登录s2 虚拟机,以server形式运行
consul agent -server -bootstrap-expect 2 -data-dir /etc/consul.d -node=server-2
-bind=192.168.74.102 -ui -client 0.0.0.0 &
##登录s3 虚拟机,以server形式运行
consul agent -server -bootstrap-expect 2 -data-dir /etc/consul.d -node=server-3
-bind=192.168.74.103 -ui -client 0.0.0.0 &

-server: 以server身份启动。
-bootstrap-expect:集群要求的最少server数量,当低于这个数量,集群即失效。
-data-dir:data存放的目录,更多信息请参阅consul数据同步机制
-node:节点id,在同一集群不能重复。

-bind:监听的ip地址。
-client:客户端的ip地址(0.0.0.0表示不限制)
& :在后台运行,此为linux脚本语法

##在本地电脑中使用client形式启动consul

consul agent -client=0.0.0.0  -data-dir /etc/consul.d -node=client-1

每个节点加入集群
在s2,s3,s4 服务其上通过consul join 命令加入 s1中的consul集群中

##加入consul集群
consul join 192.168.74.101

测试
在任意一台服务器中输入 consul members查看集群中的所有节点信息

##查看consul集群节点信息
consul members

注:由于我阿里云部署每个节点都加不进去,这里就不演示了,把部署的过程直接贴出来。

原文地址:https://www.cnblogs.com/dalianpai/p/12269024.html

时间: 2024-07-30 20:36:40

Consul高可用集群的相关文章

ProxySQL Cluster 配置详解 以及 高可用集群方案部署记录(完结篇)

早期的ProxySQL若需要做高可用,需要搭建两个实例,进行冗余.但两个ProxySQL实例之间的数据并不能共通,在主实例上配置后,仍需要在备用节点上进行配置,对管理来说非常不方便.但是ProxySQl 从1.4.2版本后,ProxySQL支持原生的Cluster集群搭建,实例之间可以互通一些配置数据,大大简化了管理与维护操作. ProxySQL是一个非中心化代理,在拓扑中,建议将它部署在靠近应用程序服务器的位置处.ProxySQL节点可以很方便地扩展到上百个节点,因为它支持runtime修改配

Linux高可用集群方案之heartbeat基础原理及逻辑架构

 这篇文章我们主要学习heartbeat高可用集群的基础原理及逻辑架构,以及heartbeat的简单配置  ll  本文导航    · heartbeat之基本原理   · heartbeat之集群组件   · heartbeat之心跳连接   · heartbeat之脑裂(资源争用.资源隔离) · heartbeat之配置文件   · heartbeat至高可用集群配置  ll  要求  掌握heartbeat高可用集群的相关组件及简单配置   heartbeat之基本原理  heartbea

CentOS 7 corosync高可用集群的实现

CentOS 7 corosync高可用集群的实现 =============================================================================== 概述: =============================================================================== 在CentOS 7上实现高可用集群案例  1.corosync安装配置 ★CentOS 7: corosync v2 (

高可用集群和负载均衡集群理解

高可用集群 HA(hight avaliable)即高可用,又被叫双机热备 防止服务器中断,影响对外提供服务 协议:Heartbeat使用心跳进行通信和选举 含义:一般是指当集群中的任意一个节点失效的情况下,节点上的所有任务自动转移到其他正常的节点上,并且此过程不影响整个集群的运行,不影响业务的提供. 负载均衡集群 LB(load balance)负载均衡集群 防止服务器发生瓶颈 协议:Keepalived使用VRRP协议进行通信和选举 用于用户请求量过大,服务器发生瓶颈,通过负载均衡,让用户可

linux 下heartbeat简单高可用集群搭建

Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统.通过Heartbeat我们可以实现双机热备,以实现服务的持续性. linux下基于heartbeat的简单web服务的高可用集群搭建 首先规划好两台主机作为heartbeat的双机热备,命名为node1.lvni.cc(主) ;node2.lvni.cc, node1的eth0IP :192.168.157.148  Vip eth0:0:192.168.157.149 node2的eth0IP :19

CoroSync + Drbd + MySQL 实现MySQL的高可用集群

Corosync + DRBD + MySQL 构建高可用MySQL集群 节点规划: node1.huhu.com172.16.100.103 node2.huhu.com172.16.100.104 资源名称规划 资源名称:可以是除了空白字符外的任意ACSII码字符 DRBD设备:在双节点上,此DRBD设备文件,一般为/dev/drbdN,主设备号147 磁盘:在双方节点上,各自提供存储设备 网络配置:双方数据同步所使用的网络属性 DRBD从Linux内核2.6.33起已经整合进内核 1.配置

利用heartbeat的ldirectord实现ipvs的高可用集群构建

集群架构拓扑图: 网络规划: 两台LVS server:(两台LVS也可以为用户提供错误页面) node1:172.16.31.10 node2:172.16.31.11 VIP:172.16.31.180 ipvs规则内包含2台Real Server:(后面的RS指的就是后端的web服务器) rs1:172.16.31.13 rs2:172.16.31.14 我们还需要错误页面提供者:我们选择LVS作为sorry server,所有的real server不可用时就指向这个sorry serv

linux高可用集群(HA)原理详解

高可用集群 一.什么是高可用集群 高可用集群就是当某一个节点或服务器发生故障时,另一个节点能够自动且立即向外提供服务,即将有故障节点上的资源转移到另一个节点上去,这样另一个节点有了资源既可以向外提供服务.高可用集群是用于单个节点发生故障时,能够自动将资源.服务进行切换,这样可以保证服务一直在线.在这个过程中,对于客户端来说是透明的. 二.高可用集群的衡量标准 高可用集群一般是通过系统的可靠性(reliability)和系统的可维护性(maintainability)来衡量的.通常用平均无故障时间

MM(主主数据库)+keepalived主备高可用集群

博客分享的第一篇技术文章: 项目主要搭建:主主数据库高可用集群搭建. 数据库互为主备,应用技术:MM+keepalived 使用的是虚拟机搭建的实验向大家展示: 数据库1:192.168.4.7 数据库2:192.168.4.77 VIP:192.168.4.68 web1:192.168.4.69 web2:192.168.4.70 一.安装mysql,部署主主同步结构. 直接yum安装 配置主主同步: 由于主数据库192.168.4.7里面存放着数据,所以需要先导出数据,方法很多,我们采取m