前提:centos 5.8 标准系统安装,必须安装开发包和开发库 如果没有bison flex 则需要安装。 yum install bison flex 一、安装篇1. 安装python2.6.5 tar jxvf Python-2.6.5.tar.bz2 cd Python-2.6.5 ./configure --enable-shared 支持64bit make make install 将系统默认的python指向到2.6版本 #mv/usr/bin/python /usr/bin/python.bak (或者rm -rf /usr/bin/python) #ln -s/usr/local/bin/python2.6 /usr/bin/python vi /etc/ld.so.conf 添加 /usr/local/lib 执行: ldconfig -v # python -V Python 2.6.5 python 升级后,yum 不能使用,请修改如下: # vi /usr/bin/yum #!/usr/bin/python2.4 。。。 2. 安装fusetar xvzf fuse-2.8.7.tar.gz cd fuse-2.8.7 ./configure make make install fuse测试并检查 lsmod | grep fuse 假如没有, 使用命令 modprobe fuse lsmod | grep fuse echo "modprobefuse" >>/etc/rc.local 3. 安装glusterfstar xvzf glusterfs-3.5.3.tar.gz cd glusterfs-3.5.3 ./configure --prefix=/usr/local/glusterfs ###################################################### make之前更改/glusterfs-3.5.3/contrib/qemu/util/oslib-posix.c 第175行增加: #undef CONFIG_PIPE2 第1行增加: #define UTIME_OMIT ((1l << 30) - 2l) #define UTIME_NOW ((1l << 30) - 1l) 备注:centos 6.X 版本不需要执行以上操作。 ####################################################### 然后make和make install make make install 4. 添加环境变量更改文件/etc/profile export PATH=$PATH:/usr/local/glusterfs/sbin 5. 启动服务查看glusterfs的版本号: glusterfs --version glusterfs 3.5.3 built on Nov 17 2014 15:10:35 启动gluster服务:/etc/init.d/glusterdstart tail -f /usr/local/glusterfs/var/log/glusterfs/*.log #################### 二、配置篇(replica模式)1、服务器信息:测试服务器:4台ip:192.168.1.1-192.168.1.4 服务端、客户端都需要进行《一、安装篇》部署, 客户端不需要启动glusterd 服务 2、建立分区或磁盘挂在目录4台服务器都需要创建:
mkdir-p /brick1 3、挂在分区或磁盘到目录mount /dev/sda1 /brick1(所有节点执行挂载,分区或磁盘容量要尽量一致(对于replica模式的卷尤为重要,这种模式下会以容量小的分区或磁盘为准)) 加入开机启动挂载(例子):
vi /etc/fstab
......
/dev/sda1 /brick1 ext3 defaults 0 0
也可直接在本地创建目录,不过不好控制磁盘的大小
mkdir /brick1
4、修改/etc/hosts文件(可省略)加入各节点机器名与IP对应关系
test01 192.168.1.1 test02 192.168.1.2 test03 192.168.1.3 test04 192.168.1.4 在其他节点做相同操作 5、建立peer关系(192.168.1.1上操作)gluster gluster>peer probe 192.168.1.2 gluster> peer probe 192.168.1.3 gluster> peer probe 192.168.1.4 (以上操作在一台服务器上操作即可,状态将同步到其他服务器) gluster>peerprobe (ip)(后续增加节点时使用) gluster>peerdetach (ip) (后续删除节点时使用) 可以使用参数 force gluster>peer status对等体状态 NumberofPeers: 3 Hostname:192.168.1.2 Uuid:67d37243-4332-4324-b497-92cf3d4fa2c1 State:Peerin Cluster (Connected) Hostname:192.168.1.3 Uuid:0e8f17ba-c061-4537-ac3a-f625600c6663 State:Peerin Cluster (Connected) Hostname:192.168.1.4 Uuid:66149333-6235-4bcc-82ae-b2fd011794db State:Peerin Cluster (Connected) 6、建立卷(192.168.1.1上操作) gluster gluster>volume create gv0 replica 2 192.168.1.1:/brick1 192.168.1.2:/brick1 建立卷时有三种模式:Stripe(RAID0)、Replicate(RAID1)和DHT(分布式Hash),默认是DHT,后边跟的数字意思是几个为1组,此示例中为2个为一组建立replica卷,类似RAID1。 ##如果直接在/分区建立的文件夹,会提示/root 分区警告,则需要加上force gluster>volume create gv0 replica 2 10.8.9.13:/brick1 10.8.9.107:/brick1 force 7、向卷中添加brick(192.168.1.1上操作)gluster>volumeadd-brick gv0 192.168.1.3:/brick1 192.168.1.4:/brick1 可在动态在线增加brick 若是副本卷,则一次添加的Bricks 数是replica 的整数倍;stripe 具有同样的要求 我的动态增加方法(指定两个IP做主备) gluster>volume add-brick gv0 replica 2 10.8.9.115:/brick1 10.8.9.118:/brick1 force 在线增加brick后,还需重新平衡各节点数据。 gluster>volume rebalance gv0 start开始平衡 startingrebalanceon volume gv0 has been successful gluster>volume rebalance gv0 status rebalancestep1: layout fix in progress gluster>volumerebalance gv0 status rebalancecompleted重新平衡完成 查看卷信息: gluster> volume info 8、启动卷gluster>volumestart gv0 查看卷信息: gluster>volume info 卷停止 gluster>volume stop gv0 将创建的卷启动,才能进行客户端挂载;stop能够将系统卷停止,无法使用;此外gluster未提供restart的重启命令 #gluster>volume delete gv0 #删除卷 //删除卷操作能够将整个卷删除,操作前提是需要将卷先停止 9、客户端挂载由于安装包时,安装了gluster客户端,所以测试机同时担当客户端/服务器的角色, 也建议在分布式文件系统这样使用。 mount-t glusterfs 192.168.1.1:/gv0 /data 备注:客户端可任意挂载各节点IP地址,gv0 的数据都是一样的 各节点均可挂载自己ip地址,这也符合gluster的设计思想,无元数据服务器,无单点故障。 至此,gluster的配置及初期使用已经介绍完毕,配置使用极为简单,理念及步骤清晰,但要想提升性能及在生产环境中使用,还需进一步的测试及优化。 三、测试篇我的实际环境部署:
在原有的4台节点上,再增加两节点,互为replica 模式,一共6节点:
gluster> volumeinfo
Volume Name: gv0
Type:Distributed-Replicate
Volume ID:caa12bc8-31eb-49ca-bd86-cbd31771b010
Status: Started
Number of Bricks: 3 x 2 = 6
#3个Bricks ,每个bricks还有一个备bricks互为replica 2模式
Transport-type:tcp
Bricks:
Brick1: 10.8.9.13:/brick1
Brick2:10.8.9.107:/brick1
Brick3:10.8.9.115:/brick1 #新增加
Brick4:10.8.9.118:/brick1 #新增加
Brick5:10.8.9.112:/brick1
Brick6:10.8.9.114:/brick1
测试一:客户端挂载glusterfs 10.8.9.115 节点,上传总共5G小文件 发现5G小文件被均匀打散,分布在以上六台服务器的/brick1 目录 查看每个节点的/brick1目录,发现: 10.8.9.13和10.8.9.107 的 /brick1 每个文件目录大小一样1.2G 10.8.9.115和10.8.9.118 的 /brick1 每个文件目录大小一样2G 10.8.9.112和10.8.9.114 的 /brick1 每个文件目录大小一样1.8G 以上3组服务器/brick1 目录文件合计5G 测试二:客户端挂载glusterfs 10.8.9.115节点,上传一个5G的大文件test.img 发现 test.img 只存在10.8.9.115和10.8.9.118 的/brick1目录 其他服务器没有该文件。 总结: 在replica模式下,增加节点,可以增加整个分布式文件系统的存储总量,并且提升整个文件存储系统的性能,其中的replica模式还能实现数据的高可用性。 replica模式下,不进行对大文件的切割,而是存放在其中一组节点(客户端连接的节点优先)。 四、节点删除、修复篇
10.8.9.115和10.8.9.118 节点互为 replica 模式
移除其中一节点测试:gluster>peerdetach (ip) (后续删除节点时使用) 可以使用参数 force 报错: gluster> peer detach 10.8.9.115 peer detach: failed: Brick(s) with the peer 10.8.9.115exist in cluster 可使用force 删除。(正常环境下,不建议强制删除,这里为了测试所以用force) gluster> peer detach 10.8.9.115 force gluster> peer status Hostname: 10.8.9.115 Uuid: cef74bc3-64ba-4f74-8a56-113e63eb467d State: Peer in Cluster (Disconnected) 利用命令移除10.8.9.115节点后,客户端执行命令 du -sh /data 挂载的数据大小不变。 客户端上传数据后,10.8.9.118 /brick1目录数据比 10.8.9.115 /brick1 多10M 重新添加节点10.8.9.115 , gluster> peer probe 10.8.9.115 查看连接状态正常:gluster> peer status 过一段时间后,10.8.9.118 /brick1目录数据和 10.8.9.115 /brick1 数据一样 另外: 如果在10.8.9.115 服务停掉后,rm -rf /brick1/* 发现 /brick1/ 下面有个 .glusterfs 是用来恢复数据用的,启动节点后,数据直接从.glusterfs里面恢复。 删除一组节点测试关闭两台服务器系统 10.8.9.115 10.8.9.118节点。 或者强制删除两个节点。 客户端执行du -sh /data 挂载的数据总大小减少50G。客户端挂载的目录里面文件一部分丢失。 该步骤主要测试:其中一组(主备)服务器丢失后,数据的完整性。 重新增加这两台节点,或者系统重启,打开cluster服务, gluster> peer status 显示的节点数都正常连接后,客户端执行:du -sh /data 挂载的数据总大小恢复。 客户端连接节点测试()客户端连接 10.8.9.115
直接关闭节点10.8.9.115 系统,
查询节点状态出于失效状态:
Hostname: 10.8.9.115
Uuid:2886b235-0983-42a9-a7dc-8b27c5813625
State: Peer inCluster (Disconnected)
客户端df -h查询: glusterfs#10.8.9.115:/gv0 148G 7.5G 133G 6% /data 上传1G的数据,发现数据尽然能上传,并且数据已经分布到其他的节点。 说明,客户端利用glusterfs 挂载目录,连接的节点不存在单点故障。 五、扩容、缩减篇缩减节点步骤:系统的扩容及缩容可以通过如上节点管理、Brick 管理组合达到目的。 (1) 扩容时,可以先增加系统节点,然后添加新增节点上的Brick 即可。 (2) 缩容时,先移除Brick ,然后再进行节点删除则达到缩容的目的,且可以保证数据不丢失 1.移除brick 若是副本卷,则移除的Bricks 数是replica 的整数倍;stripe 具有同样的要求。 因此,副本卷(replica 2模式)需要移除一对brick,数据会移动到其他的节点上。 gluster> volume remove-brickgv0 10.8.9.112:/brick1 10.8.9.114:/brick1 查看状态 gluster> volume remove-brickgv0 10.8.9.112:/brick1 10.8.9.114:/brick1 status 2.移除节点:gluster>peer detach 10.8.9.112 gluster>peer detach 10.8.9.114 。 ############################################################### 替换 /brick1 1、先增加一个节点 gluster>peer probe 10.8.9.112 2、替换步骤 把10.8.9.115:/brick1替换到 10.8.9.112:/brick1 替换前状态: gluster>volume info Volume Name: gv0 Type: Distributed-Replicate Volume ID: caa12bc8-31eb-49ca-bd86-cbd31771b010 Status: Started Number of Bricks: 2 x 2 = 4 Transport-type: tcp Bricks: Brick1: 10.8.9.13:/brick1 Brick2: 10.8.9.107:/brick1 Brick3: 10.8.9.115:/brick1 Brick4: 10.8.9.118:/brick1 2.1、开始替换我挂载的目录是一级目录所以提示报错,需要加force volume replace-brick gv0 10.8.9.115:/brick110.8.9.112:/brick1 start force 2.2、查看状态:gluster> volume replace-brick gv010.8.9.115:/brick1 10.8.9.112:/brick1 status volume replace-brick: success: Number of filesmigrated = 218 Migration complete 2.3、commit 提交替换任务gluster> volume replace-brick gv010.8.9.115:/brick1 10.8.9.112:/brick1 commit volume replace-brick: success: replace-brick commitsuccessful 替换后状态: gluster> volume info Volume Name: gv0 Type: Distributed-Replicate Volume ID: caa12bc8-31eb-49ca-bd86-cbd31771b010 Status: Started Number of Bricks: 2 x 2 = 4 Transport-type: tcp Bricks: Brick1: 10.8.9.13:/brick1 Brick2: 10.8.9.107:/brick1 Brick3: 10.8.9.112:/brick1 Brick4: 10.8.9.118:/brick1 客户端上传数据,新节点 10.8.9.112 和10.8.9.118 的/brick目录数据一样,说明2台节点互为主备。 移除掉的节点10.8.9.115 /brick 数据大小,没有发生变化,说明已经被剔除。 这个时候可以删除节点10.8.9.115服务器了 gluster>peer detach 10.8.9.115 peerdetach: success 六、系统运维篇1、系统配额1.1开启/关闭系统配额# gluster volume quota VOLNAME enable/disable //在使用系统配额功能时,需要使用enable将其开启;disable为关闭配额功能命令。 1.2设置(重置)目录配额# gluster volume quota VOLNAME limit-usage /directorylimit-value #gluster volume quota dht_vol limit-usage /quota 10GB //如上,设置dht_vol卷下的quota子目录的限额为10GB。 PS:这个目录是以系统挂载目录为根目录”/”,所以/quota即客户端挂载目录下的子目录quota 1.3配额查看# gluster volume quota VOLNAME list # gluster volume quota VOLNAME list /directory name //可以使用如上两个命令进行系统卷的配额查看,第一个命令查看目的卷的所有配额设置,第二个命令则是执行目录进行查看。 //可以显示配额大小及当前使用容量,若无使用容量(最小0KB)则说明设置的目录可能是错误的(不存在)。 1.4地域复制、灾备(geo-replication)# gluster volume geo-replication MASTER SLAVEstart/status/stop 地域复制是系统提供的灾备功能,能够将系统的全部数据进行异步的增量备份到另外的磁盘中。 #gluster volume geo-replication dht_vol192.168.2.104:/mnt/sdb1 start //如上,开始执行将dht_vol卷的所有内容备份到2.104下的/mnt/sdb1中的task,需要注意的是,这个备份目标不能是系统中的Brick。 1.5 I/O信息查看 Profile Command 提供接口查看一个卷中的每一个 brick 的 IO 信息。 #gluster volume profile VOLNAME start //启动profiling,之后则可以进行IO信息查看 #gluster volume profile VOLNAME info //查看IO信息,可以查看到每一个Brick的IO信息 # gluster volume profile VOLNAME stop //查看结束之后关闭profiling功能 1.6 Top监控Top command 允许你查看bricks 的性能例如:read, write, file opencalls, file read calls, file write calls, directory open calls, and directoryreal calls 所有的查看都可以设置top 数,默认100 # gluster volume top VOLNAME open [brickBRICK-NAME] [list-cnt cnt] //查看打开的fd #gluster volume top VOLNAME read [brick BRICK-NAME][list-cnt cnt] //查看调用次数最多的读调用 #gluster volume top VOLNAME write [brick BRICK-NAME][list-cnt cnt] //查看调用次数最多的写调用 # gluster volume top VOLNAME opendir [brickBRICK-NAME] [list-cnt cnt] # gluster volume top VOLNAME readdir [brickBRICK-NAME] [list-cnt cnt] //查看次数最多的目录调用 # gluster volume top VOLNAME read-perf [bsblk-size count count] [brick BRICK-NAME] [list-cnt cnt] //查看每个Brick的读性能 # gluster volume top VOLNAME write-perf [bsblk-size count count] [brick BRICK-NAME] [list-cnt cnt] //查看每个Brick的写性能
|