高可用集群NAS
诸如Glusterfs、Lustre、Ceph等集群文件系统,提供了统一命名空间、高性能、高可用、高扩展的非结构化数据解决方案。出于性能方面考虑,集群文件系统都设计了私有协议的客户端,通常是基于VFS或FUSE接口实现的与POSIX标准兼容的接口,但往往仅提供Linux/Unix系统客户端软件。对于Linux/Unix系统来说,只需要安装集群文件系统客户端内核模块或软件即可;而对于Windows/Mac等系统而言,因为没有客户端软件可用,就没法访问集群文件系统了。另外,一些特殊场合下,用户不希望在Linux/Unix/Windows/Mac系统上安装客户端软件,而是希望通过标准协议访问集群文件系统。因此,我们需要以集群文件系统为底层基础核心,构建使用标准协议访问的存储服务,目前主要就是使用NFS/CIFS标准协议的NAS。传统NAS系统具有单点性能瓶颈、扩展性差、应用规模和高负载支持有限等不足,无法满足大数据应用需求。集群NAS是一种横向扩展(Scale-out)存储架构,它协同多个节点(即通常所称的NAS机头)提供高性能、高可用或高负载均衡的NAS(NFS/CIFS)服务,具有容量和性能线性扩展的优势。
图3 CTDB基本架构
这里我们基于CTDB实现高可用集群NAS。CTDB是一种轻量级的集群数据库实现,基于它可以实现很多应用集群,目前CTDB支持Samba, NFS, HTTPD, VSFTPD, ISCSI, WINBIND应用,集群共享数据存储支持GPFS,GFS(2),Glusterfs, Luster, OCFS(2)。CTDB本身不是HA解决方案,但与集群文件系统相结合,它可以提供一种简便高效的HA集群解决方案。集群配置两组IP,Private IP用于heartbeat和集群内部通信,Public IP用于提供外部服务访问。Public IP动态在所有集群节点上分配,当有节点发生故障,CTDB将调度其他可用节点接管其原先分配的Public IP,故障节点恢复后,漂移的Public IP会重新被接管。这个过程对客户端是透明的,保证应用不会中断,也就是我们这里所说的高可用HA。
高可用集群NAS的安装配置详细过程如下:
(1) IP配置
Single IP: 192.168.1.50 (后面由LVS使用,对外提供单一IP访问)
Public IP: 192.168.1.51, 192.168.1.52, 192.168.1.53 (用于外部访问,或提供给LVS进行负载均衡)
Private IP: 192.168.1.54, 192.168.1.55, 192.168.1.56 (用于内部访问,heartbeat及集群内部通信)
(2) 挂载集群文件系统
这里使用Glusterfs集群文件系统为所有节点提供共享存储空间,并为CTDB提供lock和status等共享存储空间。CTDB卷建议采用gluster replica volume,NAS卷可以根据实际需求选择distribute, stripe, replica及复合卷。如下创建两个卷,在IP: 192.168.1.54上进行:
gluster volume create nas replica 2 192.168.1.54:/gluster/nas 192.168.1.55:/gluster/nas (replica卷) gluster volume create ctdb 192.168.1.54:/gluster/ctdb 192.168.1.55:/gluster/ctdb 192.168.1.56:/gluster/ctdb (distribute卷) gluster volume start nas gluster volume start ctdb
在三个节点上同时mount以上创建的nas和ctdb卷:
mkdir /gluster/data mkdir /gluster/lock mount -t glusterfs 192.168.1.54:/ctdb /gluster/lock (CTDB使用) mount -t glusterfs 192.168.1.54:/nas /gluster/data (集群NAS使用)
(2) 安装软件
yum install samba (安装samba服务以及工具包) yum install nfs-utils (安装nfs工具包,服务已集成于内核中) yum install ctdb (安装CTDB软件包)
(3) 配置Samba
smb.conf文件默认位于/etc/samba/smb.conf,我们把smb.conf放在CTDB lock卷上,并为所有节点建立符号链接至/etc/samba/smb.conf。
ln -s /glsuter/lock/smb.conf /etc/samba/smb.conf
smb.conf配置内容如下:
[global] workgroup = MYGROUP server string = Samba Server Version %v log file = /var/log/samba/log.%m clustering = yes idmap backend = tdb2 private dir = /gluster/lock fileid:mapping = fsid use mmap = no nt acl support = yes ea support = yes security = user passdb backend = tdbsam [public] comment = CTDB NAS path = /gluster/data public = yes writable = yes
(4) 配置NFS
同样将/etc/sysconfig/nfs和/etc/export存放在CTDB lock卷上,并为所有节点建立符号链接。
ln -s /gluster/lock/nfs /etc/sysconfig/nfs
ln -s /gluster/lock/export /etc/export
nfs配置内容如下:
CTDB_MANAGES_NFS=yes NFS_TICKLE_SHARED_DIRECTORY=/gluster/lock/nfs-tickles STATD_PORT=595 STATD_OUTGOING_PORT=596 MOUNTD_PORT=597 RQUOTAD_PORT=598 LOCKD_UDPPORT=599 LOCKD_TCPPORT=599 STATD_SHARED_DIRECTORY=/gluster/lock/nfs-state NFS_HOSTNAME="ctdb" STATD_HOSTNAME="$NFS_HOSTNAME -P "$STATD_SHARED_DIRECTORY/$PUBLIC_IP" -H /etc/ctdb/statd-callout -p 97" RPCNFSDARGS="-N 4"
export配置内容如下:
/gluster/data *(rw,fsid=1235)
(5) 配置CTDB
同样将/etc/sysconfig/ctdb, /etc/ctdb/public_addresses, /etc/ctdb/nodes存放于CTDB lock卷上,并为所有节点建立符号链接。
ln -s /gluster/lock/ctdb /etc/sysconfig/ctdb
ln -s /gluster/lock/public_addresses /etc/ctdb/public_addresses
ln -s /glsuter/lock/nodes /etc/ctdb/nodes
ctdb配置内容如下:
CTDB_RECOVERY_LOCK=/gluster/lock/lockfile CTDB_PUBLIC_INTERFACE=eth0 CTDB_PUBLIC_ADDRESSES=/etc/ctdb/public_addresses #CTDB_LVS_PUBLIC_IP=192.168.1.50 (这里启用LVS single IP不成功,后面单独配置LVS进行负载均衡) CTDB_MANAGES_SAMBA=yes CTDB_MANAGES_WINBIND=yes CTDB_MANAGES_NFS=yes CTDB_NODES=/etc/ctdb/nodes CTDB_DEBUGLEVEL=ERR
public_addresses配置内容如下:
192.168.1.51/24 eth0 192.168.1.52/24 eth0 192.168.1.53/24 eth0
nodes配置内容如下:
192.168.1.54 192.168.1.55 192.168.1.56
(6) 启动服务并查看状态
chkconfig ctdb on chkconfig smb off (CTDB自动管理smb服务) chkconfig nfs off (CTDB自动管理nfs服务) /etc/init.d/ctdb start ctdb status ctdb ip ctdb ping -n all
(7) 访问测试
Windows CIFS访问:
\\192.168.1.51\public \\192.168.1.52\public \\192.168.1.53\public Linux NFS/CIFS访问: mount -t nfs 192.168.1.51:/gluster/data /mnt/ mount -t nfs 192.168.1.52:/gluster/data /mnt/ mount -t nfs 192.168.1.53:/gluster/data /mnt/ mount -t cifs //192.168.1.51/public /mnt -o username=xxx (xxx为使用smbpasswd创建的用户) mount -t cifs //192.168.1.52/public /mnt -o username=xxx mount -t cifs //192.168.1.51/public /mnt -o username=xxx 可以shutdown节点或者stop节点上的nfs/samba服务,然后使用如下命令测试HA工作是否正常。