DRBD使用代标识GI tuple来肯定复制数据的“代”,经过GI tuple,DRBD能够肯定两个节点是否是属于同一集群的事实(而不是意外链接的两个节点),肯定从新同步时同步的方向(若是必要的话) ,肯定是彻底从新同步或者是部分从新同步是否知足需求以及确认是否发生了裂脑。所以,GI的使用在DRBD的算法中是很是重要的。算法
GI元组(GI tuple)由一个CurrentUUID、一个BitmapUUID和两个HistoryUUID组成,每一个新的数据生成的标识都由一个8字节的、全局惟一的标识符(UUID)标志。以下图所示: 网络
通常来讲,会有以下三种状况下,DRBD会产生一个新的GI数据代:.net
注意,只要资源处于链接状态,且两个节点的磁盘状态为UpToDate,那么目前两个节点上的GI元组就是相同的。资源
(1) 新配置的资源 get
特征:两个节点上的currentUUID为空 同步
一个新配置的资源,没有进行完整设备初始同步。 it
必须手动启动。 io
(2) 初始节点创建网络链接集群
特征:本地节点有currentUUID,对等节点currentUUID为空。后台
当节点间创建链接后,两节点交换GI tuple表示状态。
这是一个新配置的资源
刚启动初始设备彻底同步的正常状况
此时,本地节点被选中做为初始同步源
DRBD设置磁盘上的同步位图(这意味着它进行整个设备同步)的全部位。并开始做为一个同步源进行同步。
(3) 本地节点Node1为Primary,Node2为Secondary时,Secondary节点故障
特征:当前节点的BitmapUUID与对等节点的CurrentUUID一致,且对等节点的的BitmapUUID为空。
当前节点为主节点,对等节点为次节点
次节点发生故障
这意味着在此期间对等节点历来没有升级为Primary,并在相同的数据生成的基础上都单独工做。
如今DRBD正常启动后,本地成为同步源节点,后台从新同步。
(4)两个节点共有一个祖先UUID,且对等节点有最新的数据
特征:当前节点的CurrentUUID与对等节点的HistoryUUID之一相同
两个节点共有一个祖先UUID
对等节点有最新的数据,可是保存在对等节点Bitmap中的数据是过期和不能被使用的。
此时,一个正常的同步是不够的。
须要本地节点做为同步目标,DRBD标识整个设备out-of-syn,并初始化所有进行从新同步
(5)裂脑状况1
特征:本地节点的CurrentUUID 和对等节点的CurrentUUID不一样,而两节点BitmapUUID的匹配
这就是裂脑,split-brain
此时前一个数据代是相同的父代。
能够调用裂脑自动恢复策略(若是有配置),不然,DRBD断开链接,并等待人工脑裂进行处理。
(6)裂脑状况2
特征:两节点的CurrentUUID 和BitmapUUID都不匹配。
这也裂脑且不是相同的父代(ancestor generations)
此时,即便配置自动恢复策略,也没有用。
DRBD将断开链接,并等待人工脑裂进行处理。
(7) 集群中两个彼此之间并不认识节点
特征:两个GI元组没有一个匹配的UUID
这是DRBD意外链接集群中两个彼此之间并不认识节点。DRBD仅记录一个无关数据的警告log,而后断开链接。