实验环境
- 10Gb网络环境
- gluster1 192.168.100.155 三块磁盘
- gluster2 192.168.100.156 三块磁盘
- gluster2 192.168.100.157 三块磁盘
- gluster2 192.168.100.158 三块磁盘
安装配置
gluster1存储节点安装如下,其它节点同样操作
# 格式化磁盘 # mkfs.ext4 -T largefile /dev/sdb # 超过2T的磁盘需要加入largefile,简称快格 mkfs.ext4 -T largefile /dev/sdc # 挂载磁盘 # mkdir -p /glusterfs/disk{1,2}/ #创建磁盘挂载目录 vim /etc/fstab # 添加如下内容 /dev/sdb /glusterfs/disk1 ext4 defaults 0 2 /dev/sdc /glusterfs/disk2 ext4 defaults 0 2 mount -a # 根据/etc/fstab挂载所有磁盘 mkdir -p /glusterfs/disk{1,2}/data #挂载完毕后,创建data文件夹 # hosts文件 # vim /etc/hosts # 添加如下内容 192.168.1.155 gluster1 192.168.1.156 gluster2 192.168.1.157 gluster3 192.168.1.158 gluster4 # ntp服务 # yum -y install ntp service ntpd start chkconfig ntpd on # glusterfs server # wget -P /etc/yum.repos.d http://download.gluster.org/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-epel.repo yum -y install glusterfs-server service glusterd start chkconfig glusterd on **** gluster #直接敲gluster,然后按Enter会进入gluster shell环境,就跟bash shell一样,有命令提示功能 gluster peer probe gluster2 # probe other servers gluster peer probe gluster3 gluster peer probe gluster4 gluster peer status #查看gluster peer状态 #创建一个名称为openstack的volume gluster volume create openstack stripe 4 replica 2 transport tcp gluster1:/glusterfs/disk1/data gluster1:/glusterfs/disk2/data gluster2:/glusterfs/disk1/data gluster2:/glusterfs/disk2/data gluster3:/glusterfs/disk1/data gluster3:/glusterfs/disk2/data gluster4:/glusterfs/disk1/data gluster4:/glusterfs/disk2/data #stripe:相当于raid0 #replica:相当于raid1 #bricks = stripe * replica gluster volume start openstack gluster volume info # glusterfs client # wget -P /etc/yum.repos.d http://download.gluster.org/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-epel.repo yum -y install glusterfs glusterfs-fuse mount -t glusterfs gluster1:/openstack /mnt #挂载volume #开机自动挂载glusterfs卷 cat /etc/fstab gluster1:/openstack /mnt glusterfs defaults,_netdev 0 0 # _netdev:文件系统位于需要网络连接的设备上(系统网络启动时,文件系统才被挂载)
Glusterfs卷类型
Glusterfs支持五种Volume,即Distribute卷、Stripe卷、Replica卷、Distribute stripe卷和Distribute replica卷,这五种卷可以满足不同应用对高性能、高可用的需求。
(1)distribute volume:分布式卷,文件通过hash算法分布到brick server上,这种卷是glusterfs的基础和最大特点;
(2)stripe volume:条带卷,类似RAID0,条带数=brick server数量,文件分成数据块以Round Robin方式分布到brick server上,并发粒度是数据块,大文件性能高;
(3)replica volume:镜像卷,类似RAID1,镜像数=brick server数量,所以brick server上文件数据相同,构成n-way镜像,可用性高;
(4)distribute stripe volume:分布式条带卷,brick server数量是条带数的倍数,兼具distribute和stripe卷的特点;
(5)distribute replica volume:分布式镜像卷,brick server数量是镜像数的倍数,兼具distribute和replica卷的特点;
GlusterFS specifcation in QEMU
gluster[+transport]://[server[:port]]/volname/image[?socket=...] gluster is the protocol. Examples: gluster://1.2.3.4/testvol/a.img gluster+tcp://1.2.3.4/testvol/a.img gluster+tcp://1.2.3.4:24007/testvol/dir/a.img gluster+tcp://[1:2:3:4:5:6:7:8]/testvol/dir/a.img gluster+tcp://[1:2:3:4:5:6:7:8]:24007/testvol/dir/a.img gluster+tcp://server.domain.com:24007/testvol/dir/a.img gluster+unix:///testvol/dir/a.img?socket=/tmp/glusterd.socket gluster+rdma://1.2.3.4:24007/testvol/a.img
Glusterfs集成flashcache
Flashcache是Facebook技术团队开发的一个内核模块,通过在文件系统(VFS)和设备驱动之间新增一次缓存层,可以用SSD作为介质的缓存,通过将传统硬盘上的热门数据缓存到SSD上,加速服务器磁盘读写性能。
#准备编译环境 flashcache是ko文件,需要在当前版本的内核编译出来的模块才能使用。 如果安装的目标机器内核版本跟编译机器的内核版本一致,那么如下操作即可: yum install -y kernel-devel #下载flashcache tar包 wget --no-check-certificate -O flashcache.tar.gz https://github.com/facebook/flashcache/tarball/master #解压 tar xf flashcache.tar.gz #编译安装 cd facebook-flashcache-d359499/ make KERNEL_TREE='/usr/src/kernels/2.6.32-431.20.3.el6.x86_64/' install #编译后的产物拷贝到目标机器 scp src/{flashcache.ko,utils/*} 192.168.1.191:/root/ #到目标机器上将相应文件拷贝到相应目录 mkdir /lib/modules/2.6.32-431.20.3.el6.x86_64/extra/flashcache/ mv flashcache.ko /lib/modules/2.6.32-431.el6.x86_64/extra/flashcache/ mv utils/* /sbin/ depmod -a #加载模块 modprobe flashcache #创建flashcache盘映射 flashcache_create -p back cachedev /dev/vdc /dev/vdb 使用flashcache_create命令来创建映射,需要如下参数: -p back|thru|around 模式writeback,writethrough,writearound cachedev 生成lvm映射的盘名 ssd_devname SSD盘盘符(不需要格式化) disk_devname 数据盘盘符 #挂载 mount /dev/mapper/cachedev /glusterfs/disk1/ #重新加载flashcache盘映射 系统重启的时候,需要对flashcache重新加载,使用命令flashcache_load来达到目的,执行完load后再进行挂载。 flashcache_load /dev/vdc #删除flashcache盘映射 使用命令flashcache_destroy来对flashcache映射进行删除操作,删除后mapper映射仍然存在,需要对其进行remove操作: flashcache_destroy /dev/vdb dmsetup remove /dev/mapper/flashcache #flashcache内核参数调优 vim /etc/sysctl.conf dev.flashcache.vdc+vdb.skip_seq_thresh_kb = 1024 #超过1M的顺序写直接落到磁盘上
Glusterfs 运维常用命令
1、删除卷 gluster volume stop img gluster volume delete img 2、将机器移出集群 gluster peer detach 172.28.26.102 只允许172.28.0.0的网络访问glusterfs gluster volume set img auth.allow 172.28.26.* 3、加入新的机器并添加到卷里(由于副本数设置为2,至少要添加2(4、6、8..)台机器) gluster peer probe 172.28.26.105 gluster peer probe 172.28.26.106 gluster volume add-brick img 172.28.26.105:/data/gluster 172.28.26.106:/data/gluster #卷扩容后,需要执行rebalance a、执行rebalance前 getfattr -n trusted.glusterfs.pathinfo nova/ # 查看文件系统的扩展属性,getfattr依赖attr rpm包 file: nova/ trusted.glusterfs.pathinfo="((<DISTRIBUTE:openstack-dht> (<REPLICATE:openstack-replicate-0> <POSIX(/mnt/gluster):gluster-1:/mnt/gluster/nova> <POSIX(/mnt/gluster):gluster-2:/mnt/gluster/nova>) (<REPLICATE:openstack-replicate-1> <POSIX(/mnt/gluster):compute-2:/mnt/gluster/nova> <POSIX(/mnt/gluster):compute-1:/mnt/gluster/nova>)) (openstack-dht-layout (openstack-replicate-0 0 4294967295) (openstack-replicate-1 0 0)))" # (openstack-replicate-0 0 4294967295) hash值 b、执行rebalance后 gluster volume rebalance openstack fix-layout start # fix-layout不搬迁数据 volume rebalance: openstack: success: Starting rebalance on volume openstack has been successful. ID: a7fc8c7f-a3e2-4783-b59e-3051327e52ec getfattr -n trusted.glusterfs.pathinfo nova/ # 再次查看文件系统的扩展属性 file: nova/ trusted.glusterfs.pathinfo="((<DISTRIBUTE:openstack-dht> (<REPLICATE:openstack-replicate-0> <POSIX(/mnt/gluster):gluster-1:/mnt/gluster/nova> <POSIX(/mnt/gluster):gluster-2:/mnt/gluster/nova>) (<REPLICATE:openstack-replicate-1> <POSIX(/mnt/gluster):compute-2:/mnt/gluster/nova> <POSIX(/mnt/gluster):compute-1:/mnt/gluster/nova>)) (openstack-dht-layout (openstack-replicate-0 0 2147483646) (openstack-replicate-1 2147483647 4294967295)))" # hash值重新分布了 4、收缩卷 #收缩卷前gluster需要先移动数据到其他位置 gluster volume remove-brick img 172.28.26.101:/data/gluster/img 172.28.26.102:/data/gluster/img start #查看迁移状态 gluster volume remove-brick img 172.28.26.101:/data/gluster/img 172.28.26.102:/data/gluster/img status #迁移完成后提交 gluster volume remove-brick img 172.28.26.101:/data/gluster/img 172.28.26.102:/data/gluster/img commit 迁移卷 # 将172.28.26.101的数据迁移到,先将172.28.26.107加入集群 gluster peer probe 172.28.26.107 gluster volume replace-brick img 172.28.26.101:/data/gluster/img 172.28.26.107:/data/gluster/img start # 查看迁移状态 gluster volume replace-brick img 172.28.26.101:/data/gluster/img 172.28.26.107:/data/gluster/img status # 数据迁移完毕后提交 gluster volume replace-brick img 172.28.26.101:/data/gluster/img 172.28.26.107:/data/gluster/img commit # 如果机器172.28.26.101出现故障已经不能运行,执行强制提交然后要求gluster马上执行一次同步 gluster volume replace-brick img 172.28.26.101:/data/gluster/img 172.28.26.102:/data/gluster/img commit -force gluster volume heal imgs full
Glusterfs内核参数调优
vm.dirty_background_ratio = 5 # 5%的意思,根据实际内存大小来定,数据从内存flush到磁盘上, vm.dirty_ratio = 20 vm.dirty_writeback_centisecs = 100 # 100%秒,数据flush到磁盘上 vm.dirty_expire_centisecs = 3000
Glusterfs TroubleShooting
1、错误: GlusterFS: {path} or a prefix of it is already part of a volume 解决方法: setfattr -x trusted.glusterfs.volume-id $brick_path setfattr -x trusted.gfid $brick_path rm -rf $brick_path/.glusterfs 2、错误:glusterd服务起不来 解决方法: less /var/log/glusterfs/etc-glusterfs-glusterd.vol.log # 查看这个日志文件,一般都是volume配置文件出错 cd /var/lib/glusterd/vols rm -rf openstack/ ssd/ service glusterd restart
Glusterfs小知识
1、glusterfs集群中的任意一个节点都可以拿到所有volume的配置文件,不一定是brick的volume的节点 2、挂载glusterfs volume的时候,可以通过管理网挂载,只要这个ip可以到达glusterfs节点就行,它就可以拿到 volume配置;glusterfs集群数据流量还是走存储网。 3、glusterfs: 客户端进程名 glusterfsd: 服务端进程名 glusterd: volume管理进程、I/O调度进程 /var/log/glusterfs/[volume挂在点名字].log: glusterfs客户端log
参考链接
刘爱贵glusterfs分布式文件系统研究
flashcache编译安装
QEMU-GlusterFS native integration