集群节点间网络通信TIPC
1. TIPC背景介绍##
TIPC主要是用于集群网络环境之中,它这个协议有一些前提假设包括:
- 协议发送的大部分message都是直接到达目的地(无路由);
- message的传输时间都很短;
- message都在集群内部节点间传递;
- 包丢失率很低, 重传不经常发生;
- 可用带宽和内存都很大;
- 包校验和都由硬件校验;
- 通信节点的数量在一定时间内是相对受限和静态的;
- 安全在封闭的集群环境里相对Internet来说不是关键因素。
Q:上述假定可以得出TIPC是基于流量驱动(traffic-driven)和固定大小滑动窗口的信号链路层协议。
A:tipc的每个link都可以设置tolerance数值和window大小,静态的。
2. TIPC网络协要素##
网络协议包括协议结构,逻辑节点何消息结构三个方面。
2.1 协议结构##
2.2 节点逻辑结构##
TIPC网络是由单个的处理单元或节点组成. 网络节点是严格分层的, 规则如下:
- 相关节点的集合构成一个cluster: 如果cluster中的每一个节点都至少有一条直达其他每个节点的路径(即cluster的节点是全连通的), 那么这些节点构成一个cluster, 每个cluster有1~4095个节点.
- 相关cluster的集合构成一个zone: 如果zone中的每一个cluster都至少有一条直达其他每个cluster的路径(即zone的cluster是全连通的), 那么这些cluster构成一个zone, 每个zone有1~4095个cluster, 每个cluster的大小不必相同.
- 相关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种基本消息:
- payload message: 在应用程序和应用程序或应用程序和TIPC服务之间传送应用程序相关的内容。
- 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. 安装与配置##
- 源码编译安装(内核模块动态装载方式)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. 编程指南##
编程时需要注意的几点:
- 程序里面一般只用端口名称来通信;
- 如果节点之间存在冗余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. 参考文档##
集群节点间网络通信TIPC的更多相关文章
- 基于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 ...
- Kubernetes从懵圈到熟练:读懂这一篇,集群节点不下线
排查完全陌生的问题,完全不熟悉的系统组件,是售后工程师的一大工作乐趣,当然也是挑战.今天借这篇文章,跟大家分析一例这样的问题.排查过程中,需要理解一些自己完全陌生的组件,比如systemd和dbus. ...
- 如何诊断 11.2 集群节点驱逐问题 (文档 ID 1674872.1)
适用于: Oracle Database - Enterprise Edition - 版本 11.2.0.1 到 11.2.0.2 [发行版 11.2]本文档所含信息适用于所有平台 用途 这篇文档提 ...
- Akka(12): 分布式运算:Cluster-Singleton-让运算在集群节点中自动转移
在很多应用场景中都会出现在系统中需要某类Actor的唯一实例(only instance).这个实例在集群环境中可能在任何一个节点上,但保证它是唯一的.Akka的Cluster-Singleton提供 ...
- 【故障公告】10:30-10:45 左右 docker swarm 集群节点问题引发故障
非常抱歉,今天 10:30-10:45 左右由于 docker swarm 集群节点出现问题,造成除博客之外的站点出现访问异常,由此给您带来很大的麻烦,请您谅解. 故障开始时出现有时访问正常有时访问出 ...
- Rabbitmq关于集群节点功能的读书笔记
消息和队列可以指定是否持久化,如果指定持久化则会保存到硬盘上 ,不然只在内存里 普通集群模式下持久化的队列不能重建了 内存节点和磁盘节点的区别就是将元数据放在了内存还是硬盘,仅此而已,当在集群中声明队 ...
- Quartz的集群模式和单机模式共存-让一个非集群的Quartz与集群节点并行着运行
假如你让一个非集群的 Quartz 应用与集群节点并行着运行,设法使用 JobInitializationPlugin和 RAMJobStore Quartz支持可选节点执行jobquartz集群,会 ...
- 删除RAC集群节点
删除GRID集群节点:参考oracle database 11g RAC手册(第二版) 目前GRID集群中节点信息:[grid@node1 ~]$ olsnodesnode1node2node3nod ...
- 集群节点Elasticsearch升级
集群节点Elasticsearch升级 操作流程 1.首先执行Elasticsearch-1.2.2集群的索引数据备份 2.关闭elasticsearch-1.2.2集群的recovery.compr ...
随机推荐
- 简介 jCanvas:当 jQuery遇上HTML5 Canvas
https://github.com/caleb531/jcanvas HTML5 可以直接在你的网页中使用 <canvas> 元素及其相关的 JavaScript API绘制的图形. 在 ...
- C#下没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))
C#下没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG)) 原因:没有原生支持64位,而是以32位兼容方式运行 解决办法:在项目属性里设置“生成” ...
- listener does not currently know of SID项目部署报数据库错
百度以后是数据库配置错误啊,但是我觉得就是对的呀,也去验证过了. 反正知道问题就是在databaseurl那里,但是原因是什么呢?其他地方部署都是好的呀! 集群问题啊,数据库人员采用集群方式配置数据库 ...
- csuoj 1117: 网格中的三角形
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1117 1117: 网格中的三角形 Time Limit: 3 Sec Memory Limit: ...
- WIN10 多用户登录
WIN10 多用户登录 参考下面链接 http://www.mysysadmintips.com/windows/clients/545-multiple-rdp-remote-desktop-ses ...
- 00Linux学习及角色定义
一.嵌入式Linux学习顺序 二.Linux架构 三.Linux工程师角色划分 四. 嵌入式应用工程师工作内容与所需知识点 从图 1可以知道, 嵌入式应用工程师主要从事与产品相关的嵌入式 Linux ...
- assets 加载资源文件
引用:http://abc20899.iteye.com/blog/1096620 1.获取资源的输入流 资源文件 sample.txt 位于 $PROJECT_HOME/assets/ 目录下,可以 ...
- AngularJs--angular-pagination可复用的分页指令
1.angular-pagination 是基于angular 编写的可复用分页指令 安装 克隆项目到本地: git clone https://github.com/febobo/angular-p ...
- js 中关键字 this的用法
<1> js中this 的用法? (key:函数是由调用的,四种情况标红可知) (http://www.ruanyifeng.com/blog/2010/04/using_this_k ...
- YbSoftwareFactory 代码生成插件【十四】:通过 DynamicLinq 简单实现 N-Tier 部署下的服务端数据库通用分页
YbSoftwareFactory 的 YbRapidSolution for WinForm 插件使用CSLA.NET作为业务层,CSLA.NET的一个强大的特性是支持 N-Tiers 部署.只需非 ...