从0到1手写注册中心Registry之集群选主

一、领域对象

  1. Cluster:描述集群信息
  • port描述当前服务端口;
  • host描述当前服务主机;
  • myself描述当前服务本身;
  • servers描述当前服务集群列表
  • registryConfigProperties配置信息;
  • executor定时任务,负责更新服务信息和选主;
  • timeout定时任务执行时间间隔。

图片

  1. Server:描述服务实例
  • url:服务地址
  • status:服务状态
  • leader:服务实例是否为主节点
  • version:服务最新版本号

图片

二、集群选主

  1. 初始化
  • 获取当前服务实例地址信息
  • 构建当前服务实例对象
  • 获取所有服务列表
  • 开启定时任务:更新集群服务信息;选主。

图片

所有服务列表有属性文件里进行配置,分别创建当前服务对象和其他服务对象。区别是当前服务实例状态为true,其他为false。

图片

  1. 更新集群服务信息

初始化的时候只是描述了服务简单信息,实际信息需要事实获取并更新。

通过http调用获取到其他服务实际的信息,包括真实转态、是否主节点、版号。

图片3. 选主

从所有服务列表中筛选出状态为true,是主节点的服务。

  • 如果是空列表,就进行选主;
  • 如果有多个服务,也需要选主
  • 如果只有一个这样的节点,就不需要选主,说明当前集群只有一个主,符合预期。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

选主算法有:

  • 各种节点自己选,算法保证大家选的是同一个
  • 外部有一个分布式锁,谁拿到锁,谁是主
  • 分布式一致性算法,比如paxos,raft,,很复杂

当前实现采用第一种,通过选择出最小的hash为主节点,这种算法可以保证大家选择的都是一样的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

选主成功后,设置为主节点即可。

三、测试

  1. 三个节点

通过端口8484、8485、8486分别启动三个服务,模拟集群。

观察8484的日志:先更新三个服务信息,都是成功的。然后选择出8484为主节点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

观察8485的日志:先更新三个服务信息,都是成功的。然后选择出8484为主节点。

图片

观察8486的日志:先更新三个服务信息,都是成功的。然后选择出8484为主节点。

图片

  1. 两个节点

停掉8484,只保留8485和8486两个服务。

观察8485的日志:更新服务状态8484是失败的,8485和8486是成功的。选择是8485为主节点。

图片

观察8486的日志:更新服务状态8484是失败的,8485和8486是成功的。选择是8485为主节点。

图片

源码地址:

https://github.com/midnight2104/midnight-registry/tree/v2

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ava实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),可运行高分资源 Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现
Seata可以注册到多种不同的注册中心,如nacos、eureka、redis、zk、consul、etcd3、sofa等。在配置文件中,可以通过修改registry.conf文件来指定Seata注册到哪个注册中心。例如,如果要将Seata注册到nacos,可以按照以下步骤进行配置: 1. 解压Seata安装包,进入seata\seata-server-1.4.1\seata\conf文件夹。 2. 打开registry.conf文件。 3. 在registry部分,将type参数设置为"nacos",表示选择注册中心为nacos。 4. 配置nacos的相关参数,如application、serverAddr、group、namespace等。 5. 在config部分,同样将type参数设置为"nacos",表示选择配置中心为nacos。 6. 配置nacos的相关参数,如serverAddr、namespace、group等。 这样,Seata就会将自身注册到nacos注册中心。根据具体需求,你也可以选择其他注册中心进行配置。\[1\]\[2\] 另外,客户端注册中心是指在分布式项目中的registry.conf配置文件中的registry.type参数,用于指定客户端在哪里发现Seata服务器。例如,如果Seata服务器由zookeeper管理,那么客户端只需向zookeeper发现Seata服务器即可。在registry.conf文件中,可以将type参数设置为"zk",并配置相应的zookeeper参数,如serverAddr、sessionTimeout、connectTimeout等。这样,客户端就可以通过zookeeper发现Seata服务器。\[3\] #### 引用[.reference_title] - *1* *3* [seata 的注册中心和配置中心](https://blog.csdn.net/qq_16320025/article/details/106076853)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [本地windows运行seata服务并注册到nacos中心](https://blog.csdn.net/baidu_36124158/article/details/119003825)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值