lcn集群原理图:

1.实现原理:

1.1 LCN获取tm协调者注册地址

1. LCN客户端项目启动的时候,首先会注册到事务协调者中去,然后读取配置文件tm事务协调者的注册地址。

2. 向该事务协调者注册地址发送一个请求,获取对应的lcn底层协议ip和端口号(底层是netty协议通讯)。

3. 会向该lcn底层协议ip和端口号建立长连接 ,保持会话信息。

lcn 协调者访问地址,及页面如下图所示。

客户端配置文件

tm:
  manager:
    url: http://127.0.0.1:8899/tx/manager/

2. 基于Nginx 搭建事务协调者集群

这里所指的端口号指的是事务协调者中配置的 tm.socket.port=9999 的端口号,netty 协议端口号和ip地址。

1.首先通过nginx配置多个tm协调者负载均衡配置,然后 LCN客户端启动项目的时候访问nginx负载均衡地址获取lcn协议通讯IP地址和端口号,并且对该连接保持长连接。

2.因为LCN客户端与TM协调者保持的是长连接,当tm协调者宕机之后,LCN会客户端会立即重新进入到获取负载均衡地址lcn协议通讯IP地址和端口号。

3.如果lcn客户端与事务协调者保持的长连接断开后,那么lcn客户端会在通过Nginx 负载均衡实现故障转移轮询到下一台事务协调者服务器获取对应的lcn底层的ip和端口号,并且建立长连接。

原理图如下:

nginx 配置:

### 上游服务器 集群  默认轮询

upstream backserver{

server 127.0.0.1:8898;

server 127.0.0.1:8899;

}

### server{

#### 监听端口号

listen       80;

####  监听域名地址

server_name   lcn.test.com

location / {

### 指定上游服务器负载均衡器

proxy_pass  http://backserver;

### nginx 与上游服务器(真是访问的服务器)的超时时间  后端服务器的连接的超时时间_发起握手等候响应超时时间

proxy_connect_timeout   5s;

### nginx 发送给上游服务器(真是访问的服务器)的超时时间

proxy_send_timeout 5s;

### nginx 接受上游服务器(真实访问的服务器)超时时间

proxy_read_timeout 5s;

index index.html index.htm;

}

}

项目源码地址:https://gitee.com/MingTian-NiHao/springboot-lcn 、https://gitee.com/MingTian-NiHao/tx-lcn

lcn 分布式事务协调者集群原理的更多相关文章

  1. J2EE集群原理(摘录)

    J2EE集群原理 什么是集群呢?总的来说,集群包括两个概念:“负载均衡”(load balancing)和“失效备援”(failover)  图一:负载均衡 多个客户端同时发出请求,位于前端的负载均衡 ...

  2. kafka集群原理介绍

    目录 kafka集群原理介绍 (一)基础理论 二.配置文件 三.错误处理 kafka集群原理介绍 @(博客文章)[kafka|大数据] 本系统文章共三篇,分别为 1.kafka集群原理介绍了以下几个方 ...

  3. LCN分布式事务管理(一)

    前言 好久没写东西了,9月份换了份工作,一上来就忙的要死.根本没时间学东西,好在新公司的新项目里面遇到了之前没遇到过的难题.那遇到难题就要想办法解决咯,一个请求,调用两个服务,同时操作更新两个数据库. ...

  4. RabbitMQ 集群原理

    RabbitMQ默认集群原理 rabbitmq 本身是基于erlang编写,erlang语言天生具备分布式的特性(通过同步Erlang集群各节点的erlang cookie实现),RabbiteMQ天 ...

  5. Quartz集群原理及配置应用

    1.Quartz任务调度的基本实现原理 Quartz是OpenSymphony开源组织在任务调度领域的一个开源项目,完全基于Java实现.作为一个优秀的开源调度框架,Quartz具有以下特点: (1) ...

  6. RabbitMQ 集群原理和完善

    一.RabbitMQ集群方案的原理 RabbitMQ这款消息队列中间件产品本身是基于Erlang编写,Erlang语言天生具备分布式特性(通过同步Erlang集群各节点的magic cookie来实现 ...

  7. 【原理、应用】Quartz集群原理及配置应用

    一.Quartz任务调度的基本实现原理 Quartz是OpenSymphony开源组织在任务调度领域的一个开源项目,完全基于Java实现.作为一个优秀的开源调度框架,Quartz具有以下特点: 强大的 ...

  8. C# Memcache集群原理、客户端配置详细解析

    概述 memcache是一套开放源的分布式高速缓存系统.由服务端和客户端组成,以守护程序(监听)方式运行于一个或多个服务器中,随时会接收客户端的连接和操作.memcache主要把数据对象缓存到内存中, ...

  9. ClickHouse 分布式高可用集群搭建(转载)

    一.ClickHouse安装方式: 源码编译安装 Docker安装 RPM包安装 为了方便使用,一般采用RPM包方式安装,其他两种方式这里不做说明. 二.下载安装包 官方没有提供rpm包,但是Alti ...

随机推荐

  1. 安装stress模拟linux系统资源消耗

    1.安装yum源:yum install epel-release -y 2.安装stress:yum install stress -y 3.使用样例:stress -c 1 -t 60 4.测试场 ...

  2. 仿B站项目(4)webpack打包第三方库jQuery

    概述 在项目中不可避免的会用到jquery等第三方库,来看看有什么问题,怎么解决. 遇到的问题 一般情况下,直接require第三方库,比如jquery,然后webpack会自动把第三方库打包进bun ...

  3. LabVIEW(十四):VI属性

    1.VI的属性在项目研究中是很常用的,但是会经常忽略VI的属性设置,建议在编程事常常运用这些属性的设置,这样就可以使你的程序更加完善,易懂性也会提高. 属性快捷键:Ctrl+I. 2.常规 (1).编 ...

  4. dubbo rpc调用,接收到的bean为null原因?

    前几天对接公司内部其他部门的系统,用dubbo调用,dubbo看起来很简单,但是却让我们调试了好久啊! 下面是调试纪录: 1. 调用该服务时,直接调不通,查看错误为 no provider ? 然后就 ...

  5. Maven Optional & Exclusions 使用区别

    Optional和Exclusions都是用来排除jar包依赖使用的,两者在使用上却是相反. Optional定义后,该依赖只能在本项目中传递,不会传递到引用该项目的父项目中,父项目需要主动引用该依赖 ...

  6. IOS 数据存储之 Core Data详解

    Core Date是ios3.0后引入的数据持久化解决方案,它是是苹果官方推荐使用的,不需要借助第三方框架.Core Date实际上是对SQLite的封装,提供了更高级的持久化方式.在对数据库操作时, ...

  7. Ubuntu下安装程序的三种方法(转)

    引言 在Ubuntu当中,安装应用程序我所知道的有三种方法,分别是apt-get,dpkg安装deb和make install安装源码包三种.下面针对每一种方法各举例来说明. 一.apt-get方法 ...

  8. 关于appendChild和insertBefore appendTo()和append

    appendChild和insertBefore(原生js) appendTo()和append(jquery)

  9. Java的语法糖

    1.前言 本文记录内容来自<深入理解Java虚拟机>的第十章早期(编译期)优化其中一节内容,其他的内容个人觉得暂时不需要过多关注,比如语法.词法分析,语义分析和字节码生成的过程等.主要关注 ...

  10. Android_TextView使用Spanable

    TextView通常用来显示普通文本,但是有时候需要对其中某些文本进行样式.事件方面的设置.Android系统通过SpannableString类来对指定文本进行相关处理,具体有以下功能: 1.Bac ...