GPFS CES 安装配置

GPFS提供两种高可用NFS服务的方式,分别是Cluster NFS (CNFS)和Cluster Export Services (CES),二者互斥只能选其一。CNFS只支持NFS、CES支持NFS/SMB/Object。CNFS基于Linux kernel的NFS server,NFS的配置不由GPFS管理,元数据性能较好;CES基于用户空间的Ganesha NFS server,GPFS管理NFS配置,数据流式访问性能好。注意两者切换必将导致NFS停机。

设置CES共享目录:此目录每个CES节点应均能访问,此步骤需要整个GPFS集群停机
mmshutdown -a
mmchconfig cesSharedRoot=/share/ces
mmstartup -a

添加CES节点:
mmchnode –ces-enable -N ces1,ces2

配置CES IP:CES IP是专用于提供NFS/SMB/Object服务的虚IP,不可用于内部GPFS通讯,CES IP必须可通过DNS或/etc/hosts解析。每个CES节点上应配置有和CES虚IP相同网段IP的网络接口,GPFS只能给这些网络接口添加子IP。如ces1配置有192.168.1.101/24、ces2配置有192.168.1.102/24,CES IP为192.168.1.11和192.168.1.12
mmces address add –ces-ip 192.168.1.11,192.168.1.12

验证CES IP:
[root@ces1 ~]# mmces address list –full-list
cesAddress cesNode attributes cesGroup preferredNode unhostableNodes
192.168.1.11 ces2 none none none none
192.168.1.12 ces1 none none none none

安装NFS:
yum install pyparsing pygobject2 libwbclient
rpm -ivh gpfs.nfs-ganesha-2.7.5-ibm058.12.el7.x86_64.rpm gpfs.nfs-ganesha-gpfs-2.7.5-ibm058.12.el7.x86_64.rpm gpfs.nfs-ganesha-utils-2.7.5-ibm058.12.el7.x86_64.rpm

安装SMB:
yum install libarchive gdb
rpm -ivh gpfs.smb-4.11.16_gpfs_19-2.el7.x86_64.rpm

启用CES NFS:
mmces service enable nfs

在所有CES节点上启动NFS服务:
mmces service start NFS -a

验证CES NFS:
[root@ces1 ~]# mmces service list -a
Enabled services: NFS
ces1: NFS is running
ces2: NFS is running

推荐创建一个独立的fileset用于NFS:
mmcrfileset share data –inode-space new
mmlinkfileset share data -J /share/data

设置用户认证方式:
mmuserauth service create –data-access-method file –type userdefined

创建NFS共享:
mmnfs export add /share/data –client “192.168.1.100/32(Access_Type=RW)”

检查NFS共享:
[root@ces1 ~]# mmnfs export list

Path Delegations Clients
—————— ———– ————-
/share/data NONE 192.168.1.100/32

 

安装 GPFS 管理GUI

  1. GUI节点安装 gpfs.gss.pmcollector-.rpm gpfs.gss.pmsensors-.rpm gpfs.gui-.noarch.rpm gpfs.java-.x86_64.rpm
  2. 所有节点安装 gpfs.gss.pmsensors-*.rpm
  3. 初始化收集器节点 mmperfmon config generate –collectors [node list],GUI节点必须是收集器节点
  4. 启用传感器节点 mmchnode –perfmon -N [SENSOR_NODE_LIST]
  5. 设置容量监控节点和间隔 mmperfmon config update GPFSDiskCap.restrict=[node] GPFSDiskCap.period=86400
  6. 设置fileset容量监控节点和间隔 mmperfmon config update GPFSFilesetQuota.restrict=[node] GPFSFilesetQuota.period=3600
  7. GUI节点自动启动systemctl enable gpfsgui

删除

  1. GUI节点:systemctl stop gpfsgui; systemctl disable gpfsgui;
  2. mmlscluster |grep perfmon 查询一下哪些节点,mmchnode –noperfmon -N [SENSOR_NODE_LIST]
  3. mmperfmon config delete –all
  4. 清空数据库 psql postgres postgres -c “drop schema fscc cascade”
  5. 删除相关的rpm包 yum erase gpfs.gss.pmcollector gpfs.gss.pmsensors gpfs.gui gpfs.java
  6. mmlsnodeclass 查询有哪些节点,分别用mmchnodeclass GUI_SERVERS delete -N <……> 和 mmchnodeclass GUI_MGMT_SERVERS delete -N <……> 删除

GPFS 创建 CNFS

GPFS有两种NFS导出方式,一是Cluster Export Services (CES) NFS,二是clustered NFS (CNFS)。CNFS使用Linux内核的nfsd,提供了较好小文件操作性能,当然也只支持NFS。CES使用用户空间Ganesha的nfsd,连续读写性能较好,CES还支持SMB和Object存储。

CNFS通过动态的调整IP地址来提供NFS的HA,只能提供故障转移不支持负载均衡,下面以nfs1,nfs2两个节点配置CNFS为例

  1. 确保所有服务端和客户端节点与同一个时钟源严格同步时间,服务端节点需要mmchlicense server
  2. 为了防止故障切换时出现写入问题,CNFS export共享目录的文件系统需指定syncnfs挂载选项
    mmchfs fsyaoge123 -o syncnfs
  3. 在每个服务端上面配置相同的/etc/exports,不同目录的fsid必须不同,不同服务端上面同一个目录的fsid必须相同,1.1.1.10/1.1.1.11是客户端IP
    /fsayaoge123/nfs 1.1.1.10(ro,fsid=11) 1.1.1.11(rw,fsid=11)
  4. 在每个服务端上面设置nfsd自动启动
    systemctl enable nfs-server
  5. 定义CNFS的共享目录,最好是一个单独小的文件系统且不被NFS共享出去
    mmchconfig cnfsSharedRoot=/fs2yaoge123/cnfs
  6. 每个服务端使用一个额外的静态IP(onboot=no)用于NFS共享,注意这个IP不能用于GPFS,将这个interface启动起来
  7. 在每个服务端上进行配置,ip_address_list为上面配置的专用于NFS的ip,node为这个节点在GPFS里面的主机名
    mmchnode --cnfs-interface=ip_address_list -N node
    mmchnode --cnfs-interface=1.1.1.1 -N nfs1  //配置nfs1使用1.1.1.1做为NFS专用IP
  8. 查一下rpc.mountd绑定的端口号,配置上去
    mmchconfig cnfsMountdPort=mountd_port -N node
  9. NFS客户端挂载时需加选项 -o sync,hard,intr,nfs1为主用
    mount -o sync,hard,intr 1.1.1.1:/fsyaoge123/nfs /mnt
  10. 测试关机、停止nfsd、停止gpfs三种情况下是否会自动切换

查看CNFS节点

mmlscluster --cnfs

删除CNFS节点

mmchnode --cnfs-interface=DELETE -N "nfs1,nfs2"

 

GPFS 优化

  1. 所有节点需和同一个时钟源严格同步时钟
  2. 一些文件系统操作在defaultHelperNodes上面运行,默认是所有节点,设置为NSD节点可能获得更好的性能
  3. maxMBpS是每个节点的GPFS的吞吐量,可设置为节点IO吞吐量的两倍,特别是IO节点
    1. 默认是2048;单路FDR设置1200,单路QDR设置8000,双路万兆设置5000
  4. GPFS的NSD节点如为专用IO节点,NSD节点没有数据访问则不会缓存任何数据,但是缓存可以为NSD工作线程所用,故可进行如下优化:
    1. 增加pagepool的大小
    2. 将nsdBufSpace设置为最大值(70%)
  5. 磁盘系统优化
    1. RAID segment size × 数据盘个数 = stripe size,GPFS block size应整倍数于stripe size
    2. GPFS block size应整倍数于HBA卡最大IO尺寸
    3. 最好倍数都是1
    4. /sys/block/*/queue/max_sectors_kb
  6.  存储的缓存策略
    1. 顺序IO负载:启用读缓存,禁用任何形式的预读
    2. 随机IO负载和Metadata:启用读写缓存
  7.  对于使用大量文件的GPFS节点,特别是登录节点、NFS/SMB输出节点、登录节点,可进行如下优化:
    1. 提高maxFilesToCache的值,这是缓存文件metadata的数量,最好能提高到并发打开文件数加上最近使用的文件数
    2. 在Linux上面maxStatCache是无效的,所以需要设定maxStatCache为一个较小的值,如512
    3. 按照maxFilesToCache × 3 KB + maxStatCache × 400 bytes估算内存消耗,增加的内存不在pagepool中
    4. 增加pagepool的大小,修改pagepoolMaxPhysMemPct可提高pagepool的上限
  8. 网络优化
    1. net.core.rmem_max = 8388608
      net.core.wmem_max = 8388608
      net.ipv4.tcp_rmem = 4096 262144 8388608
      net.ipv4.tcp_wmem = 4096 262144 8388608
    2. GPFS的socketMaxListenConnections和系统的net.core.somaxconn设置为集群节点数量
  9. sharedMemLimit和maxBufferDescs等看mmfsadm dump fs | head -8输出结果决定是否需要增加
  10. 文件系统的-n参数匹配集群节点数
  11. 后端由大量磁盘或固态盘组成NSD设置ignorePrefetchLUNCount=yes
  12. 用mmlsconfig和mmdiag –config可以查看配置

GPFS Windows CIFS共享问题

GPFS的盘在Windows 2008及以上版本上用CIFS共享出去,当GPFS的盘里面文件发生变化时(如增加删除),某些Windows Vista及以上版本的客户端无法看到这些变化,即使刷新也不行,必须在客户端上面建立或删除文件才能看到,而如果这个共享是Windows自己的硬盘上的则没有这个问题。

这里IBM说明了,从SMBv2(Vista和2008开始)开始引入了一个新的特性,客户端可以对文件和文件夹的metadata进行缓存,刷新这个缓存依赖于目录变更通知,但是GPFS的在Windows上面不支持这个功能,所以客户端并不知道目录中的文件发生了变化。解决方法也很简单暴利,直接关闭SMBv2回退到SMBv1即可。这里详述了打开关闭各个版本SMB的办法,对于Windows 2008 (R2)来说就是在注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters下新增一个SMB2的DWORD为0的值,需要特别注意的是Windows 2008 HPC版本不支持这个注册表项目,添加后会导致共享整个就没有了。在这里详述了各个版本的Server Client之间会使用什么样版本的SMB,和在Windows 8/2012怎么查看SMB的版本。

IBM GPFS 仲裁机制

为维护数据一致性,防止集群出现“脑裂”的情况,GPFS设计了GPFS系统的仲裁机制:

节点仲裁:
将集群中的一些节点定义为仲裁节点(quorum nodes),每个节点如能和一半以上的仲裁节点成功通讯则GPFS可用,否则GPFS不可用。一半以上仲裁节点的意义是,1个要求1个、2个要求2个、3个要求2个、4个要求3个、5个要求3个,这样保证如果由于某些原因(如网络故障)导致集群分割,只有一个子集群GPFS可用。

节点仲裁和决胜磁盘(tiebreaker disks):
集群中仲裁节点不超过8个且应该包含集群主次配置服务器(primary and secondary cluster configuration servers),每个仲裁节点连接到所有决胜磁盘,则可以定义1-3个决胜磁盘但最好是奇数,只要有仲裁节点有一半以上的决胜磁盘可用则GPFS可用,否则GPFS不可用。这种模式适合小集群,特别只有两个NSD server和共享存储的情况,这时这两个NSD server还是cluster configuration servers和quorum nodes,共享存储上的某些LUN定义为决胜磁盘,这样两个NSD server坏一个整个GPFS还是可用的。

上面说的仲裁节点选择有一些原则:
一直开机稳定运行的节点
位于不同机架、不同供电来源、连接不同交换机的节点
最好包含这些节点:Primary configuration servers、Secondary configuration servers、Network Shared Disk servers
仲裁节点不是越多越好,最好奇数个且不要超过7,如3、5、7
仲裁节点应该是集群的核心节点,且能够代表集群

前面说的仲裁都是仲裁本地的GPFS是否可用,GPFS还有机制可以将一份数据复写2-3次,相当于做了NSD级别的Raid1,这样在损失一些NSD的情况下文件系统可能仍然可用,这个时候就需要对GPFS中的某个文件系统进行冲裁。

文件系统描述符(File system descriptor)仲裁:
在创建文件系统的时候,GPFS会根据NSD和故障组的情况在某些个NSD上面创建文件系统描述符,运行时根据可用的描述符数量来判断这个文件系统是否可用。
如果有至少5个不同的故障组则创建5个描述符副本,至少3个副本可用;

如果有至少3个NSD则创建3个描述符副本,至少2个副本可用;
如果只有1-2个NSD则每个NSD创建一个描述符副本,一个都不能少。
对于少于5个故障组,特别是只有2个故障组的情况,必定存在某一个故障组失效的情况下这个文件系统会不符合上述要求而被关闭的情况,可以通过创建专门的descOnly NSD来平衡描述符副本的分配,从而防止系统存在单点故障。

GPFS增加/dev/cciss/c0d0类设备解决方法

比如hp的dl380g5服务器,raid的逻辑盘在linux中不是/dev/sda而是/dev/cciss/c0d0,mmcrnsd的时候正常,但是mmcrfs的时候报错“Unable to open disk”,使用mmlsnsd -m则有如下显示:

 Disk name    NSD volume ID      Device         Node name                Remarks       
—————————————————————————————
 io00nsd01    0A01C866666C04EB   –              io00                     (not found) server node

解决方法:
cp /usr/lpp/mmfs/samples/nsddevices.sample /var/mmfs/etc/nsddevices
vim /var/mmfs/etc/nsddevices
在$osName = Linux 增加 echo "/dev/cciss/c0d0p4 generic",取消最后return 1的注释,echo中的/dev/cciss/c0d0p4必须和你的nsd描述文件中的device完全一致
chmod +x /var/mmfs/etc/nsddevices