本文共 4684 字,大约阅读时间需要 15 分钟。
之前一个偶然的机会,老师让学习GlusterFS,便简单学习了一遍,搭建了一个简单的集群环境,在这里简单记录下来。 分区:http://www.duyumi.net/301.html 系统环境:centos6.4 glusterfs3.4.2 三台虚拟机,两台作为集群节点,一台作为客户端节点,两台集群节点分配两块硬盘,一块装系统,一块用于glusterfs的存储磁盘。客户端节点一块磁盘即可。 1.下载地址:http://download.gluster.org/pub/ 下载RPM包,运行 rpm -ivh glusterfs-*.rpm 下载tar压缩包,解压后进行编译:(编译过程中会出现一些依赖关系错误,缺少什么就安装什么即可) 节点一:192.168.30.159 server1 节点二:192.168.30.160 server2 然后设置DNS:/etc/resolve.conf 关闭防火墙:service iptables stop; chkconfig iptables off。 /etc/selinux/config: SELINUX=disabled 设置ip:/etc/sysconfig/network-scripts/ 2.磁盘配置,选用一块20g大小的磁盘(大小不定): (/dev/sda 为系统盘,/dev/sdb为将使用的磁盘。) [root@server1 ~]# fdisk /dev/sdb WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): Value out of range. Partition number (1-4): 1 First cylinder (1-2610, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): Using default value 2610 Command (m for help): w 格式化分区: mkfs.ext4 -L /NODE1 /dev/sdb1 (节点一:NODE1 节点二:NODE2) 挂载新磁盘:mount -L /NODE1 /NODE1 (使用label来挂载) LABEL=/NODE2 /NODE2 ext4 defaults 0 0 自动挂载:mount -a 添加集群(任一节点都可添加其他节点到集群中),选择server1作为当前集群节点: gluster peer probe server2 gluster peer detach server2 三。卷操作(gluster的文件系统)任一节点上操作都行: 复合卷:哈希+复制 哈希+条带 复制+条带 哈希+复制+条带 创建卷时先确定:卷类型,创建卷的brick列表,网络类型 gluster volume create help 查看参数:(缺省状态默认创建哈希卷,网络类型为TCP) (1)创建哈希卷dht1(两节点上分别创建一个brick): gluster volume create dht1 transport tcp server1:/NODE1/dht_brick1(brick名) server2:/NODE2/dht_brick2 gluster volume start dht1 gluster volume status dht1 (2)创建复制卷afr1:(两个brick同时生成相同的文件) gluster volume create afr1 replica 2 server1:/NODE1/afr_brick1 server2:/NODE2/afr_brick2 gluster volume start afr1: gluster volume create stp1 stripe 2 server1:/NODE1/stp_brick1 server2:/NODE2 /stp_brick2 (4)创建复合卷(哈希+复制)dht_afr_1(两对brick分别存在于两个节点,每对brick是复制卷,一一组成复制关系): gluster volume create dht_afr_1 replica 2 server1:/NODE1/dht_afr_brick1 server2:/NODE2/dht_afr_brick1 server1:/NODE1/dht_afr_brick2 server2:/NODE2/dht_afr_brick2 (Brick1和Brick2组成复制关系,Brcik3和Brick4组成复制关系) gluster volume create dht_stp_1 stripe 2 server1:/NODE1/dht_stp_brick1 server2:/NODE2/dht_stp_brick1 server1:/NODE1/dht_stp_brick2 server2:/NODE2/dht_stp_brick2 (Brick1和Brick2组成一对条带关系,Brick3和Brick4组成一对条带关系) (客户端所安装的gluster与集群节点有所不同,可以同样源码安装所有的glusterfs软件,也可以选择单纯针对客户端的软件): 然后设置DNS:/etc/resolve.conf 关闭防火墙:service iptables stop; chkconfig iptables off。 /etc/selinux/config: SELINUX=disabled 为了挂载卷,先创建相应卷的挂载目录/mnt/dht1 /mnt/afr1 /mnt/stp1 /mnt/dht_afr_1: mkdir /mnt/dht1 /mnt/afr1 /mnt/stp1 /mnt/dht_afr_1 然后挂载目录(这里选择挂载到server1的卷上,也可选择server2): mount -t glusterfs(挂载卷类型) server1:/dht1 /mnt/dht1 mount -t glusterfs server2:/afr1 /mnt/afr1 mount -t glusterfs server1:/dht_afr_1 /mnt/dht_afr_1 mount -t glusterfs server2:/stp1 /mnt/stp1 在/mnt/dht1中创建两个文件hello和test,会以哈希的算法分配到server1和server2上: 创建好后可以在server1和server2查看卷: 可以看到刚好每个brick分配到一个文件,即使删掉文件或者修改文件内容,同时还是存在于之前分配到的brick上。哈席卷即以文件为分配单位,每一个文件随机分配到某一个brick上,这种卷容量和性能最好,可以把所有的容量利用起来,但如果一个brick down掉后,这一brick中的文件就不能被访问了,不具有高可用性的功能。 如果在客户端上创建目录,两个brick都会有目录,但是目录中的文件还是按照哈希算法随机分配到各brick上: 在客户端的复制卷的目录中创建一个文件hello和目录demo(会在两个节点的brick中都生成相同的文件和目录): 可以看出两个brick形成复制关系,这样一个brick down掉后,另一个brick中的文件还存在,还可访问,如果某一节点的文件丢失或者被修改,可以通过设置恢复,但是容量会只是哈希卷的一半: (3)访问条带卷(每个节点中生成的目录空间和目录是相同的,但是文件中的内容是不一样的,会分片存在于不同的brick,每一128K的文件内容分片存在于不同的brick): 会发现server1和server2的brick中生成相同的文件test,但是server1中有完整的文件内容,server2中为空文件,因为创建的文件小于128K,所以分片之后,内容都存到server1中,server2中没有内容。如果大于128K,分成无数个大小为128K的片,第一片存到第一个节点,第二片存到第二个节点,如此分布到所有的节点上。 在客户端创建文件 hello, test, world, 因为server1上的brick1和server2上的brick1以及brick2和brick2是复制对,所以他们存到他们当中的文件相同,而每个节点中的两个brick是哈希关系,所以文件随机分配他们当中。即两个哈希节点分配了两个哈希,然后哈希节点内部是复制关系。 转载地址:http://ymmws.baihongyu.com/