如何在 Red Hat 集群中使用 ctdb 配置集群 Samba 共享

在开始使用 ctdbb 配置集群 samba 共享的步骤之前,我们必须了解高可用性集群及其架构。

从 Red Hat Enterprise Linux 6.2 版本开始,Red Hat High Availability Add-On 支持在主动/主动配置中运行集群 Samba。

这要求我们在集群中的所有节点上安装和配置 CTDB,并将其与 GFS2 集群文件系统结合使用。

注意:Red Hat Enterprise Linux 6 最多支持四个运行集群 Samba 的节点。

服务器准备

  • 1 个用于 openfiler 的服务器 (192.168.1.8)
  • 2 台 CentOS 6.5 服务器(192.168.1.5 和 192.168.1.6)
  • 1 个用于 Conga 服务器的服务器 (192.168.1.7)

配置 GFS 文件系统

[root@node2 mnt]# mkfs.gfs2 -p lock_dlm -t smbcluster:samba -j 2 /dev/samba_vg/samba
This will destroy any data on /dev/samba_vg/samba.
It appears to contain: symbolic link to `../dm-3'
Are you sure you want to proceed? [y/n] y
Device:                    /dev/samba_vg/samba
Blocksize:                 4096
Device Size                9.00 GB (2359296 blocks)
Filesystem Size:           9.00 GB (2359294 blocks)
Journals:                  2
Resource Groups:           36
Locking Protocol:          "lock_dlm"
Lock Table:                "smbcluster:samba"
UUID:                      062df74f-218a-bd22-34f8-ea58e7e3316a

[root@node2 mnt]# mkfs.gfs2 -p lock_dlm -t smbcluster:ctdb -j 2 /dev/samba_vg/ctdb
This will destroy any data on /dev/samba_vg/ctdb.
It appears to contain: symbolic link to `../dm-2'
Are you sure you want to proceed? [y/n] y
Device:                    /dev/samba_vg/ctdb
Blocksize:                 4096
Device Size                1.00 GB (262144 blocks)
Filesystem Size:           1.00 GB (262142 blocks)
Journals:                  2
Resource Groups:           4
Locking Protocol:          "lock_dlm"
Lock Table:                "smbcluster:ctdb"
UUID:                      8d243aeb-983b-9126-6678-47df6a2b93fe

配置仲裁磁盘

注意:在任何一个节点上执行此命令,其他节点上也会反映此命令。请记住使用的标签名称,因为在为集群配置qdisk时必须使用相同的标签名称

[root@node2 mnt]# mkqdisk -c /dev/sdb -l quorum
mkqdisk v3.0.12.1
Writing new quorum disk label 'quorum' to /dev/sdb.
WARNING: About to destroy all data on /dev/sdb; proceed [N/y] ? y
Initializing status block for node 1...
Initializing status block for node 2...
Initializing status block for node 3...
Initializing status block for node 4...
...
Initializing status block for node 14...
Initializing status block for node 15...
Initializing status block for node 16...

为 ricci 分配密码

[root@node1 ~]# passwd ricci
Changing password for user ricci.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@node2 ~]# passwd ricci
Changing password for user ricci.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

更新主机文件

更新所有节点上的主机文件,包括管理节点

#node1
192.168.1.5     node1.example   node1
#node2
192.168.1.6     node2.example   node2
#node3
192.168.1.7     node3.mgmt      node3
#of
192.168.1.8     of.storage      of

在两个节点上重启 ricci 服务以反映新密码

[root@node2 ~]# /etc/init.d/ricci start
Starting oddjobd:                                          [  OK  ]
generating SSL certificates...  done
Generating NSS database...  done
Starting ricci:                                            [  OK  ]

从这里开始,我们将再次必须按照以下文章进行以下步骤
使用 VMware、Quorum Disk、GFS2、Openfiler 配置 Red Hat Cluster

  • 使用 conga 配置管理节点
  • 在浏览器上访问 luci 控制台
  • 使用 luci 控制台创建集群
  • 向集群添加节点
  • 配置 qdisk
  • 启动集群

成功完成上述所有步骤后,验证集群状态

[root@node1 ~]# clustat
Cluster Status for mycluster @ Wed Oct  8 11:58:42 2014
Member Status: Quorate
 Member Name                             ID   Status
 ------ ----                             ---- -----
 node1                                       1 Online, Local
 node2                                       2 Online
 /dev/block/8:48                             0 Online, Quorum Disk

安装配置samba和ctdb

# yum -y install ctdb samba

创建各自的目录以在两个节点上安装 samba 和 ctdb

[root@node2 ~]# mkdir /mnt/ctdb
[root@node2 ~]# mkdir /mnt/samba
[root@node1 ~]# mkdir /mnt/samba
[root@node1 ~]# mkdir /mnt/ctdb

在所有节点上的 /etc/fstab 中添加以下行

/dev/samba_vg/samba     /mnt/samba              gfs2    defaults        0 0
/dev/samba_vg/ctdb      /mnt/ctdb               gfs2    defaults        0 0

在两个节点上启动 gfs2 服务以挂载 fstab 文件中指定的相应共享

[root@node2 ~]# service gfs2 start
Mounting GFS2 filesystem (/mnt/samba):                     [  OK  ]
Mounting GFS2 filesystem (/mnt/ctdb):                      [  OK  ]
[root@node1 ~]# service gfs2 start
Mounting GFS2 filesystem (/mnt/samba):                     [  OK  ]
Mounting GFS2 filesystem (/mnt/ctdb):                      [  OK  ]

在所有节点的 smb.conf 中添加以下条目

重要说明:确保所有节点上的 smb.conf 都相同

# vi /etc/samba/smb.conf
[global]
        guest ok = yes
        clustering = yes
        netbios name = example
[profiles]
        path = /profiles
        share modes = yes
        guest only = yes
        browseable = yes
        writable = yes
        guest ok = yes
        create mode = 0777
        directory mode = 0777
        ea support = yes

为所有节点创建 smb.conf 中提到的共享路径

# mkdir /profiles

配置CTDB

在将形成集群的所有 linux 机器上挂载集群文件系统。

CTDB配置文件位于/etc/sysconfig/CTDB。CTDB操作必须配置的必填字段如下:

CTDB_NODES
CTDB_PUBLIC_ADDRESSES
CTDB_RECOVERY_LOCK
CTDB_MANAGES_SAMBA (must be enabled)
 CTDB_MANAGES_WINBIND (如果在成员服务器上运行,则必须启用)

在两个节点的/etc/sysconfig/ctdb中,取消注释并对上述参数进行以下更改,如下所示

# vi /etc/sysconfig/ctdb
CTDB_RECOVERY_LOCK="/mnt/ctdb/.ctdb.lock"
CTDB_NODES=/etc/ctdb/nodes
CTDB_PUBLIC_ADDRESSES=/etc/ctdb/public_addresses
CTDB_MANAGES_SAMBA=yes
CTDB_MANAGES_WINBIND=yes
CTDB_NODES

需要创建此文件,并应包含 CTDB 守护程序将在集群中使用的私有 IP 地址列表。
集群中的每个节点一个 IP 地址。

这应该是一个私有的不可路由子网,仅用于内部集群流量。
该文件在集群中的所有节点上必须相同。

确保这些 IP 地址在集群节点启动时自动启动,并且每个节点都可以 ping 其他节点,如下例所示(在所有节点上):

192.168.1.5
192.168.1.6

CTDB_PUBLIC_ADDRESSES

CTDB 集群中的每个节点都包含该特定节点可以托管的公共地址列表。

在运行 CTDB 集群时,会将整个集群中存在的每个公共地址分配给一个将托管该公共地址的节点。

这些是 SMBD 守护程序和其他服务将绑定到的地址以及客户端将用于连接到集群的地址。

每个节点上的/etc/ctdb/public_addresses文件内容如下:

[root@node1 ~] vi /etc/ctdb/public_addresses
192.168.1.4/24 eth2
192.168.1.7/24 eth2
[root@node2 ~] vi /etc/ctdb/public_addresses
192.168.1.4/24 eth0
192.168.1.7/24 eth0

注意:在 node1 中,我使用的以太网接口是 node2 中的 eth2 和 eth0,与使用 ifconfig 命令检查相同

CTDB_RECOVERY_LOCK

此参数指定 CTDB 守护程序用于仲裁哪个节点充当恢复主节点的锁定文件。

该文件必须保存在共享存储中,以便集群中的所有 CTDB 守护进程访问/锁定同一个文件。

我们必须指定此参数。

此参数没有默认值。

重要提示:确保 samba 和 winbind 服务没有运行,因为一旦我们启动 ctdb,它将负责运行所有必需的 samba 服务

# chkconfig smb off
# chkconfig nmb off
# chkconfig winbind off
[root@node1 ~]# /etc/init.d/ctdb restart
Shutting down ctdbd service:   Warning: ctdbd not running !
Starting ctdbd service:                                    [  OK  ]

测试 ctdb

一旦集群启动并运行,我们可能希望知道如何测试它是否正常运行。
以下测试可能会有所帮助

ctdb 包附带了一个名为 ctdb 的实用程序,可用于查看 ctdb 集群的行为。

如果我们不带任何选项运行它,它将提供一些简洁的使用信息。
最常用的命令是:

  • ctdb status
  • ctdb ip
  • ctdb ping

ctdb status

status 命令提供有关集群和节点状态的基本信息。
当你运行它时,你会得到一些输出,如:

[root@node1 ~]# ctdb status
Number of nodes:2
pnn:0 192.168.1.5      OK (THIS NODE)
pnn:1 192.168.1.6      OK
Generation:1976870623
Size:2
hash:0 lmaster:0
hash:1 lmaster:1
Recovery mode:NORMAL (0)
Recovery master:0

在另一个节点上相同

[root@node2 mnt]# /etc/init.d/ctdb restart
Shutting down ctdbd service:   Warning: ctdbd not running !
Starting ctdbd service:                                    [  OK  ]
[root@node2 mnt]# ctdb status
Number of nodes:2
pnn:0 192.168.1.5      OK
pnn:1 192.168.1.6      OK (THIS NODE)
Generation:1976870623
Size:2
hash:0 lmaster:0
hash:1 lmaster:1
Recovery mode:NORMAL (0)
Recovery master:0

所有节点都处于健康状态。

它还告诉我们恢复模式是正常的,这意味着集群已经完成了恢复并且正在正常的完全运行状态下运行。

当出现节点故障或者集群出现问题时,恢复状态将短暂更改为“RECOVERY”。

如果集群在很长时间(许多秒)中保持在 RECOVERY 状态,则配置可能有问题。
参见 /var/log/log.ctdb。

ctdb ip

此命令打印公共 ip 地址的当前状态以及当前哪个物理节点正在为该 ip 提供服务。

[root@node1 ~]# ctdb ip
Public IPs on node 0
192.168.1.4 node[1] active[] available[eth0] configured[eth0]
192.168.1.7 node[0] active[eth0] available[eth0] configured[eth0]
[root@node2 mnt]# ctdb ip
Public IPs on node 1
192.168.1.4 node[1] active[eth2] available[eth2] configured[eth2]
192.168.1.7 node[0] active[] available[eth2] configured[eth2]

ctdb ping

此命令尝试“ping”集群中的每个 CTDB 守护进程。

[root@node1 ~]# ctdb ping -n all
response from 0 time=0.000114 sec  (8 clients)
response from 1 time=0.002473 sec  (8 clients)
[root@node2 mnt]# ctdb ping -n all
response from 0 time=0.000976 sec  (7 clients)
response from 1 time=0.000108 sec  (9 clients)

验证共享

[root@node2 mnt]# smbclient -L localhost -U%
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.9-169.el6_5]
        Sharename       Type      Comment
        ---------       ----      ------
        profiles        Disk
        IPC$          IPC       IPC Service (Samba 3.6.9-169.el6_5)
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.9-169.el6_5]
        Server               Comment
        ---------            ------
        Workgroup            Master
        ---------            ------

创建用于访问 samba 共享的用户

# useradd jack
# smbpasswd -a jack
New SMB password:
Retype new SMB password:
Added user jack.

使用用户 jack 重新尝试访问

# smbclient -L localhost -U jack
Enter jack's password:[jack's password]
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.9-169.el6_5]
        Sharename       Type      Comment
        ---------       ----      ------
profiles        Disk
        IPC$          IPC       IPC Service (Samba 3.6.9-169.el6_5)
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.9-169.el6_5]
        Server               Comment
        ---------            ------
        Workgroup            Master
        ---------            ------

同样可以从windows机器验证。

软件包准备

  • High Availability Management (rpm 组)
  • High Availability (rpm 组)
  • iSCSI Storage Client (rpm 组)
  • gfs2-utils
  • ctdb
  • samba
  • samba-client
  • samba-winbind
  • samba-winbind-clients

让我们从创建集群开始

创建 2 节点集群

在本文中,我使用的是与 Red Hat 完全兼容的 CentOS 6.5,因此这里使用的软件包和命令与 Red Hat Linux 中的相同。

节点 1:192.168.1.5(node1.example)
节点 2:192.168.1.6(node2.example)
管理节点:192.168.1.7 (node3.mgmt)
Openfiler: 192.168.1.8 (of.storage)

接下来继续在两个节点上安装以下软件包

[root@node1 ~]# yum groupinstall "iSCSI Storage Client" "High Availability"
[root@node2 ~]# yum groupinstall "iSCSI Storage Client" "High Availability"

使用 iSCSI 启动器添加 iSCSI 目标

[root@node1 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.1.8
Starting iscsid:                                           [  OK  ]
192.168.1.8:3260,1 iqn.2006-01.com.openfiler:samba
[root@node1 ~]# /etc/init.d/iscsi start
Starting iscsi:                                            [  OK  ]
[root@node2 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.1.8
Starting iscsid:                                           [  OK  ]
192.168.1.8:3260,1 iqn.2006-01.com.openfiler:samba
[root@node2 ~]# /etc/init.d/iscsi start
Starting iscsi:                                            [  OK  ]

配置逻辑卷

注意:在任何一个节点上执行以下步骤,因为同样会反映在集群的其他节点上。

根据我在 openfiler 中的配置,我有两个 LUN,其中 /dev/sdb 用于仲裁磁盘,/dev/sdc 将用于 samba 共享和 ctdb

# fdisk -l
Disk /dev/sdb: 1275 MB, 1275068416 bytes
40 heads, 61 sectors/track, 1020 cylinders
Units = cylinders of 2440 * 512 = 1249280 bytes
Sector size (logical/physical): 512 bytes/512 bytes
I/O size (minimum/optimal): 512 bytes/512 bytes
Disk identifier: 0x00000000
Disk /dev/sdc: 11.3 GB, 11307843584 bytes
64 heads, 32 sectors/track, 10784 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes/512 bytes
I/O size (minimum/optimal): 512 bytes/512 bytes
Disk identifier: 0x00000000

让我们从 /dev/sdc 创建一个分区

[root@node2 ~]# fdisk /dev/sdc
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x36e0095b.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-10784, default 1): 1
Last cylinder, +cylinders or +size{K,M,G} (1-10784, default 10784):[Press Enter]
Using default value 10784
Command (m for help): p
Disk /dev/sdc: 11.3 GB, 11307843584 bytes
64 heads, 32 sectors/track, 10784 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes/512 bytes
I/O size (minimum/optimal): 512 bytes/512 bytes
Disk identifier: 0x36e0095b
   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1       10784    11042800   83  Linux
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@node2 ~]# partprobe /dev/sdc
Create 2 Logical Volume out of /dev/sdc1
[root@node2 ~]# pvcreate /dev/sdc1
  Physical volume "/dev/sdc1" successfully created
[root@node2 ~]# vgcreate samba_vg /dev/sdc1
  Volume group "samba_vg" successfully created
[root@node2 ~]# lvcreate -L 1G -n ctdb  samba_vg
  Logical volume "ctdb" created
[root@node2 ~]# lvcreate -L 9G -n samba  samba_vg
  Logical volume "samba" created

要执行的操作过程

  • 创建一个多节点集群(对于本文,我将使用 2 个节点)
  • 以 gfs2 格式为 samba 和 ctdb 分别创建 2 个逻辑卷
  • 为 qdisk 创建一个分区
  • 启动集群服务
  • 安装准备工作包
  • 配置ctdb和samba
  • 启动ctdb服务
日期:2020-06-02 22:18:26 来源:oir作者:oir