GlusterFS分布式存储案例
TsengYia@ http://tsengyia.blog.chinaunix.net
一、基本概念
Glusterfs是一个开源分布式文件系统,具有强大的横向扩展能力,可支持数PB存储容量和数千客户端,通过Infiniband RDMA 或Tcp/Ip 方式将许多廉价的x86 主机,通过网络互联成一个并行的网络文件系统。具有可扩展性、高性能、高可用性等特点。
官方网站:
存储类型:DAS、NAS、SAN
常见的网络存储:NFS、Samba、iSCSI等
常见的分布式存储:GlusterFS、Ceph、FastDFS
GlusterFS特性:
无中心节点、可扩展性强、硬件兼容性强、高可用。
GlusterFS概念:
Node(节点)、Trusted Storage Pool(可信存储池)、Brick(块)、Volume(卷)
GlusterFS 存储卷的主要模式说明
1. 分布模式,既DHT, 默认为此模式
将文件以hash算法随机分布到 一台服务器节点中存储。
# gluster volume create test-volume server1:/exp1 server2:/exp2
2. 复制模式,既AFR, 创建volume 时需指定 replica x 数量
存储时将文件复制到x个节点中(类似raid 1)。
# gluster volume create test-volume replica 2 transport tcp server1:/exp1 server2:/exp2
3. 分布式复制模式(组合型), 最少需要4块Brick才能创建
创建volume 时 replica 2 server = 4 个节点,是DHT 与 AFR 的组合型。
# gluster volume create test-volume replica 2 transport tcp server1:/exp1 server1:/exp2 server2:/exp3 server2:/exp4
4. 离散模式(组合型), 最少需要4块Brick才能创建
通过条带式读写提高访问速度,支持提供冗余块(避免块故障)。
创建volume 时 disperse 3 redundancy 1个节点,离散块必须大于2、冗余块可选。
# gluster volume create 名称 disperse 4 redundancy 2 server{1..6}:/brick3
二、实验拓扑
准备4台虚拟机,通过NAT模式将虚拟机接入互联网。
存储服务器组:
node1(192.168.10.10/24),默认网关192.168.10.2,DNS服务器192.168.10.2
node2(192.168.10.20/24),默认网关192.168.10.2,DNS服务器192.168.10.2
node3(192.168.10.30/24),默认网关192.168.10.2,DNS服务器192.168.10.2
存储客户机:
svr100(192.168.10.100),默认网关192.168.10.2,DNS服务器192.168.10.2
三、系统环境+软件仓库
1. 若使用CentOS7.6.1810本地光盘YUM源
# yum repolist
源标识 源名称 状态
centos-gluster6/7/x86_64 CentOS-7 - Gluster 6 104
repo_cos7dvd added from: file:///repo/cos7dvd 4,021
repolist: 4,125
2. 或者,若使用CentOS7.6.1810官方默认YUM源
# yum -y install centos-release-gluster6 //在线安装gluster6软件源
# yum repolist
源标识 源名称 状态
base/7/x86_64 CentOS-7 - Base 10,019
centos-gluster6/7/x86_64 CentOS-7 - Gluster 6 104
extras/7/x86_64 CentOS-7 – Extras 419
updates/7/x86_64 CentOS-7 – Updates 2,231
repolist: 12,773
四、配置存储服务器组(node1、node2、node3操作相同)
1. 配置快速域名解析
# vim /etc/hosts
192.168.10.10 node1
192.168.10.20 node2
192.168.10.30 node3
192.168.10.100 svr100
2. 关闭防火墙、停用SELinux
# systemctl disable firewalld //禁止防火墙服务开机自启
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
# systemctl stop firewalld //禁止防火墙服务开机自启
# vim /etc/selinux/config //设置SELinux状态为宽松模式
SELINUX=permissive
# setenforce 1 //立即设为宽松模式
3. 安装glusterfs-server软件包
# yum -y install /root/glusterfs-server-6/*.rpm //离线安装glusterfs-server服务端包
或者
# yum -y install glusterfs-server //在线安装glusterfs-server服务端包
# systemctl enable glusterd --now //设开机自启,并立即启动服务
4. 准备后端块设备及brick目录
可以直接使用磁盘块设备或者LV逻辑卷做brick,推荐使用LV逻辑卷。
为每个节点添加一块20G的新磁盘,配置为卷组,划分2个逻辑卷lv01、lv02,挂载到/brick1、/brick2。
# vgcreate myvg /dev/sdb //创建卷组
# lvcreate -n lv01 -L 2G myvg //创建逻辑卷
# lvcreate -n lv02 -L 2G myvg
# mkfs.xfs /dev/myvg/lv01 //格式化
# mkfs.xfs /dev/myvg/lv02
# mkdir -p /brick1 /brick2 //挂载brick设备
# vim /etc/fstab
.. .
/dev/mapper/myvg-lv01 /brick1 xfs defaults 0 0
/dev/mapper/myvg-lv02 /brick2 xfs defaults 0 0
# mount -a
五、配置共享卷(在node1、node2、node3其中任一个节点操作即可)
1. 创建可信存储池
[root@node1 ~]# gluster peer probe node2 //自动探测node2
peer probe: success.
[root@node1 ~]# gluster peer probe node3 //自动探测node3
peer probe: success.
[root@node1 ~]# gluster peer status //查看节点状态
Number of Peers: 2
Hostname: node2
Uuid: 28ca0c13-1d37-4b1b-951d-aad45f9b6e16
State: Peer in Cluster (Connected)
Hostname: node3
Uuid: 541b4a51-6661-4424-9046-c058388144e7
State: Peer in Cluster (Connected)
2. 配置分布式共享卷vdisk1
创建卷:
[root@node1 ~]# gluster volume create vdisk1 node{1..3}:/brick1 force
volume create: vdisk1: success: please start the volume to access data
注意:如果节点Brick不是挂载点而是子目录,创建卷时不用添加 force 参数。
查看卷信息:
[root@node1 ~]# gluster volume info vdisk1
Volume Name: vdisk1
Type: Distribute //类型为分布卷
Volume ID: c4340b80-d1f8-41a1-af52-3088c8bf2f14
Status: Started
Snapshot Count: 0
Number of Bricks: 3
Transport-type: tcp
Bricks:
Brick1: node1:/brick1
Brick2: node2:/brick1
Brick3: node3:/brick1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
启动卷:
[root@node1 ~]# gluster volume start vdisk1
volume start: vdisk1: success
3. 配置复制式共享卷vdisk2
创建卷:
[root@node1 ~]# gluster volume create vdisk2 replica 3 node{1..3}:/brick2 force
volume create: vdisk2: success: please start the volume to access data
注意:如果节点Brick不是挂载点而是子目录,创建卷时不用添加 force 参数。
查看卷信息:
[root@node1 ~]# gluster volume info vdisk2
Volume Name: vdisk2
Type: Replicate
Volume ID: 9eddf7b0-5c69-4896-88fd-57846f5fa524
Status: Created
Snapshot Count: 0
Number of Bricks: 1 x 3 = 3
Transport-type: tcp
Bricks:
Brick1: node1:/brick2
Brick2: node2:/brick2
Brick3: node3:/brick2
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
启动卷:
[root@node1 ~]# gluster volume start vdisk2
volume start: vdisk2: success
4. 其他备用操作
停止卷:
# gluster volume stop vdisk2
删除卷:
# gluster volume delete vdisk2
将某个存储节点主机从信任池中删除:
# gluster peer detach node2
六、配置存储客户机(svr100)
1. 安装glusterfs-fuse软件包
[root@svr100 ~]# yum -y install /root/glusterfs-fuse-6/*.rpm //离线安装客户端包
或者
[root@svr100 ~]# yum -y install glusterfs-fuse //在线安装客户端包
2. 挂载分布式共享卷
[root@svr100 ~]# mkdir /mnt/{vdisk1,vdisk2} //创建挂载点
[root@svr100 ~]# vim /etc/fstab //添加开机挂载设置
node1:/vdisk1 /mnt/vdisk1 glusterfs defaults,_netdev 0 0
node1:/vdisk2 /mnt/vdisk2 glusterfs defaults,_netdev 0 0
[root@svr100 ~]# mount -a //挂载
[root@svr100 ~]# df -hT /mnt/vdisk* //检查挂载结果
文件系统 类型 容量 已用 可用 已用% 挂载点
node1:/vdisk1 fuse.glusterfs 6.0G 159M 5.9G 3% /mnt/vdisk1
node1:/vdisk2 fuse.glusterfs 2.0G 53M 2.0G 3% /mnt/vdisk2
3. 文件存储测试(分布模式)
在svr100上向挂载点/mnt/vdisk1写入大量文件:
[root@node1 ~]# du -sh /boot //查看测试数据大小
134M /boot
[root@svr100 ~]# cp -rf /boot/* /mnt/vdisk1/
[root@svr100 ~]#
在每个存储节点检查brick目录下存储的文件数据:
[root@node1 ~]# du -sh /brick1/ //查看存入节点1的数据量
80M /brick1/
[root@node2 ~]# du -sh /brick1/ //查看存入节点2的数据量
51M /brick1/
[root@node3 ~]# du -sh /brick1/ //查看存入节点3的数据量
3.5M /brick1/
4. 文件存储测试(复制模式)
在svr100上向挂载点/mnt/vdisk1写入1个文件:
[root@svr100 ~]# echo AAAA > /mnt/vdisk2/rep.txt
[root@svr100 ~]# ls /mnt/vdisk2/rep.txt
/mnt/vdisk2/rep.txt
在每个存储节点检查brick目录下存储的文件数据:
[root@node1 ~]# ls /brick2/ //在节点1上有这个文件
rep.txt
[root@node2 ~]# ls /brick2/ //在节点2上也有这个文件
rep.txt
[root@node3 ~]# ls /brick2/ //在节点3上也有这个文件
rep.txt
阅读(3499) | 评论(0) | 转发(0) |