<div style="background-color:#FFFFFF;font-family:微软雅黑;font-size:14px;line-height:21px;white-space:normal;">
<div style="background-color:inherit;">
<span style="font-family:微软雅黑;font-size:14px;line-height:21px;white-space:normal;background-color:#FFFFFF;">基本的术语
<div>
Brick:最基本的存储单元,通常是一个文件夹,是存储池中一个导出的文件夹。
</div>
<div>
Cluster: 一些连接起来的电脑,共同的工作就向一台电脑。
</div>
<div>
分布式文件系统:文件系统允许多个客户端通过网络并发的访问。
</div>
<div>
FUSE: 用户控件文件系统,是Unix相似系统中可以动态加载的模块,允许没有特权的用户在不编辑内核代码的情况下创建他们自己的文件系统。该模块提供了与内核通信的桥接口。
</div>
<div>
glusterd: Gluster管理守护进程,该进程需要允许在所有的存储池中。
</div>
<div>
Geo-Replication: 该机制从一个服务器提供了持续、异步、增量复制服务。
</div>
<div>
MetaData: 元数据被定义为提供其他数据信息的数据。在Gluster中没有特殊的元数据,这些元数据保存在其自身的文件中。
</div>
<div>
命名空间: 通常被创建的一个抽象容器或者环境,拥有唯一标识符和符号的逻辑分组。每个Gluster卷暴露一个命令空间作为可移植的挂载点。
</div>
<div>
RRDNS: 轮询域名服务,是在多个应用附中用于分发负载的方法。
</div>
<div>
Trusted Storeage Pool: 可信的网络存储服务。
</div>
<div>
Volume: 卷是块的集合。gluster的管理操作是基于卷。
</div>
<div>
Vol文件:.vol.files是glusterfs进程产生的配置文件,在路劲/var/lib/gluster/vols/下有vol文件。
</div>
<div>
Client: 挂在这些卷的机器
</div>
<div>
Server: 实际上保存了文件系统数据的机器
</div>
<div>
复制:为了高可用性的冗余存储。
</div>
<div>
GFID:每个文件和文件夹在GlusterFs都有一个128bit的独特值与之关联,称为GFID。
</div>
<div>
<br />
</div>
<div>
卷就是块的集合,但部分的Gluster管理操作都是基于卷的。根据不同的需求Glusterfs支持多种类型的卷。有些卷主要是为了扩展存储大小,有些是为了提升性能。
</div>
<div>
<br />
</div>
<div>
分布式Glusterfs卷(<strong style="background-color:#FCFCFC;color:#404040;font-family:Lato, proxima-nova, 'Helvetica Neue', Arial, sans-serif;">Distributed Glusterfs Volume</strong>):这是默认的卷。这种类型下,文件被分布在该卷中的多个块中,因此没有冗余的数据。这种卷的模式主要是容易扩展。但是单个块的错误也可能导致所有的数据丢失。
</div>
<div>
<img src="/attachment/201506/23/20937170_1435066772K16p.jpg" width="630" height="339" alt="" style="font-family:微软雅黑;font-size:14px;line-height:21px;white-space:normal;" /><br />
</div>
<div>
创建分布式卷的基本方法:
</div>
<div>
<strong style="background-color:#FCFCFC;color:#404040;font-family:Lato, proxima-nova, 'Helvetica Neue', Arial, sans-serif;">gluster volume create NEW-VOLNAME [transport [tcp | rdma | tcp,rdma]] NEW-BRICK</strong><br />
</div>
<div>
<strong style="background-color:#FCFCFC;color:#404040;font-family:Lato, proxima-nova, 'Helvetica Neue', Arial, sans-serif;"><br style="background-color:inherit;" />
</strong>
</div>
复制型Glusterfs卷(<strong style="background-color:#FCFCFC;color:#404040;font-family:Lato, proxima-nova, 'Helvetica Neue', Arial, sans-serif;">Replicated Glusterfs Volume</strong>): 这种类型的卷中为了解决数据丢失的问题,复制所有块中的数据。但块数据复制的份数由客户端决定。这种类型的卷主要用于高可用性和数据冗余。
<div>
<img src="/attachment/201506/23/20937170_1435066773ocT5.jpg" width="641" height="354" alt="" style="font-family:微软雅黑;font-size:14px;line-height:21px;white-space:normal;" /><br />
</div>
<div>
创建复制卷的方法:
</div>
<div>
<strong style="background-color:#FCFCFC;color:#404040;font-family:Lato, proxima-nova, 'Helvetica Neue', Arial, sans-serif;">gluster volume create NEW-VOLNAME [replica COUNT] [transport [tcp | rdma | tcp,rdma]] NEW-BRICK...</strong>
</div>
<div>
<span style="color:#404040;font-family:'Lato, proxima-nova, Helvetica Neue, Arial, sans-serif';"><b><br />
</b></span>
</div>
分布式复制Glusterfs卷<b><span style="background-color:#FCFCFC;color:#404040;font-family:'Lato, proxima-nova, Helvetica Neue, Arial, sans-serif';">(Distributed Replicated Glusterfs Volume):</span></b> 在这种卷中,文件被分布和复制在一些集合的块中,块复制的次数由创建时确定,必须是复制数的倍数。同时对应的顺序也是可以指定。主要在高可用和扩展模式下使用。
<div>
<img src="/attachment/201506/23/20937170_1435066774aSg2.jpg" width="634" height="383" alt="" style="font-family:微软雅黑;font-size:14px;line-height:21px;white-space:normal;" /><br />
</div>
<div>
<br />
</div>
<div>
创建该类型卷的方式:
</div>
<div>
<strong style="background-color:#FCFCFC;color:#404040;font-family:Lato, proxima-nova, 'Helvetica Neue', Arial, sans-serif;">gluster volume create NEW-VOLNAME [replica COUNT] [transport [tcp | rdma | tcp,rdma]] NEW-BRICK...</strong>
</div>
<div>
<br />
</div>
<div>
纹理Glusterfs卷(<strong style="background-color:#FCFCFC;color:#404040;font-family:Lato, proxima-nova, 'Helvetica Neue', Arial, sans-serif;">Striped Glusterfs Volume)</strong>: 对于大文件对象存储在一个块中,若该文件反复的被许多客户端同时访问,这将导致该单块的负载很大,影响整体的性能。在纹理性卷中将大数据分成多个小段,按纹理的形式存储在多个块中,减少单个块的负载压力。同时文件的读取也会适当的加快。
</div>
<div>
<img src="/attachment/201506/23/20937170_1435066775a0gj.jpg" width="628" height="334" alt="" style="font-family:微软雅黑;font-size:14px;line-height:21px;white-space:normal;" /><br />
</div>
<div>
创建该类型卷的方式:
</div>
<b><span style="background-color:#FCFCFC;color:#404040;font-family:'Lato, proxima-nova, Helvetica Neue, Arial, sans-serif';">glustervolumecreateNEW-VOLNAME [stripeCOUNT] [transport [tcp | dma | tcp,rdma]] NEW-BRICK...</span></b>
<div>
<span style="color:#404040;font-family:'Lato, proxima-nova, Helvetica Neue, Arial, sans-serif';"><b><br />
</b></span>
</div>
分布式纹理性卷(<strong style="background-color:#FCFCFC;color:#404040;font-family:Lato, proxima-nova, 'Helvetica Neue', Arial, sans-serif;">Distributed Striped Glusterfs Volume</strong>):同样为了提高扩展性,也可以在分布式的基础上进行纹理。这种方式要求块的个数是纹理数的倍数。
<div>
<img src="/attachment/201506/23/20937170_1435066776TL36.jpg" width="629" height="378" alt="" style="font-family:微软雅黑;font-size:14px;line-height:21px;white-space:normal;" /><br />
</div>
<div>
创建给类型的卷方式:
</div>
<div>
<strong style="background-color:#FCFCFC;color:#404040;font-family:Lato, proxima-nova, 'Helvetica Neue', Arial, sans-serif;">gluster volume create NEW-VOLNAME [stripe COUNT] [transport [tcp | rdma | tcp,rdma]] NEW-BRICK...</strong><br />
<div>
<span style="color:#404040;font-family:'Lato, proxima-nova, Helvetica Neue, Arial, sans-serif';"><b><br />
</b></span>
<div>
GlusterFs是一个用户太文件系统,采用FUSE与内核的VFS交互。FUSE是一个内核模块实现了内核VFS与非特殊权限用户的交互,并提供了用户态的API。
</div>
</div>
</div>
<div>
<br />
</div>
<div>
转换器:将用户的请求转换为关于存储器请求。转换器可以修改经过的请求、拦截或阻塞请求、产生新的请求。关于转换器也存在各种各样的转换器。
</div>
<div>
<br />
</div>
<div>
GlusterFS的工作流程
</div>
<div>
当GlusterFS安装到一个服务器节点,一个gluster管理守护进程(glusterd)将被创建,该守护进程在该集群所有的参与节点中都会运行,该守护进程启动后,包含了所有存储服务节点的可信的服务池(TSP)被创建。接下来可以在对应的服务器上创建块(基础存储单元),该块作为输出目录。在TSP中的多个块可以组合成一个卷。
</div>
<div>
当卷被创建之后,glusterfsd进程将在每个参与块中运行(glusterfsd是针对输出目录,或者说针对块的)。同时也会产生对应的配置文件/var/lib/glusterd/vols/xxx。因此配置文件是与每个块关联的,其中都是关于该块的详细信息。同时客户端需要的配置文件也会被创建。此时文件系统就可以使用了。可以在客户的机器上通过挂载的方式非常简单的使用该逻辑存储。关于glusterfs的挂载方式如下所示:
</div>
<div>
mount.glusterfs `IP或者主机名`:`卷名` `挂载点`
</div>
<div>
其中的IP或主机名是可信服务池中的任何一个节点。
</div>
<div>
<br />
</div>
<div>
当客户端程序挂载了对应的文件卷,客户端的glusterfs进程将与服务器端的glusterd(守护进程)通信。服务器glusterd进程发送一个配置文件(vol)包含了所有的客户转换器和卷中每个块信息的信息到客户端,客户端使用这些信息可以直接与每个块的glusterfsd进程通信。所有的设置完成,该卷将对客户端就绪。
</div>
<div>
<br />
</div>
<div>
当客户端在挂载的文件中进行系统调用,VFS将发送请求到FUSE内核模块,该模块通过/dev/fuse依次将请求发送给客户端的GlusterFs.客户端的glsterfs进程使用配置文件中定义的转化器(由服务器端的glusterd传递)。
</div>
<div>
<br />
</div>
<div>
Gluster是一个分布式的可扩展文件系统,允许根据实际的存储消耗来添加存储。它集成了自动故障切换功能是主要的特性,所有都是通过一个没有集中元数据服务器完成。
</div>
<div>
<br />
</div>
<div>
主要的术语:
</div>
<div>
>> 可以采用任意的硬件。
</div>
<div>
>> 动态的添加
</div>
<div>
>> 自动异常切换
</div>
<div>
>> 快速使用
</div>
<div>
<br />
</div>
<div>
关于GlusterFS
</div>
<div>
需要理解GlusterFs并不是真正意义上的文件系统,只是连接以及存在的文件系统到一个大的块组中,允许分布在多台主机上的数据被数据写入或读出。XFS是推荐使用的文件系统。具有全局的命名空间。
</div>
<div>
<br />
</div>
<div>
环境搭建的注意事项:
</div>
<div>
>> 最好有DNS服务器,如果没有可以通过/etc/hosts来设置入口。
</div>
<div>
>> 安装操作系统时最好不要格式化用于Gluster的存储硬盘,将在安装gluster时使用mkfs进行特殊的设置。
</div>
<div>
>> 关闭防火墙。
</div>
<div>
<br />
</div>
<div>
推荐的配置: 64bit OS + 8G
</div>
<div>
最快速的安装方式:
</div>
<div>
>> <b>分区、格式化、加载块,所谓的块实际上就是一个文件夹。通常都是一块单独的硬盘空间,采用mkfs进行格式化,然后将硬盘挂载,并创建对应的块文件夹。并记得添加文件系统的入口在/etc/fstab。etc/fstab这个文件的所有参数,这个文件是非常重要的。这个文件是配置文件系统的体系,创建的所有分区,都必须写在这个文件里面,否则下次启动的时候分区是挂不起来的。</b>
</div>
<div>
目前设置只有一个硬盘,因此采用根目录下的一个文件夹作为块目录。
</div>
<div>
[<a href="mailto:root@localhost" style="cursor:pointer;">root@localhost</a> glusterfs]# mkdir brick
</div>
<div>
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> glusterfs]# mkdir brick
</div>
<div>
>> <b>在所有的节点中安装Gluster包,根据当前的操作系统选择合适的方式方法,可以直接使用rpm安装,并启动对应的服务glusterfsd、glusterd。</b>
</div>
<div>
[<a href="mailto:root@localhost" style="cursor:pointer;">root@localhost</a> GlusterFS_RPM]#<b><span style="color:#ff0000;"> rpm -ivh glusterfs-3.5.2-1.el6.x86_64.rpm --nodeps --force</span></b>
</div>
<div>
[<a href="mailto:root@localhost" style="cursor:pointer;">root@localhost</a> GlusterFS_RPM]# <b><span style="color:#ff0000;">rpm -ivh glusterfs-fuse-3.5.2-1.el6.x86_64.rpm --nodeps --force</span></b>
</div>
<div>
[<a href="mailto:root@localhost" style="cursor:pointer;">root@localhost</a> GlusterFS_RPM]# <b style="line-height:1.5;"><span style="background-color:#FFFFFF;color:#ff0000;">rpm -ivh glusterfs-libs-3.5.2-1.el6.x86_64.rpm --nodeps --force</span></b>
</div>
<div>
[<a href="mailto:root@localhost" style="cursor:pointer;">root@localhost</a> GlusterFS_RPM]# <b><span style="color:#ff0000;">rpm -ivh glusterfs-cli-3.5.2-1.el6.x86_64.rpm --nodeps --force</span></b>
</div>
<div>
[<a href="mailto:root@localhost" style="cursor:pointer;">root@localhost</a> GlusterFS_RPM]# <b><span style="color:#ff0000;">rpm -ivh glusterfs-api-3.5.2-1.el6.x86_64.rpm --nodeps --force</span></b>
</div>
<div>
[<a href="mailto:root@localhost" style="cursor:pointer;">root@localhost</a> GlusterFS_RPM]# <b><span style="color:#ff0000;">rpm -ivh glusterfs-server-3.5.2-1.el6.x86_64.rpm --nodeps --force</span></b>
</div>
<div>
[<a href="mailto:root@localhost" style="cursor:pointer;">root@localhost</a> GlusterFS_RPM]# gluster //查看对应的命令,至少包含如下的几个命令<br />
gluster glusterd glusterfs glusterfsd //<b><span style="color:#ff0000;">说明其中glusterd是每个节点启动一个,是glusterfs的守护进程,而glusterfsd是每个块对应一个进程,该进程负责该块的控制。glusterfs是客户端使用的进程。</span></b>
</div>
<div>
[<a href="mailto:root@localhost" style="cursor:pointer;">root@localhost</a> glusterfs]#<b><span style="color:#ff0000;"> /etc/init.d/glusterfsd start</span></b><br />
/etc/init.d/glusterd startStarting glusterfsd (via systemct[ OK ]<br />
[<a href="mailto:root@localhost" style="cursor:pointer;">root@localhost</a> glusterfs]# <span style="color:#ff0000;"><b>/etc/init.d/glusterd start</b></span><br />
Starting glusterd (via systemctl): [ OK ]
</div>
<div>
<b>>> 运行gluster对端探测命令 gluster peer probe 对端的IP或主机名</b><br />
两台设备中执行对应的探测命令
</div>
<div>
[<a href="mailto:root@localhost" style="cursor:pointer;">root@localhost</a> glusterfs]#<b> <span style="color:#ff0000;">gluster peer probe 10.45.25.206</span></b>
</div>
<div>
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> glusterfs]# <span style="color:#ff0000;"><b>gluster peer probe 10.45.25.208</b></span>
</div>
<div>
<b> >> 创建对应的逻辑卷, 这根据需要的场景进行确定卷的类型,具体参看上述的描述,通常还需要使能对应的卷。</b>
</div>
<div>
[<a href="mailto:root@localhost" style="cursor:pointer;">root@localhost</a> brick]# gluster volume create gv0 10.45.25.206:/ire_gp/gluster/glusterfs/brick 10.45.25.208:/home/test/Downloads/glusterfs/brick<br />
volume create: gv0: failed: Staging failed on 10.45.25.206. Error: The brick 10.45.25.206:/ire_gp/gluster/glusterfs/brick is is being created in the root partition. It is recommended that you don't use the system's root partition for storage backend. Or use 'force' at the end of the command if you want to override this behavior.<br />
[<a href="mailto:root@localhost" style="cursor:pointer;">root@localhost</a> brick]# <b><span style="color:#ff0000;">gluster volume create gv0 10.45.25.206:/ire_gp/gluster/glusterfs/brick 10.45.25.208:/home/test/Downloads/glusterfs/brick force</span></b><br />
<b>volume create: gv0: success: please start the volume to access data //创建成功,提示需要使能卷访问数据</b><br />
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> brick]# <b><span style="color:#ff0000;">gluster volume info gv0 //查看对应的卷信息</span></b>
</div>
<div>
<br />
Volume Name: gv0 //该卷的名<br />
Type: Distribute //卷的分布式类型<br />
Volume ID: 27a877cb-241e-4a6e-9bff-9acbc4a08a00 //卷ID<br />
Status: <b>Created //卷的状态</b><br />
Number of Bricks: 2 //该卷中存在的块文件夹中<br />
Transport-type: tcp //结点之间通信的类型为TCP<br />
Bricks: //包含的块文件夹的路劲<br />
<b><span style="color:#ff0000;">Brick1: 10.45.25.206:/ire_gp/gluster/glusterfs/brick<br />
Brick2: 10.45.25.208:/home/test/Downloads/glusterfs/brick</span></b><br />
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> brick]# <span style="color:#ff0000;"><b>gluster volume start gv0 //使能对应的卷</b></span><br />
volume start: gv0: success<br />
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> brick]# <b><span style="color:#ff0000;">gluster volume info gv0 //查看对应的卷</span></b><br />
<br />
Volume Name: gv0<br />
Type: Distribute<br />
Volume ID: 27a877cb-241e-4a6e-9bff-9acbc4a08a00<br />
Status: <span style="color:#ff0000;"><b>Started</b></span><br />
Number of Bricks: 2<br />
Transport-type: tcp<br />
Bricks:<br />
Brick1: 10.45.25.206:/ire_gp/gluster/glusterfs/brick<br />
Brick2: 10.45.25.208:/home/test/Downloads/glusterfs/brick<br />
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> brick]#
</div>
<div>
<br />
</div>
<div>
<b> >> 测试卷,将对应的卷挂载(客户端确定),进行读写文件的测试。</b>
</div>
<div>
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> brick]# <span style="color:#ff0000;"><b>mkdir /mnt/gluster //创建挂载点</b></span>
</div>
<div>
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> brick]# <b><span style="color:#ff0000;">mount -t glusterfs 10.45.25.206:gv0 /mnt/gluster //进行数据的挂载</span></b>
</div>
<div>
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> gluster]# ll<br />
total 10736<br />
drwxr-xr-x 6 cdas_gp ire_gp 4096 Jun 18 16:44 glusterfs<br />
-rwxr-xr-x 1 cdas_gp ire_gp 10987520 Jun 18 15:51 glusterfs.tgz<br />
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> gluster]# <b><span style="color:#ff0000;">cp glusterfs.tgz /mnt/gluster/ //往分布式文件系统中写数据</span></b><br />
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> gluster]# <b><span style="color:#ff0000;">cd glusterfs/brick/ //这是10.45.25.206设备上对应的块文件夹,该文件夹中并没有数据</span></b><br />
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> brick]# ll <br />
total 0<br />
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> brick]#<b><span style="color:#ff0000;"> ll /mnt/gluster/ //查看挂载点中的数据,该节点中有对应的文件,说明分布式系统已经挂载成功,实现了分布式的系统。</span></b><br />
total 10730<br />
-rwxr-xr-x 1 root root 10987520 Jun 18 18:47 glusterfs.tgz<br />
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> brick]# pwd<br />
/ire_gp/gluster/glusterfs/brick //<b style="background-color:#FFFFFF;font-family:微软雅黑;"><span style="background-color:inherit;color:#ff0000;">10.45.25.206设备上对应的块文件夹</span></b>
</div>
<div>
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> glusterfs]# cd /mnt/gluster/<br />
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> gluster]# mkdir mytest //创建文件夹<br />
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> gluster]# cd mytest/<br />
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> mytest]# ll<br />
total 0<br />
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> mytest]# vi test.txt<br />
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> mytest]# ll<br />
total 1<br />
-rw-r--r-- 1 root root 58 Jun 18 18:59 test.txt<br />
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> /]# cd /ire_gp/gluster/glusterfs/brick/<br />
.glusterfs/ mytest/ <br />
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> /]# cd /ire_gp/gluster/glusterfs/brick/<br />
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> brick]# ll <b><span style="color:#ff0000;"> //在节点10.45.25.206设备上创建的文件夹存在</span></b><br />
total 4<br />
drwxr-xr-x 2 root root 4096 Jun 18 19:01 mytest<br />
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> brick]# cd mytest/<br />
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> mytest]# ll <span style="color:#ff0000;"><b> //但是该文件夹下的文件不存在,说明文件夹在多个节点中都是存在的,但文件分布在不同的设备上</b></span><br />
total 0<br />
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> mytest]# ll<br />
</div>
<div>
<b style="background-color:#FFFFFF;font-family:微软雅黑;"><span style="background-color:inherit;color:#ff0000;"><br style="background-color:inherit;" />
</span></b>
</div>
<div>
<span style="color:#ff0000;"><b>从另一台设备上(10.45.25.208)的块文件中查看文件内容</b></span>
</div>
<div>
<span style="color:#ff0000;"><b>[<a href="mailto:root@localhost" style="background-color:#FFFFFF;cursor:pointer;font-family:微软雅黑;font-weight:normal;">root@localhost</a> mytest]# pwd<br style="background-color:#FFFFFF;color:#000000;font-family:微软雅黑;font-weight:normal;" />
/home/test/Downloads/glusterfs/brick/mytest</b></span>
</div>
<div>
[<a href="mailto:root@localhost" style="cursor:pointer;">root@localhost</a> <b style="background-color:#FFFFFF;color:#FF0000;font-family:微软雅黑;">mytest</b>]# cd ../ <b><span style="color:#ff0000;">//另一个节点的块目录</span></b><br />
[<a href="mailto:root@localhost" style="cursor:pointer;">root@localhost</a> brick]# ll <b><span style="color:#ff0000;">//该目录下存在刚才复制的数据和创建的目录</span></b><br />
total 10732<br />
-rwxr-xr-x 2 root root 10987520 Jun 18 18:47 glusterfs.tgz<br />
drwxr-xr-x 2 root root 21 Jun 18 18:59 mytest<br />
[<a href="mailto:root@localhost" style="cursor:pointer;">root@localhost</a> brick]# cd mytest/<br />
[<a href="mailto:root@localhost" style="cursor:pointer;">root@localhost</a> mytest]# ll <b><span style="color:#ff0000;">//创建的目录下存在新添加的文件</span></b><br />
total 4<br />
-rw-r--r-- 2 root root 58 Jun 18 18:59 test.txt <br />
[<a href="mailto:root@localhost" style="cursor:pointer;">root@localhost</a> mytest]# <br />
</div>
<div>
<br />
</div>
<div>
<br />
</div>
<div>
复制类型的卷测试:
</div>
<div>
在各个节点上分别创建多个块目录
</div>
<div>
[<a href="mailto:cdas_gp@drdb02" style="cursor:pointer;">cdas_gp@drdb02</a> glusterfs]$mkdir gv1_brick0<br />
[<a href="mailto:cdas_gp@drdb02" style="cursor:pointer;">cdas_gp@drdb02</a> glusterfs]$mkdir gv1_brick1<br />
[<a href="mailto:cdas_gp@drdb02" style="cursor:pointer;">cdas_gp@drdb02</a> glusterfs]$mkdir gv1_brick2<br />
[<a href="mailto:cdas_gp@drdb02" style="cursor:pointer;">cdas_gp@drdb02</a> glusterfs]$mkdir gv1_brick3
</div>
<div>
<br />
</div>
<div>
[<a href="mailto:root@localhost" style="cursor:pointer;">root@localhost</a> glusterfs]# mkdir gv1_brick0<br />
[<a href="mailto:root@localhost" style="cursor:pointer;">root@localhost</a> glusterfs]# mkdir gv1_brick1<br />
[<a href="mailto:root@localhost" style="cursor:pointer;">root@localhost</a> glusterfs]# mkdir gv1_brick2<br />
[<a href="mailto:root@localhost" style="cursor:pointer;">root@localhost</a> glusterfs]# mkdir gv1_brick3
</div>
<div>
<br />
</div>
<div>
在其中一个节点上创建对应的复制类型的卷
</div>
<div>
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> mytest]# <b><span style="color:#ff0000;">gluster volume create gv2 replica 2 10.45.25.206:/ire_gp/gluster/glusterfs/gv1_brick2 10.45.25.208:/home/test/Downloads/glusterfs/gv1_brick2 force</span></b><br />
<b>volume create: gv2: success: please start the volume to access data</b><br />
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> mytest]# <b><span style="color:#ff0000;">gluster volume info gv2</span></b><br />
<br />
Volume Name: gv2<br />
Type: <b><span style="color:#ff0000;">Replicate //复制类型的卷</span></b><br />
Volume ID: 423f734d-723a-41a6-8c76-b5b0bdb67e04<br />
Status: Created<br />
Number of Bricks: 1 x 2 = 2 <span style="color:#ff0000;">//数据复制的份数,即保存在2个块中</span><br />
Transport-type: tcp<br />
Bricks: <span style="color:#ff0000;">//块的顺序,也确定了对应的访问顺序</span><br />
Brick1: 10.45.25.206:/ire_gp/gluster/glusterfs/gv1_brick2<br />
Brick2: 10.45.25.208:/home/test/Downloads/glusterfs/gv1_brick2<br />
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> mytest]#<span style="color:#ff0000;"> <b>gluster volume start gv2</b></span><br />
volume start: gv2: success<br />
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> mytest]# <b><span style="color:#ff0000;">gluster volume info gv2</span></b><br />
<br />
Volume Name: gv2<br />
Type: Replicate<br />
Volume ID: 423f734d-723a-41a6-8c76-b5b0bdb67e04<br />
Status: <b>Started //创建成功</b><br />
Number of Bricks: 1 x 2 = 2<br />
Transport-type: tcp<br />
Bricks:<br />
Brick1: 10.45.25.206:/ire_gp/gluster/glusterfs/gv1_brick2<br />
Brick2: 10.45.25.208:/home/test/Downloads/glusterfs/gv1_brick2
</div>
<div>
<br />
</div>
<div>
挂载对应的卷
</div>
<div>
多客户端挂载
</div>
<div>
节点2中挂载该卷:
</div>
<div>
[<a href="mailto:root@localhost" style="cursor:pointer;">root@localhost</a> mnt]# <b><span style="color:#ff0000;">mount -t glusterfs 10.45.25.206:gv2 /mnt/gv2</span></b>
</div>
<div>
节点1中挂载该卷:
</div>
<div>
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> /]# <b><span style="color:#ff0000;">mount -t glusterfs 10.45.25.208:gv2 /mnt/gv2</span></b>
</div>
<div>
<br />
</div>
<div>
往挂载的文件系统中拷贝数据
</div>
<div>
在节点1中的操作
</div>
<div>
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> ire_gp]# cp glusterfs.tgz /mnt/gv2/
</div>
<div>
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> ire_gp]# cd gluster/glusterfs/gv1_brick2/<br />
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> gv1_brick2]# ll<br />
total 10736<br />
-rwxr-xr-x 2 root root 10987520 Jun 19 10:32 glusterfs.tgz //数据存在
</div>
<div>
[<a href="mailto:root@drdb02" style="background-color:#FFFFFF;cursor:pointer;font-family:微软雅黑;">root@drdb02</a> gv1_brick2]#<br />
</div>
<div>
<br />
</div>
<div>
在节点2中查看数据是否存在
</div>
<div>
[<a href="mailto:root@localhost" style="cursor:pointer;">root@localhost</a> mnt]# cd gv2<br />
[<a href="mailto:root@localhost" style="cursor:pointer;">root@localhost</a> gv2]# ll<br />
total 10730<br />
-rwxr-xr-x 1 root root 10987520 Jun 19 10:29 glusterfs.tgz //数据存在<br />
[<a href="mailto:root@localhost" style="cursor:pointer;">root@localhost</a> gv2]#
</div>
<div>
<br />
</div>
<div>
在节点2中的挂载点中创建文件夹,并在文件夹中创建文件
</div>
<div>
[<a href="mailto:root@localhost" style="cursor:pointer;">root@localhost</a> gv2]# mkdir testreplicate<br />
[<a href="mailto:root@localhost" style="cursor:pointer;">root@localhost</a> gv2]# cd testreplicate/<br />
[<a href="mailto:root@localhost" style="cursor:pointer;">root@localhost</a> testreplicate]# vi test.txt<br />
[<a href="mailto:root@localhost" style="cursor:pointer;">root@localhost</a> testreplicate]# ll<br />
total 1<br />
-rw-r--r-- 1 root root 15 Jun 19 11:01 test.txt
</div>
<div>
[<a href="mailto:root@localhost" style="background-color:#FFFFFF;cursor:pointer;font-family:微软雅黑;">root@localhost</a> testreplicate]#<br />
</div>
<div>
查看节点1中的块文件夹
</div>
<div>
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> gv1_brick2]# ll<br />
total 10740<br />
-rwxr-xr-x 2 root root 10987520 Jun 19 10:32 glusterfs.tgz<br />
drwxr-xr-x 2 root root 4096 Jun 19 11:04 testreplicate<br />
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> gv1_brick2]# cd testreplicate/<br />
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> testreplicate]# ll<br />
total 8<br />
-rw-r--r-- 2 root root 15 Jun 19 11:04 test.txt<br />
[<a href="mailto:root@drdb02" style="cursor:pointer;">root@drdb02</a> testreplicate]#
</div>
<div>
以上实现了数据的多备份存储。
</div>
<div>
<br />
</div>
<div>
虚拟机情况下的安装准备: 2台 + 1GB
</div>
<div>
>> 安装两个VM,创建两个虚拟硬盘,其中一个用于OS,另一个用于块。
</div>
<div>
>> 安装两个虚拟的网卡,通常一个也可以,但为了进行管理建议采用两个网卡。
</div>
<div>
物理机上安装准备: 2CPU+2GB + 1GBE
</div>
<div>
>> DNS和NTP设置,正常且正确工作
</div>
<div>
>> 网络,最好是10GBE或者无限带宽
</div>
<div>
>> 硬盘越多越好
</div>
<div>
<br />
</div>
<div>
安装过程中可以直接使用基本的命令完成。
</div>
<div>
<br />
</div>
<div>
遇到的问题:
</div>
<div>
glusterd: error while loading shared libraries: libpython2.6.so.1.0: cannot open shared object file: No such file or directory
</div>
<div>
>> 遇到了缺少python2.6.so.0.1的问题,需要编译安装python2.6。直接编译和安装,并将编译的so文件拷贝的/usr/lib64/
</div>
<div>
<br />
</div>
<div>
Connection failed. Please check if gluster daemon is operational.
</div>
<div>
>> 这种问题是没有启动对应的服务导致,在所有的节点中启动glusterd和glusterfsd
</div>
<div>
/etc/init.d/glusterfsd start
</div>
<div>
/etc/init.d/glusterd start
</div>
<div>
<br />
</div>
<div>
[<a href="mailto:root@localhost" style="cursor:pointer;">root@localhost</a> brick]# gluster volume create gv0 10.45.25.206:/ire_gp/gluster/glusterfs/brick 10.45.25.208:/home/test/Downloads/glusterfs/brick<br />
volume create: gv0: failed: Staging failed on 10.45.25.206. Error: The brick 10.45.25.206:/ire_gp/gluster/glusterfs/brick is is being created in the root partition. It is recommended that you don't use the system's root partition for storage backend. Or use 'force' at the end of the command if you want to override this behavior.
</div>
<div>
出现这种原因是块目录采用了与操作系统相同的根分区相同导致,根据提示在对应的语句后加上force即可。
</div>
<div>
<br />
</div>
<div>
配置防火墙
</div>
<div>
Gluster中节点间通信通常会关闭防火墙或者运行服务器之间的通信。关于防火墙的配置参考iptables
</div>
<div>
配置可信任池
</div>
<div>
选择可信池中选择一个任意一个作为主服务器。需要注意在其中一个Gluster服务器上执行的Gluster具体命令都会在其他的服务器上执行,即只需要在一台服务器上进行控制。
</div>
<div>
配置分区、格式化、加载块
</div>
<div>
fdisk /dev/sdb and create a single partition //创建分区
</div>
<div>
mkfs.xfs -i size=512 /dev/sdb1 //格式化对应的分区
</div>
mkdir -p /export/sdb1 && mount /dev/sdb1 /export/sdb1 && mkdir -p /export/sdb1/brick //挂载对应的分区
<div>
</div>
echo "/dev/sdb1 /export/sdb1 xfs defaults 0 0" >> /etc/fstab //添加挂载分区入口
<div>
设置Gluster卷
</div>
<div>
最基本的卷类型为分布式卷,这种类型的卷仅仅分布数据到卷中所有的块。因此如果写一些数据到该卷中,那么将分布在各个卷中。但这种类型的文件系统并不支持Gluster的两个最重要的特性:多拷贝数据,在某些出现错误后异常自动切换。因此通常采用复制类型的卷。
</div>
<div>
<span style="font-family:微软雅黑;font-size:14px;line-height:21px;white-space:normal;background-color:#FFFFFF;"> gluster volume create gv0 replica 2 node1.net:/export/sda1/brick node2.net:/export/sda1/brick</span><br style="background-color:#FFFFFF;font-family:微软雅黑;font-size:14px;line-height:21px;white-space:normal;" />
<div style="background-color:#FFFFFF;font-family:微软雅黑;font-size:14px;line-height:21px;white-space:normal;">
这种类型的卷是一个复制型卷,该卷中的数据会保存在至少两个块中,因此必须存在至少2个块,通常会将数据拷贝到另一个节点的块中。这种拷贝的情况就需要一个主备的问题,即在操作文件时实际访问的是那个块中的数据对象,通常是依据块的顺序确定的,具体的顺序按照gluster volume info xxx中的Bricks中的顺序确定访问顺序。
</div>
<div style="background-color:#FFFFFF;font-family:微软雅黑;font-size:14px;line-height:21px;white-space:normal;">
在创建对应的卷之后,对应的状态为Created,只有开启之后才能使用。gluster volume start gv0即可实现开启。
</div>
</div>
</span>
</div>
</div>
阅读(4796) | 评论(0) | 转发(0) |