在开始使用 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服务