首页 > 其他分享 >Akka集群

Akka集群

时间:2023-10-26 12:03:34浏览次数:30  
标签:订阅 标记 状态 集群 Akka 节点


每个节点只会监控它后面的2个节点是否发生错误


失败检测是通过节点间发送心跳消息并接收响应来完成的。Akka 会 根据心跳的历史记录以及当前的心跳信息计算出某个节点可用的可能性。Akka 会依照这 些数据和配置的容错限制得到计算结果,然后将节点标记为可用或不可用。



gossip协议达到最终一致性:


集群中的每个节点和它的邻居节点交换已知的状态。接着,这些邻居节点再将已知状态传递给它们的“邻居”,以此往复,直到某个节点的状态传递给了集群中的所有成员


如果某个节点被另一个节点访问,那么集群中的所有节点都会认为这个节点不可用


这种最终把状态传递给整个集群的机制叫做 gossip 协议或是 epidemic 协议。



读数据时,数据会被写入到第一个节点,并被复制到其余两个节点,无论写入哪个节点,该节点都会负责把数据同步到其他节点,故读数据只需要访问一个节点就可以了。只要成功连接任一节点,那么任何节点加入或离开集群时便不需要改配置



Akka Cluster构建系统


新节点加入集群会尝试连接第一个种子节点,若连接成功,新节点会发布其地址(主机和端口)。种子节点会通过gossip协议将新节点的地址通知整个集群。第一个节点连接失败依次往下再寻找连接


部署到生产环境,至少要有两个固定IP的种子节点,并保证任何时候都至少有一个节点可用,若任何节点都无法访问,则无法加入集群



订阅集群事件:


首先定义一个Logger,然后获取指向 Cluster 对象的引用。使用Actor的preStart和postStop方法来订阅感兴趣的事件,要记得在postStop方法 中调用 unsubscribe,防止泄露。


Actor订阅的事件:


UnreachableMember:该事件会在某个节点被标记为不可用时发出通知



优雅的退出集群:


通过杀死kill进程来关闭某个节点,Akka会把这个节点标记为不可达,并输出错误信息,关闭节点会导致改节点无法访问,所有移除节点前要通知集群。



集群成员状态:


MemberStatus


在加入集群时,将要加入的节点会将其状态设为 Joining。Leader 节点会做出响应, 将其状态改为 Up。同样地,如果一个节点将状态设置为 Leaving,那么 leader 节点会 做出响应,先将其状态改为 Exiting,然后再改成 Removed。所有这些状态改变都是通 过 MemberEvent 在集群间发送的,我们订阅的就是 MemberEvent,并在发生该事件时 输出日志。



失败检测:


节点被检测不可达时会被标记为MemberUnreachable,在 ClusterController 中订阅这个事件,这样每次标记 MemberUnreachable 的时候就能收到通知。如果在合理的时间段内该节点又重新变得可 达,那么该节点就会重新运行。如果在配置的时间内始终不可到达,那么 leader 节点就 会将该节点标记为 Down,该节点将无法重新加入集群。

标签:订阅,标记,状态,集群,Akka,节点
From: https://blog.51cto.com/u_15834920/8032011

相关文章

  • AKKA消息传递
    1.消息处理的一些基本机制:将消息定义为不可变;向Actor请求响应;转发消息;Future管道2.有4种核心的Actor消息模式:tell、ask、forward和pipeAsk:向Actor发送一条消息,返回一个Future。当Actor返回响应时,会完成Future。不会向消息发送者......
  • Kafka 简介、集群架构、安装部署、基本命令
    一、kafka是什么?在实时计算中,Kafka主要是用来缓存数据,storm可以通过消费kafka中的数据进行实时计算。一套开源的分布式的消息队列系统,由scala写成,支持javaAPI。Kafka读消息采用topic进行归类。二、kafka中有哪两种角色?发送消息:Producer(生产者)接收消息:Consumer(消费者)三......
  • oracle rac集群
    操作系统:centos7.6oracle:19c两台RAC服务器配置hosts文件#cat/etc/hosts192.168.3.37rac1192.168.3.105rac2192.168.2.2racprv1192.168.2.3racprv2192.168.3.201racvip1192.168.3.202racvip2192.168.3.200scanip......
  • docker-搭建一主两备redis集群
    一目的docker-搭建一主两备redis集群概述:目前要搭建一个“一主两备”redis集群,这个三个容器中redis的端口号为默认的6379,对外暴露的端口为6701,6702,6703,其中6701为master。6702和6703为slave二实现1.准备三份配置文件 1.1配置文件可从网上下载,下载后,可按该贴作修改,http......
  • 如何在同一个机器里运行 Kubernetes Control Plane Master Node 和 Worker Node (Kuber
    文章目录小结问题解决参考小结在Kubernetes集群的环境中,同一个机器里如何同时运行KubernetesControlPlaneMasterNode和WorkerNode,这样同一个机器承担了两个角色,本文描述了将KubernetesControlPlaneMasterNode进行设置使其承担WorkerNode的功能。问题参考使用keepa......
  • apisix etcd集群数据备份恢复
     #etcd数据备份/home/apisix-etcd-backup.sh#!/bin/bash#创建备份目录mkdir-p /data/{apisix-etcd-0,apisix-etcd-1,apisix-etcd-2}#apisixetcd数据备份ETCDCTL_API=3/opt/etcd/bin/etcdctl--endpoints="http://apisix-etcd-0.apisix-etcd-headless.ingress-apisix.......
  • k3d创建k3s集群
    安装gowgethttps://golang.google.cn/dl/go1.21.3.linux-amd64.tar.gztarzxvfgo1.15.3.linux-amd64.tar.gzmvgo/usr/local/vim/etc/profile在最结尾添加exportHOME=/rootexportGOROOT=/usr/local/goexportGOPATH=/opt/idcus/goexportPATH=$PATH:$GOPATH/bin:$......
  • 大规模集群的注意事项
    简介一提到大规模这三个字,就联想到数据中心机房中一排排的物理服务器,在早期还是购买物理机找托管机房的年代,很多时间都在机房中维护服务器,那声音吵得耳朵疼,现在的运维工程师幸福多了。注意事项集群峰值k8s1.28版本单个集群支持5000个工作节点,每个节点Pod数量不超过110,pod总数......
  • MongoDB分片+副本集高可用集群的启停步骤
    ■■集群启动步骤1、先启动各节点的configservermongod-f${MongoDir}/conf/config.conf2、再启动各节点的shardservermongod-f${MongoDir}/conf/shard1.conf3、再启动各节点的mongosservermongos-f${MongoDir}/conf/mongos.conf■■集群停止步骤停止服务的......
  • K8S集群搭建
    集群搭建的几种方式kubeadm通过kubeadminit、kubeadmjoin快速部署集群。二进制包下载官方编译好的二进制文件,手动部署,比较麻烦。。第三方工具、web端第三方提供的部署工具、web部署端。kubeadm部署k8s集群实验环境master节点:IP:10.0.1.140worker节点1:IP:10......