1. TIPC背景介绍##

TIPC主要是用于集群网络环境之中,它这个协议有一些前提假设包括:

  1. 协议发送的大部分message都是直接到达目的地(无路由);
  2. message的传输时间都很短;
  3. message都在集群内部节点间传递;
  4. 包丢失率很低, 重传不经常发生;
  5. 可用带宽和内存都很大;
  6. 包校验和都由硬件校验;
  7. 通信节点的数量在一定时间内是相对受限和静态的;
  8. 安全在封闭的集群环境里相对Internet来说不是关键因素。

    Q:上述假定可以得出TIPC是基于流量驱动(traffic-driven)和固定大小滑动窗口的信号链路层协议。

    A:tipc的每个link都可以设置tolerance数值和window大小,静态的。
2. TIPC网络协要素##

网络协议包括协议结构,逻辑节点何消息结构三个方面。

2.1 协议结构##
2.2 节点逻辑结构##

TIPC网络是由单个的处理单元或节点组成. 网络节点是严格分层的, 规则如下:

  1. 相关节点的集合构成一个cluster: 如果cluster中的每一个节点都至少有一条直达其他每个节点的路径(即cluster的节点是全连通的), 那么这些节点构成一个cluster, 每个cluster有1~4095个节点.
  2. 相关cluster的集合构成一个zone: 如果zone中的每一个cluster都至少有一条直达其他每个cluster的路径(即zone的cluster是全连通的), 那么这些cluster构成一个zone, 每个zone有1~4095个cluster, 每个cluster的大小不必相同.
  3. 相关zone的集合构成一个TIPC网络: 如果网络中的每一个zone都至少有一条直达其他每个zone的路径(即网络的zone是全连通的), 那么这些zone构成一个TIPC网络, 每个TIPC网络有1~255个zone, 每个zone的大小不必相同.

    节点一般是按照邻近关系分组, TIPC的通信质量随着节点距离增加而下降, 在一个典型的TIPC网络中, 同一cluster中的节点间通信最频繁, 其次是同一zone而不同cluster的节点, 而不同zone中的节点基本没有通信.

    TIPC网络中的每个节点都有一个由zone ID, cluster ID和node ID组成的地址, 一般标记为 z.c.n 其中: 1<=Z<=255, 1<=C, N<=4095.TIPC网络中的每个节点都有一个由zone ID, cluster ID和node ID组成的地址, 一般标记为 z.c.n 其中: 1<=Z<=255, 1<=C, N<=4095. 如果一个TIPC网络节点还没有被分配地址, 那么就以<0.0.0>标记它. TIPC网络一般也有自己的ID. 这样可以使多个逻辑TIPC网络共同使用相同的物理介质(如以太网LAN等)而不相互干扰。
2.3 消息结构##

message是TIPC节点端口间信息交换的基本单元. TIPC中有2种基本消息:

  1. payload message: 在应用程序和应用程序或应用程序和TIPC服务之间传送应用程序相关的内容。
  2. internal message: 在TIPC子系统之间传送TIPC相关的内容。

    每个TIPC消息都包含消息头部和数据2部分, 消息头部的格式和用户相关, 大小从6个字到11字(word)不等(TIPC支持头部将来最大扩展到60字节). 头部是以网络字节序编码的32字节整形存储的。
3. 原理##

使用端口名称Port Naming来指代<ZCN:REF>,首先端口名称这个概念必须基于scope的前提,在同一个scope下,端口名是不能重合的{type,instance}这里的type和instance都是32位的大小,端口名称增加了灵活度,例如多个<ZCN:REF>都提供一样的服务,那么我们可以在端口名称的情况里进行多个<ZCN:REF>绑定到一个{type,instance}的方式,反过来,一个port提供多个服务的话,那么我们也可以一个<ZCN:REF>绑定到多个{type,instance}。

使用TIPC,我们在创建socket的时候在内核中注册自己的服务类型service type,那么在发送端,只需要指定服务类型就可以由内核路由到相应的socket。这个时候,对应用层来说,对端地址仅仅是一个服务类型service type!很显然,内核维护着这么一张TIPC的路由表,即由服务去查找socket。而每台机都有这样的路由表,他们之间信息就像能够共享一样地为整个集群的TIPC socket服务。有了TIPC,这个socket使用了哪个IP,哪个端口。

4. 安装与配置##
  1. 源码编译安装(内核模块动态装载方式)2016-12-04 00:11:56 星期日
  • download related kernel version source: [root@192 ~]# yum install kernel-devel-uname -r``
  • 将现有的config覆盖源码的config cp /boot/config-3.10.0-229.11.1.el7.x86_64 .config
  • make menuconfig
  • make modules 此时就可以在对应的模块目录下找到自己的ko文件
  • download tipcutils-2.0.2.tar.gz
  • cd tipcutils-2.0.2; make
[root@192 tipc]# pwd
/lib/modules/3.10.0-327.36.3.el7.x86_64/kernel/net/tipc
[root@192 tipc]# modprobe tipc
[root@192 tipc]# lsmod |grep tipc
tipc 116876 0

例如TIPC内核模块而言,直接用root # modprobe tipc来加载,就可以将tipc模块加载到内核。

配置网络: root# tipc-config -netid=1234 -addr=1.1.8 -be=eth:eth0/1.1.0

远程管理: root# tipc-config -dest=1.1.9 -n

禁用远程管理: root# tipc-config -mng=disable

tipc-2.0标准去掉了之前标准里面对于zone的支持,目前这个版本只支持在一个cluster里面的节点情况,在linux内核里面作为一个模块来加载的是tipc.ko。该模块的管理工具包括./tipc-config ,这个工具是与版本相关的,不要拿之前的版本软件工具来用。

在配置TIPC网络的过程中,需要理解选项中的几个概念:

address 节点地址(例如,1.1.2)

bear 承载名称(例如,eth:eth0)

link 节点间链接(例如,1.1.1:eth0-1.1.2:eth0)

media 媒体名称(例如,eth)

link tolerance

link window

domain 网络区域,例如2.3.12,2.3.0,2.0.0或0.0.0

network id

priority

5. 编程指南##

编程时需要注意的几点:

  1. 程序里面一般只用端口名称来通信;
  2. 如果节点之间存在冗余link的话,是协议栈自行决定。
5.1 Port Naming##
  • port naming 冲突机制:在一个node内部,这个是比较自由的,节点内的任何port都可以绑定到任何一个name上,也可以绑定多个name,但是不能重复绑定一个name;
  • 在节点之间有一个scope的概念,这个涉及到,比如scope有node已经publish了一个name,那么就不能有重复了,除非不在一个scope。naming在scope内有排斥作用,如果先前的服务提供了某些范围的name sequences,这时会publish给定义的scope内的所有节点,这时后续的有冲突的这个name就无法创建成功。
  • Overlapping name sequences are permitted if they are published by different nodes and are published with non-overlapping scopes. For example, it is possible to publish {100,500,1200} on node <1.1.1> and {100,1100,1500} on node <1.1.2> as long as they both are published with node scope.
  • naming 的用户可用范围是0~63,其中{0,zcn}和{1,1}是用于
5.2 Naming Resolution##

client应用在计划连接server时会指定lookup domain,默认查找整个tipc网络,**因为port naming的特性,一个name可能对应好多个id,这里tipc是循环使用这个有效的port id

首先应用程序从自己的topo svr这里获取目标port id,如果找不到,这个消息会依次发送给各个节点。

5.3 Multicast Messaging##

这个是一个port name匹配的问题,从name的角度来看,消息的副本会发给sequence匹配上的name;从port id的角度看,不管怎样,每次只收到一个这样的消息。

5.4 Name Subscriptions##

TIPC提供一个topology服务,应用先connect到{1,1},这个是topo提供的服务,然后再订阅自己感兴趣的;

首先,每个node都会发布自己的{0,zcn}用于自动建立link等;

订阅消息包含:****

订阅返回的事件消息包含:****

6. 参考文档##
  1. 集群通信TIPC协议
  2. 通信协议——HTTP、TCP、UDP三者的关系

集群节点间网络通信TIPC的更多相关文章

  1. 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:4.安装Oracle RAC FAQ-4.3.Oracle 集群节点间连通失败

    1.检查节点连通性的错误 [grid@linuxrac1 grid]$ ./runcluvfy.sh stage -post hwos -n linuxrac1,linuxrac2 -verbose ...

  2. Kubernetes从懵圈到熟练:读懂这一篇,集群节点不下线

    排查完全陌生的问题,完全不熟悉的系统组件,是售后工程师的一大工作乐趣,当然也是挑战.今天借这篇文章,跟大家分析一例这样的问题.排查过程中,需要理解一些自己完全陌生的组件,比如systemd和dbus. ...

  3. 如何诊断 11.2 集群节点驱逐问题 (文档 ID 1674872.1)

    适用于: Oracle Database - Enterprise Edition - 版本 11.2.0.1 到 11.2.0.2 [发行版 11.2]本文档所含信息适用于所有平台 用途 这篇文档提 ...

  4. Akka(12): 分布式运算:Cluster-Singleton-让运算在集群节点中自动转移

    在很多应用场景中都会出现在系统中需要某类Actor的唯一实例(only instance).这个实例在集群环境中可能在任何一个节点上,但保证它是唯一的.Akka的Cluster-Singleton提供 ...

  5. 【故障公告】10:30-10:45 左右 docker swarm 集群节点问题引发故障

    非常抱歉,今天 10:30-10:45 左右由于 docker swarm 集群节点出现问题,造成除博客之外的站点出现访问异常,由此给您带来很大的麻烦,请您谅解. 故障开始时出现有时访问正常有时访问出 ...

  6. Rabbitmq关于集群节点功能的读书笔记

    消息和队列可以指定是否持久化,如果指定持久化则会保存到硬盘上 ,不然只在内存里 普通集群模式下持久化的队列不能重建了 内存节点和磁盘节点的区别就是将元数据放在了内存还是硬盘,仅此而已,当在集群中声明队 ...

  7. Quartz的集群模式和单机模式共存-让一个非集群的Quartz与集群节点并行着运行

    假如你让一个非集群的 Quartz 应用与集群节点并行着运行,设法使用 JobInitializationPlugin和 RAMJobStore Quartz支持可选节点执行jobquartz集群,会 ...

  8. 删除RAC集群节点

    删除GRID集群节点:参考oracle database 11g RAC手册(第二版) 目前GRID集群中节点信息:[grid@node1 ~]$ olsnodesnode1node2node3nod ...

  9. 集群节点Elasticsearch升级

    集群节点Elasticsearch升级 操作流程 1.首先执行Elasticsearch-1.2.2集群的索引数据备份 2.关闭elasticsearch-1.2.2集群的recovery.compr ...

随机推荐

  1. Linux 搭建NTP服务器

    NTP服务器[Network Time Protocol(NTP]是用来使计算机时间同步化的一种协议,NTP服务器可以对其它服务器做时间同步化,从而达到时间统一. 配置环境及要求: A. 假设10.8 ...

  2. servlet的匹配规则,兼谈/与/*

    客户端通过URL地址访问服务器(servlet容器)资源,所以servlet若要能对外提供服务,必须要将程序按照java规范将其映射到对应的URL上,映射的规则是需要开发人员在WEB.XML中显示指定 ...

  3. Angular动态编译Html

    //取得scope,有时可以使用this var scope=angular.element(this).scope(); var el= $compile(html)(scope); //加入到Do ...

  4. delphi 环境问题

    这个编译时的警告该如何理解?[Warning] Unit 'Unit101' implicitly imported into package 'Package202'------解决方案------ ...

  5. iOS,iOS对Android数据互通的规则

    AppStore针对数据互通的规则:在AppStore上架的应用,苹果会按照3:7的比例抽取IAP( In-App Purchase)三成的收入,作为渠道费用 11.2    Apps utilizi ...

  6. Eclipse中配置svn

    1.打开eclipse,help--> Eclipse MarketPlace...,搜索输入“subclipse”,点击安装,一路按向导安装: 2.安装成功后,在Window --> S ...

  7. Uploadify/uploadifive上传(中文文档)

    Uploadify是一款基于JQuery的优秀的文件/图片上传的插件,有基于Flash和HTML5两种版本.  Uploadify/uploadifive主要特点有: 1. 多文件上传 2. 个性化设 ...

  8. Android 开发基础及环境配置

    2011年买了第一部安卓操作系统的手机,当时势头正盛的HTC不可思议(incredible),当时的想法就是想学习下智能手机开发,但是由于各种原因,客观上是公司的项目太忙了,忙于项目管理.团队建设.客 ...

  9. [nodejs] Error: unable to verify the first certificate

    Error: unable to verify the first certificate Solution npm config set registry http://registry.npmjs ...

  10. C# 不重复的随机数

    public int RabdomNumber() { num = new Random(Guid.NewGuid().GetHashCode()).Next(0, 40); return num; ...