滴滴云上搭建 Gluster 分布式文件系统

Gluster 是什么

Gluster 是一个分布式文件系统,与 CephFS, HDFS 等类似。

Gluster 架构

Volume

一块磁盘在 Gluster 里叫一个 brick,多个 brick 组成一个 volume。Volume 是逻辑磁盘,有以下类型:

  • 分布式。一个 volume 的多个文件分布在多个 brick 上,一个文件只在一个 brick 上出现,如果这个磁盘坏了,那么文件数据就丢了,可靠性不高,用于扩展容量。
  • 复制。同一个文件的内容被复制到多个 brick 上,防止单个 brick 坏了文件数据丢失。
  • 分布式 + 复制。以上两者的合体。
  • 条带。同一个大文件被分为多个部分,放到不同的 brick 上,用于扩展文件的访问性能,类似于 RAID0 。
  • 分布式 + 条带。

FUSE

GlusterFS 是利用 FUSE (File System in Userspace) 实现的用户态文件系统,性能会差一点,更新迭代起来会方便。

Translators

Translators 是函数。Gluster 的请求处理过程被分为 N 个步骤,每个步骤用一个 Translator 来命名它,例如缓存、限流等功能都是通过 Translator 实现的。

Geo-Replication

跨地理区域复制。平常理解的跨机房属于 Geo-Replication 的范围。这种复制是把整个集群的数据复制一份,而不是像集群内复制那样是针对单个文件的复制。

工作原理

在服务器上安装 GlusterFS 后,每个服务器会启动一个 Glusterd 进程。创建 brick,volume 后可以把 volume 挂载到物理机某个目录上:

mount.glusterfs `<IP or hostname>`:`<volume_name>` `<mount_point>

这时,用户可以像访问本地文件系统一样访问该目录。读写该目录时,请求经过内核 VFS 层,再到 FUSE 文件系统,接着进入用户态的 Gluster 代码路径,Gluster 根据定义的一系列 Translator 对该请求处理,最后一个 Translator 是 POSIX Translator,即写到本地文件系统如 XFS 的某个文件,然后返回响应给用户。

滴滴云上搭建 Gluster

步骤 1 - 创建 DC2

创建两个相同配置的滴滴云 DC2,选择 CentOS 7.2 镜像,同时要选上一个40G 高效云盘,假设两个 DC2 的内网 IP 地址分别为 IP1,IP2。

接下来的步骤 2 到 步骤 4,需要在两台机器上都执行。

步骤 2 - 安装 Gluster Repo

以下步骤均在 root 用户下执行,使用下面的命令切换到 root 用户:

sudo su

安装 Repo:

yum install centos-release-gluster

步骤 3 - 格式化磁盘

mkfs.xfs -i size=512 /dev/vdb
mkdir -p /bricks/brick1
vi /etc/fstab

在文件末尾新增一行,内容为:

/dev/vdb /bricks/brick1 xfs defaults 1 2

挂载:

mount -a

步骤 4 - 安装 GlusterFS

yum install glusterfs-server
systemctl enable glusterd && systemctl start glusterd
systemctl enable glusterfsd && systemctl start glusterfsd

步骤 5 - 配置信任池

在 IP1 机器上执行:

gluster peer probe ip2

在 IP2 机器上执行:

gluster peer probe ip1

步骤 6 - 创建卷

在两台机器都执行:

mkdir /bricks/brick1/gv0

在 IP1 机器执行:

gluster volume create gv0 replica 2 ip1:/bricks/brick1/gv0 ip2:/bricks/brick1/gv0
gluster volume start gv0

确认 gv0 卷显示 “Started”:

gluster volume info

步骤 7 - 测试卷是否正常

在 IP1 机器执行:

mount -t glusterfs ip1:/gv0 /mnt
for i in `seq -w 1 100`; do cp -rp /var/log/messages /mnt/copy-test-$i; done

运行下列命令,你应该可以看到 101,100 个文件加一个标题行:

ls -lA /mnt | wc -l

在两台机器分别执行:

ls -lA /bricks/brick1/gv0

你应该看到 100 个文件,并且两台机器上对应的文件的内容是一样的,这就表明两台机器上的卷完全是复制关系,符合预期。

参考链接

猜你喜欢

转载自blog.csdn.net/java060515/article/details/86300170
今日推荐