基于Ubuntu和GFS的分布式文件服务器部署

最后更新于: 2016.08.31

此实验的目的是在于验证基于Windows域环境的高可用文件服务器集群,并使该服务器集群基于稳定性更高的Linux构建。

其设想结构如下:

Linux-GFS2-AD-SAN-SAMBA

服务器版本: Ubuntu 14.04.4 LTS amd64
FileServer1  主机名:FSSrv1 地址:192.168.72.108
FileServer2  主机名:FSSrv2 地址:192.168.72.110
ISCSI盘阵  地址:192.168.3.200  无Chap
ActiveDirectory域名: nvacg.org  域控制器: dczero.nvacg.org

本文仅介绍gfs2在各节点上的搭建以及各节点加入域环境所需的设置,对于LVS,可参照其他LVS的构建文章。目前阶段下,对于LVS是否会对SMB协议下长期打开文件造成影响尚不明确。

目前确定的优缺点:

优点:
基于Linux,可长期工作而不需要维护
高可用方案,稳定性有保证
不同于DFS,不需要定期在节点间同步故不存在丢失未同步数据的问题,一台服务器宕机后磁盘阵列中丢失的数据量可忽略不计。

缺点:
修改文件权限时操作难度高,需要对Linux文件系统(及ACL)有一定认识
客户端修改文件、文件夹权限有一定局限性
不支持客户端更改所有者、所有组
文件权限不能很好地支持组权限

█为什么是gfs2(其他类似的有ocfs)而不是nfs?

nfs并不在节点上直接操作物理磁盘,它需要后端有一台服务器挂载目标磁盘后通过nfs协议共享给前端的文件服务器使用。此情况下,即使前端采用多台SMB服务器加之LVS实现了高可用,只要后端的nfs服务器失联,文件服务即告失败。
而gfs、ocfs、vmfs这类天生为集群打造的文件系统则借助磁盘锁将单台服务器读写的文件加以锁定来确保多台服务器在读写同一个磁盘时不会造成诸如同时写入同一个文件而造成的文件或文件系统损坏。因此,可以在多台服务器上同时挂载同一个物理磁盘而不需要后端服务器再做共享,从而大大提高了系统的可用性。

首先安装必须的软件,open-iscsi用于为服务器提供iscsi磁盘的连接支持,gfs2-utils用于创建和检查gfs2文件系统格式的磁盘分区,而dlm和corosync用于配合gfs2完成各节点对gfs2磁盘分区的读写协商和文件、目录锁定。

在各节点服务器上,使用以下命令安装这些软件

#apt-get install open-iscsi gfs2-utils dlm corosync

随后,需要对corosync进行设置,写入集群及各节点信息。

编辑各节点服务器的 /etc/corosync/corosync.conf,内容如下

totem {
        version: 2
        secauth: off
        cluster_name: NVACGFSSrvGp1
}nodelist {
        node {
                ring0_addr: 192.168.72.108
                nodeid: 1
        }        node {
                ring0_addr: 192.168.72.110
                nodeid: 2
        }
}quorum {
        provider: corosync_votequorum
        two_node: 1
}logging {
        to_syslog: yes
}                                                                              文章来自blog.nvacg.org

在所有节点上启动corosync。在Ubuntu 14.04.4上,通过service方式启动corosync会出现错误,暂时直接通过命令来启动它

#corosync
notice  [MAIN  ] Corosync Cluster Engine ('2.3.3'): started and ready to provide service.
info    [MAIN  ] Corosync built-in features: dbus testagents rdma watchdog augeas pie relro bindnow                                            文章来自blog.nvacg.org

查看节点状况

#corosync-quorumtool
Quorum information
------------------
Date:             Tue Aug 30 11:23:54 2016
Quorum provider:  corosync_votequorum
Nodes:            2
Node ID:          1
Ring ID:          24
Quorate:          YesVotequorum information
----------------------
Expected votes:   2
Highest expected: 2
Total votes:      2
Quorum:           1 
Flags:            2Node Quorate WaitForAllMembership information
----------------------
    Nodeid      Votes Name
         1          1 192.168.72.108 (local)
         2          1 192.168.72.110                                   文章来自blog.nvacg.org

在各节点上启动dlm,Ubuntu的dlm软件包有点问题,需要手动挂载 configfs 到/sys/kernel/config

#mount -t configfs none /sys/kernel/config/
#service dlm start                                             文章来自blog.nvacg.org

随后,将SAN上的磁盘挂在一个节点上

#iscsiadm -m discovery -t sendtargets -p 192.168.3.200:3260
#iscsiadm -m node -p 192.168.3.200 -l                   文章来自blog.nvacg.org

对连接的磁盘进行分区(此处略)并格式化,下例中的Main为该分区在集群中的唯一名称,可以随意取名但必须唯一。

#mkfs.gfs2 -p lock_dlm -t NVACGFSSrvGp1:Main -j 3 /dev/sdb1
It appears to contain an existing filesystem (gfs2)
This will destroy any data on /dev/sdb1
Are you sure you want to proceed? [y/n]y
Device:                    /dev/sdb1
Block size:                4096
Device size:               24.00 GB (6290403 blocks)
Filesystem size:           24.00 GB (6290401 blocks)
Journals:                  3
Resource groups:           96
Locking protocol:          "lock_dlm"
Lock table:                "NVACGFSSrvGp1:Main"
UUID:                      2364db7a-040d-5ad6-f705-03f05848c297

随后,将SAN上的磁盘挂在至各节点

#iscsiadm -m discovery -t sendtargets -p 192.168.3.200:3260
#iscsiadm -m node -p 192.168.3.200 -l                    文章来自blog.nvacg.org

在各节点上挂载磁盘分区

#mount -t gfs2 /dev/sdb1 /data                             文章来自blog.nvacg.org

验证挂载状态,可以看到节点1和节点2都已经挂载了Main磁盘分区

#dlm_tool ls
dlm lockspaces
name          Main
id            0xf5edb1fa
flags         0x00000000
change        member 2 joined 1 remove 0 failed 0 seq 2,2
members       1 2                                                      文章来自blog.nvacg.org

随后可以在节点1上对挂载点/data写入一个文件,并立即在节点2上查看挂载点/data中写入的文件,可以立即看到文件系统的变动。

如果节点2由于某种原因失去连接,则dlm_tools显示变为如下,其中member记录了当前该磁盘分区的挂载节点数remove记录了当前该磁盘分区的卸载节点数,failed记录了当前该磁盘分区的故障节点数,seq记录了该分区节点的变动次数。members记录了当前已挂载该磁盘分区的节点服务器ID。

#dlm_tool ls
dlm lockspaces
name          Main
id            0xf5edb1fa
flags         0x00000000
change        member 1 joined 0 remove 1 failed 1 seq 3,3
members       1                                                          文章来自blog.nvacg.org

后续重启后只要保证按照corosync启动 -> dlm启动 -> iscsi连接 -> 挂载磁盘分区的顺序启动服务,就可以正常工作

在各节点上安装共享和域验证所必要的软件

#apt-get install krb5-user libpam-krb5 samba winbind libnss-winbind libtalloc2                                                             文章来自blog.nvacg.org

随后在各节点上将realm设定为NVACG.ORG,编辑/etc/krb5.conf

[libdefaults]
#域名
default_realm = NVACG.ORG
#允许查询本地域名
dns_lookup_realm = true
#允许查询KDC
dns_lookup_kdc = true[realms]
NVACG.ORG = {
#指定DC
 kdc = dczero.nvacg.org
 admin_server = dczero.nvacg.org

[domain_realm]
 .nvacg.org = NVACG.ORG
 nvacg.org = NVACG.ORG

[appdefaults]
# 指定PAM参数
 pam = {
  debug = false
  ticket_lifetime = 36000
  renew_lifetime = 36000
  forwardable = true
  krb4_convert = false
}                                                                                 文章来自blog.nvacg.org

测试并验证域帐号登录

#kinit join                                                            文章来自blog.nvacg.org

输入正确的密码后系统不提示任何错误即为验证通过
接下来设置各节点上的samba,打开/etc/samba/smb.conf,并修改这些参数

[global]
#指定工作组
workgroup = NVACG
server string = %h server (Samba, Ubuntu)
#指定主机名
netbios name = FSSrv1
server role = member server
#安全级别,可选ads或domain
security = domain
passdb backend = tdbsam
#指定域名
realm = NVACG.ORG
#指定仍证用的AD主机
password server = DCZERO.NVACG.ORG
#为域用户创建UNIX本地用户时的ID选择范围
idmap uid = 10001-99999
idmap gid = 10001-99999
#是否允许在本地创建域用户和组对应的UNIX用户和组
winbind enum users = yes
winbind enum groups = yes
#用来指定用户名映射的配置文件,用途诸如映射root到Administrator (别名)
#username map = /etc/samba/smbusers
#指定新建用户的主目录
template homedir = /home/%D/%U
#指定新建用户的默认Shell,可选 /bin/sh 或 /bin/bash 或 /sbin/nologin
template shell = /sbin/nologin
#指定域名和用户名间的分隔符,如nvacg\xujun,此处使用斜杠需要转义
winbind separator = \\
#如果服务器临时无法连接到域控,是否允许域用户认证登陆(使用缓存的凭据)
winbind offline logon = true
#如果没有2K/XP系统的终端,将其设为no
client use spnego = no
winbind use default domain = yes
server signing = auto
#是否对密码进行加密
encrypt passwords = yes
local master = no
preferred master = no
#共享文件设置
map to guest = bad user
usershare allow guests = yes
guest account = nobody
guest ok = yes
#共享目录
[ljzfile]
        #共享注释
        comment = Smb File Share based Windows AD
        #路径
        path = /data
        #可被浏览到
        browsable = yes
        public = yes
        #允许匿名用户
        guest ok = yes
        #只读
        readonly = no
        #新建文件权限
        create mask = 0644
        #可以修改文件权限
        writeable = yes
        #新建目录权限
        directory mask = 0755                                          文章来自blog.nvacg.org

在各节点上修改nss设置,以便使系统支持AD域账号,修改/etc/nsswitch.conf
查找passwd和group,并按下述设置

passwd:     compat winbind
group:      compat winbind                                         文章来自blog.nvacg.org

全部节点重置samba、winbind服务

#service smbd restart
#service winbind restart                                       文章来自blog.nvacg.org

各节点加域

#net ads join -U xujun -S dczero.nvacg.org -n FSSrv2

成功加域后显示如下信息

Using short domain name -- NVACG
Joined 'FSSrv2' to dns domain 'nvacg.org'                 文章来自blog.nvacg.org

重启各节点winbind服务

#service winbind restart                                           文章来自blog.nvacg.org

随后,使用wbinfo –t可检查与域间的信任关系

#wbinfo -t
checking the trust secret for domain NVACG via RPC calls succeeded

此外,分别执行wbinfo –u和wbinfo –g可以显示出当前域中的用户和组,getent passwd、getent group也可以看到包含域用户的passwd文件和group文件。
后续只要配置LVS即可实现自动宕机切换。

 


  请注意,本站的所有文章均要求阁下在转载时注明出处和原作者,阁下转载本站文章即表示阁下同意并遵守此规程,除非特别注明转载出处,否则文章即为其发布者所著。本站及文章作者保留文章的著作权并有权在阁下违反上述规程时予以追究。

本文链接地址: 基于Ubuntu和GFS的分布式文件服务器部署

发表评论

您的电子邮箱地址不会被公开。

*