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. 使用SSIS汇集监控数据

    1.背景 数据库服务器部署有各类巡检脚本,现在想把巡检收集到的数据汇集到一起.Source源对应的是各业务数据库服务器,Destination目标对应的是保存汇集数据的服务器.前期部署的时候已将巡检相 ...

  2. 阿里云docker镜像加速

    echo "DOCKER_OPTS=\"--registry-mirror=https://yeyieqis.mirror.aliyuncs.com\"" | ...

  3. RDIFramework.NET-.NET快速信息化系统开发整合框架 【开发实例 EasyUI】之产品管理(MVC版)

    RDIFramework.NET—.NET快速开发整合框架 [开发实例]之产品管理(MVC版) 接上篇:RDIFramework.NET (.NET快速信息化系统开发整合框架) [开发实例]之产品管理 ...

  4. [原创]java WEB学习笔记109:Spring学习---spring中事物管理

    博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好 ...

  5. TortoiseGit 连接oschina不用每次输入用户名和密码的方法

    每次git clone 和push 都要输入用户名和密码.虽然安全,但在本机上每次都输有些麻烦,如何记住用户名和密码呢? 在网上看了各种方法,太杂,很多可能环境不一样,一直行不通.最后找到一种有效的方 ...

  6. js 控制浏览器窗口大小

    //打开一个新窗口并设置其大小window.open('index.html','','width=450,height=750,location=no,menubar=no,status=no,to ...

  7. JAVA 学习随笔 : JDK Enhancement Process JEP process

    是时候寻找一个学习JAVA的路径了 ---- JDK Enhancement Process Oracle发布了JDK增强提案与路线图进程,目的在于鼓励OpenJDK提交者贡献点子和扩展以改进Open ...

  8. mac 10.11 cocopods注意的地方

    最近安装cocoapods,遇到些新问题,安装过程纠结了一天,先是ruby版本的问题,解决掉了,后来又是ruby下载cocoapods慢的问题,尝试了好几遍都下载不成功.最后也是不断尝试和查询,算是安 ...

  9. iOS的数据持久化

    所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据.在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一下5种方案: plist文件(属性列表) pr ...

  10. 下拉菜单demo---参考阿里云首页顶部下拉菜单

    前言: 最近开始学习html+css,准备仿照各大网站写一些demo. 正文: 分析阶段: 如下图: 链接来自于: 阿里云:https://www.aliyun.com/ 实现过程: (一)用css3 ...