VOTEDISK是用于解决脑裂(Split Brain)的问题。
Voting disk记录节点成员信息,如包含哪些节点成员、节点的添加删除信息记录,大小为20MB。
在集群中,节点间通过某种机制(心跳)了解彼此的健康状态,以确保各节点协调工作。 假设只有"心跳"出现问题, 各个节点还在正常运行, 这时,每个节点都认为其他的节点宕机了, 自己是整个集群环境中的"唯一建在者",自己应该获得整个集群的"控制权"。 在集群环境中,存储设备都是共享的, 这就意味着数据灾难, 这种情况就是"脑裂"解决这个问题的通常办法是使用投票算法(Quorum Algorithm). 它的算法机理如下:
集群中各个节点需要心跳机制来通报彼此的"健康状态",假设每收到一个节点的"通报"代表一票。对于三个节点的集群,正常运行时,每个节点都会有3票。 当结点A心跳出现故障但节点A还在运行,这时整个集群就会分裂成2个小的partition。 节点A是一个,剩下的2个是一个。 这是必须剔除一个partition才能保障集群的健康运行。对于有3个节点的集群,A 心跳出现问题后,B 和C 是一个partion,有2票,A只有1票。 按照投票算法,B 和C 组成的集群获得控制权,A 被剔除。
如果只有2个节点,投票算法就失效了。 因为每个节点上都只有1票。 这时就需要引入第三个设备: Quorum Device 通常采用的是共享磁盘,个磁盘也叫作Quorum disk。 这个Quorum Disk 也代表一票。 当2个结点的心跳出现问题时,2个节点同时去争取Quorum Disk 这一票, 最早到达的请求被最先满足。 故最先获得Quorum Disk的节点就获得2票。另一个节点就会被剔除。
常见维护:
1. 查看当前用户
$ whoamioracle
2. 查看当前VD
$ crsctl query css votedisk
0. 0 /dev/vg02/rora_vote
located 1 votedisk(s).
3. 查看CRS的状态
$ crsctl check crs
CSS appears healthy
CRS appears healthy
EVM appears healthy
4. 初始化raw分区
$ dd if=/dev/zero of=/dev/vg01/rora_vote bs=8192 count=2560
5. 切换到root用户
$ su - root
6.停止crs 强制在线追加VD
# crsctl add css votedisk /dev/vg01/rora_vote -force
Now formatting voting disk: /dev/vg01/rora_vote
successful addition of votedisk /dev/vg01/rora_vote.
7. 退出root登陆
# exit
logout
8. 再次查看当前VD
$ crsctl query css votedisk
0. 0 /dev/vg02/rora_vote
1. 0 /dev/vg01/rora_vote
located 2 votedisk(s).
9. 再次查看CRS状态
$ crsctl check crs
CSS appears healthy
CRS appears healthy
EVM appears healthy
10. 删除VD同样可以在线完成,命令如下,方式同上,也要root用户操作
crsctl delete css votedisk /dev/vg01/rora_vote -force
11. 平时备份VD,可直接dd完成
$ dd if=/dev/vg01/rora_vote of=/orabackup/rora_vote_1 bs=8192
12.恢复恢复
$ dd if=/orabackup/rora_vote_1 of=/dev/vg01/rora_vote bs=8192