大兵是
一个想全能的运维

GlusterFS选型优化和故障恢复

企业选型

一、硬件要求

    一般选择为2U的服务器,磁盘选择机械盘SAS盘4T,如果IO比较高可用选择15K高速SAS盘或SSD固态硬盘,另外需要所有glusterfs服务器硬件配置要保持一致,,即服务器选型标准化,尤其是服务器CPU、网卡、硬盘大小和内存大小等硬件,服务器的RAID卡需要带电池,缓存越大性能就越好,另外最好做硬件RAID 10,如果要考虑磁盘空间也可以使用RAID 5,另外需要准备2块左右的热备磁盘。

二、分区

    系统使用Centos 6或Centos 7系列,安装完成后使用yum update升级到最新版本,分区的时候不建议使用LV,建议/boot单独分区可以分200M,根分区可以单独做raid 1,swap分区可以和内存一样大小,剩余的空间给glusterfs使用,系统安装建议选最小化安装或者再选择一些基本的开发工具与和管理软件,其他软件可以不用安装。

三、网络环境

    一个网卡供glusterfs使用,一个是管理网卡,建议使用万兆网卡供glusterfs使用,万兆网卡需要配合万兆交换机使用,如果实在没有万兆,可以使用多网卡绑定也能在一定程度提高数据传输性能。

四、位置规划

    服务器主备要放在不同的机柜,连接到不同的交换机,即使一台服务器或者一个机柜出现问题,也不会导致业务不能访问,总体设计如下,一个主机柜一个备份机柜,使用UPS供电,避免突然断电导致未保存的数据丢失,每个机柜一个接入交换机并连接到核心交换机,可以组建分布式复制卷,A机柜第一台访问对应B机柜第一台服务器,这样方便以后更换硬件或其他的问题排查。


五、卷类型选择

    一般企业中采用的是分布式复制卷,因为有数据备份所有数据相对比较安全,分布式条带卷目前对于glusterfs来说还没有完全成熟而且存在一定的数据安全风险,即当一个物理服务器发生故障则整个数据可能会丢失。

六、其他

    49152:glusterfsd服务端口,与虚拟机热迁移的端口冲突,如果是磁盘没有做raid,需要开启49152以上与磁盘数量一致的端口范围,如果做了RAID 只开启49152端口即可。

[root@storage1 ~]# vim /etc/glusterfs/glusterd.vol 
volume management
    type mgmt/glusterd
    option working-directory /var/lib/glusterd
    option transport-type socket,rdma
    option transport.socket.keepalive-time 10
    option transport.socket.keepalive-interval 2
    option transport.socket.read-fail-log off
    option ping-timeout 0
    option event-threads 1
#   option base-port 49152 #可修改为其他的端口
end-volume

GlusterFS优化

    优化信息帮助参数。

[root@storage1 ~]# gluster volume set help
#设置
[root@storage1 ~]# gluster volume set 
Usage: volume set <VOLNAME> <KEY> <VALUE>
#清空设置
[root@storage1 ~]# gluster volume reset 
Usage: volume reset <VOLNAME> [option] [force]

    访问控制。

[root@storage1 ~]# gluster volume set test2 auth.allow 10.0.0.* 
volume set: success

    设置磁盘剩余空间最小阈值。

[root@storage1 ~]# gluster volume set test2 cluster.min-free-disk 15
volume set: success

    设置条带卷切分数据的大小,默认128KB。

[root@storage1 ~]# gluster volume set test3 cluster.stripe-block-size 256KB

    设置请求等待超时时间,默认1800秒,范围0-1800秒。

[root@storage1 ~]# gluster volume set test2 network.frame-timeout 1500
volume set: success

    设置客户端检测服务器可用超时时间,默认42秒,范围为0-42秒。

[root@storage1 ~]# gluster volume set test2  network.ping-timeout 20
volume set: success

    关闭NFS服务,默认是开启的。

[root@storage1 ~]# gluster volume set test2 nfs.disable off
volume set: success

    设置IO线程数,默认为16,范围为0-65。

[root@storage1 ~]# gluster volume set test2 performance.io-thread-count 32
volume set: success

    设置缓存数据校验周期,默认为1秒,默认为0-61秒,如果同时有多个用户在读写一个文件,一个用户更新了数据,另一个用户在Cache刷新周期到来前可能读到非最新的数据,即无法保证数据的强一致性。因此实际应用时需要在性能和数据一致性之间进行折中,如果需要更高的数据一致性,就得调小缓存刷新周期,甚至禁用读缓存;反之,是可以把缓存周期调大一点,以提升读性能。

[root@storage1 ~]# gluster volume set test2 performance.cache-refresh-timeout 2
volume set: success 

    设置读缓存大小,单位为字节,默认大小为32M。

[root@storage1 ~]# gluster volume set test2 performance.cache-size 64MB
volume set: success

    启用对小文件的优化性能。

[root@storage1 ~]# gluster volume set test2 performance.quick-read on
volume set: success

    设置文件预读,用预读的方式提高读取的性能,读取操作前就预先抓取数据,这个有利于应用频繁持续性的访问文件,当应用完成当前数据块读取的时候,下一个数据块就已经准备好了。

[root@storage1 ~]# gluster volume set test2 performance.read-ahead on
volume set: success

    设置在写数据的时候先写入到缓存再写入到磁盘,以提高写入性能。

[root@storage1 ~]# gluster volume set test2 performance.write-behind on
volume set: success

    缓存已经读过的数据,默认即开启,结合上面的performance.quick-read和performance.read-ahead使用。

[root@storage1 ~]# gluster volume set test2 performance.io-cache on
volume set: success

    查看优化后的结果。

[root@storage1 ~]# gluster volume info test2
 
Volume Name: test2
Type: Distributed-Replicate
Volume ID: 4fd51b01-1446-4689-823b-c4c150872592
Status: Started
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: storage3:/storage/brick1
Brick2: storage4:/storage/brick1
Brick3: storage1:/storage/brick2
Brick4: storage2:/storage/brick2
Options Reconfigured:
performance.io-cache: on
performance.write-behind: on
performance.read-ahead: on
performance.quick-read: on
performance.cache-size: 64MB
performance.cache-refresh-timeout: 2
performance.io-thread-count: 32
nfs.disable: off
network.ping-timeout: 20
network.frame-timeout: 1500
cluster.min-free-disk: 15
auth.allow: 10.0.0.*
performance.readdir-ahead: on

    优化完了别忘记重启啊。

日常维护管理

一、日常维护

#查看信任池的情况
[root@storage1 ~]# gluster peer status
Number of Peers: 3

Hostname: storage4
Uuid: a7caf9c6-ffef-4130-99bd-2641f73cadaf
State: Peer in Cluster (Connected)

Hostname: storage2
Uuid: 6c66940f-cca4-4515-85b2-6c7afd4f1068
State: Peer in Cluster (Connected)

Hostname: storage3
Uuid: 53baff62-98d6-46fb-b4da-b6e2c1744c72
State: Peer in Cluster (Connected)


#查看卷的状态
[root@storage1 ~]# gluster volume status test2
Status of volume: test2
Gluster process                             TCP Port  RDMA Port  Online  Pid
------------------------------------------------------------------------------
Brick storage3:/storage/brick1              49152     0          Y       2090 
Brick storage4:/storage/brick1              49152     0          Y       2076 
Brick storage1:/storage/brick2              49153     0          Y       4038 
Brick storage2:/storage/brick2              49153     0          Y       2072 
NFS Server on localhost                     N/A       N/A        N       N/A  
Self-heal Daemon on localhost               N/A       N/A        N       N/A  
NFS Server on storage4                      2049      0          Y       2282 
Self-heal Daemon on storage4                N/A       N/A        Y       2308 
NFS Server on storage2                      2049      0          Y       2276 
Self-heal Daemon on storage2                N/A       N/A        Y       2284 
NFS Server on storage3                      2049      0          Y       2300 
Self-heal Daemon on storage3                N/A       N/A        Y       2309 
 
Task Status of Volume test2
------------------------------------------------------------------------------
Task                 : Rebalance           
ID                   : 80fd7e26-91f0-4b5e-90f5-7c5ab561865e
Status               : completed  

    监控可使用zabbix,监控状态,可使用脚本向磁盘写入数据,如果不可写就报警。

二、修复

    针对分布是复制卷的,这里不说明,后面会进行故障恢复。

#查看这个卷是否在线
gluster volume status test2

#启动完全修复
gluster volume heal test2 full

#查看需要修复的文件
gluster volume heal test2 info 

#查看修复成功的文件
gluster volume heal test2 info healed

#查看修改失败的文件
gluster volume heal test2 info heal-failed 

#查看脑裂的文件
gluster volume heal test2 info split-brain

三、磁盘限额

    通过quota实现,磁盘限额是针对挂载点目录下的某个目录进行空间使用的限制,而不是对卷的使用空间限制。

#激活quota功能
[root@storage1 ~]# gluster volume quota test2 enable
volume quota : success
#关闭quota功能  gluster volume quota test2 disable

#目录限制
[root@storage1 ~]# cd /gfsdir2 
[root@storage1 gfsdir2]# mkdir data
[root@storage1 gfsdir2]# gluster volume quota test2 limit-usage /data 30MB
volume quota : success
#写入测试
[root@storage1 gfsdir2]# cp 10M-1.test data/
[root@storage1 gfsdir2]# cp 10M-2.test data/
[root@storage1 gfsdir2]# cp 10M-3.test data/
[root@storage1 gfsdir2]# touch data/a.log
touch: cannot touch `data/a.log': Disk quota exceeded

#查看磁盘限额的信息
[root@storage1 gfsdir2]# gluster volume quota test2 list

#取消磁盘限额
[root@storage1 gfsdir2]# gluster volume quota test2 remove /data
volume quota : success

故障恢复

一、硬盘损坏

    如果企业有raid,那么直接可以通过raid恢复,如果没有raid,那么就可以通过GlusterFS恢复了,前提你是分布是复制卷。

环境模拟

    ==移除硬盘,模拟坏了==

    ==但是对于数据是正常读写的==

    ==通过监控发现,购买硬盘,重新加入==

    ==格式化文件系统,挂载==

    ==查看它的复制卷信息==

[root@storage3 brick1]# getfattr -d -m '.*' /storage/brick1
getfattr: Removing leading '/' from absolute path names
# file: storage/brick1
trusted.gfid=0sAAAAAAAAAAAAAAAAAAAAAQ==
trusted.glusterfs.dht=0sAAAAAQAAAAAAAAAAf////g==
trusted.glusterfs.dht.commithash="3339506994"
trusted.glusterfs.quota.dirty=0sMAA=
trusted.glusterfs.quota.size.1=0sAAAAAAMgBAAAAAAAAAAABwAAAAAAAAAE
trusted.glusterfs.volume-id=0sT9UbARRGRomCO8TBUIclkg==

    ==查看新节点的信息,是没有值的==

    ==设置新磁盘的值和复制盘的一样==

[root@storage4 brick1]# setfattr -n trusted.gfid -v 0sAAAAAAAAAAAAAAAAAAAAAQ== /storage/brick1
[root@storage4 brick1]# setfattr -n trusted.glusterfs.dht -v 0sAAAAAQAAAAAAAAAAf////g== /storage/brick1
[root@storage4 brick1]# setfattr -n trusted.glusterfs.dht.commithash -v "3339506994" /storage/brick1
[root@storage4 brick1]# setfattr -n trusted.glusterfs.volume-id -v 0sT9UbARRGRomCO8TBUIclkg== /storage/brick1

    ==重启glusterfs==

[root@storage4 brick1]# /etc/init.d/glusterd restart 
Stopping glusterd:                                         [  OK  ]
Starting glusterd:                                         [  OK  ]

二、服务器损坏

    ==购买配置一样,型号一样的==

    ==配置同样的主机名和IP地址==

    ==按照同样版本的gluster,用之前留存的版本包==

    ==gluster peer status检查uuid==

[root@storage3 ~]# gluster peer status
Number of Peers: 3

Hostname: storage4
Uuid: a7caf9c6-ffef-4130-99bd-2641f73cadaf
State: Peer in Cluster (Connected)

Hostname: storage2
Uuid: 6c66940f-cca4-4515-85b2-6c7afd4f1068
State: Peer in Cluster (Connected)

Hostname: storage1
Uuid: 8d8535a6-1420-4fe3-9ddf-f9b5377d3df6
State: Peer in Cluster (Connected)

    ==将新添加的改为同样的uuid==

[root@storage4 ~]# vim /var/lib/glusterd/glusterd.info
UUID=a7caf9c6-ffef-4130-99bd-2641f73cadaf
operating-version=30712

    ==之后执行的步骤和上面类似==

打赏

未经允许不得转载: » GlusterFS选型优化和故障恢复

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)