1 理论部分

1.1 锁的作用

分布式存储的锁类似于MySQL的行锁和表锁,可防止多个客户端同时编辑对数据造成损坏,故本章解决数据写入冲突问题。

1.2 语法格式

gluster volume set <VOLNAME> locks.mandatory-locking <off / file / forced / optimal>

off - 为指定的卷禁用强制锁

file - 启用Linux内核风格的强制锁语义和位模式的帮助(没有充分测试)

forced - 为卷检查字节范围锁定每个数据编辑操作

optimal - 混合模式下在POSIX客户端可以与咨询锁共存;在类似于SMB的其他客户端,语义将仍然尊重取得强制锁。

注意:以上命令适用于含gluster-3.8及以上版本

2 实践部分

2.1 环境配置

扩展存储需要使用含Gluster 3.8及以上版本,配置参阅:http://cmdschool.blog.51cto.com/2420395/1828450

2.2 开启强制锁

gluster volume set gv0 locks.mandatory-locking optimal

2.3 检查

gluster volume info

显示如下:

Volume Name: gv0
Type: Distributed-Replicate
Volume ID: 96b06e32-deb5-487a-aa00-afd6624dcb97
Status: Started
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: DN2GlusterH01.sae.com.hk:/data/brick1/gv0
Brick2: DN2GlusterH02.sae.com.hk:/data/brick1/gv0
Brick3: DN2GlusterH03.sae.com.hk:/data/brick1/gv0
Brick4: DN2GlusterH04.sae.com.hk:/data/brick1/gv0
Options Reconfigured:
locks.mandatory-locking: optimal
performance.readdir-ahead: on
features.quota: on
features.inode-quota: on
features.quota-deem-statfs: on
cluster.entry-self-heal: on

注意:第14行表示强制锁已经开启并且模式是“optimal”

===========================================================

参阅文档

http://gluster.readthedocs.io/en/latest/Administrator%20Guide/Mandatory%20Locks/

https://github.com/gluster/glusterfs-specs/blob/master/done/GlusterFS%203.8/Mandatory%20Locks.md