使用GFS和DRBD在CentOS 5.5上进行Samba CTDB集群部署

sco的自我修养 2010-12-09

1、初步说明

Linux发行版:我们使用的是CentOS 5.5 64位发行版,当然本文介绍的方法一样适用于Fedora和Red Hat Enterprise Linux,CentOS的安装很简单,安装时选择基础包和其它你需要的软件包,值得注意的是,我们使用DRBD复制节点之间的数据,它需要独占一个磁盘或分区,因此在安装CentOS时注意预留好空间或直接为DRBD创建好一个分区。

网络硬件和拓扑结构:在每个节点上,我们使用了两块千兆网卡,一个(eth0)连接到网络(LAN),另一个(eth1)通过交叉线实现两个节点间的连接,DRBD在两个节点之间复制数据时,是不会通过网络交换机或其它网络设备的,而是直接走交叉线。

  • 本教程使用的两个物理节点分别是:node1.clusterbr.int和node2.clusterbr.int。
  • node1.clustersmb.int:使用IP 10.0.0.181 (LAN) 和IP 172.16.0.1 (交叉)
  • node2.clustersmb.int:使用IP 10.0.0.182 (LAN) 和IP 172.16.0.2 (交叉)
  • vip1.clustersmb.int:它是集群IP,来自节点1 10.0.0.183
  • vip2.clustersmb.int:它是集群IP,来自节点2 10.0.0.184

磁盘:两个节点均配备了两块磁盘,/dev/sda安装操作系统,/dev/sdb供DRBD使用,正如前面提到的,只使用一块磁盘也是可以的,只需要为DRBD分配一个独立的分区即可。

CTDB:它是TDB的集群实现,为了在集群文件系统上使用Samba,我们需要一个主动/主动集群,让两边的smb服务都能响应网络请求,详细信息请参考http://ctdb.samba.org/

2、准备节点

首先,我们需要禁用SELinux,用vi打开selinux配置文件:

vi /etc/selinux/config

修改下面这一行内容,其它内容不变:

SELINUX=disabled

接下来需要修改主机名和节点的网关。

vi /etc/sysconfig/network

节点1:

NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=node1.clustersmb.int
GATEWAY=10.0.0.9

节点2:

NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=node2.clustersmb.int
GATEWAY=10.0.0.9

接下来配置网络接口。

节点1 LAN接口:

vi /etc/sysconfig/network-scripts/ifcfg-eth0

内容如下:

DEVICE=eth0
BOOTPROTO=static
IPADDR=10.0.0.181
NETMASK=255.255.255.0
ONBOOT=yes
HWADDR=a6:1e:3d:67:66:78

节点1交叉/DRBD接口:

vi /etc/sysconfig/network-scripts/ifcfg-eth1

内容如下:

DEVICE=eth1
BOOTPROTO=static
IPADDR=172.16.0.1
NETMASK=255.255.255.0
ONBOOT=yes
HWADDR=ee:ef:ff:9a:9a:57

节点2 LAN 接口:

vi /etc/sysconfig/network-scripts/ifcfg-eth0

内容如下:

DEVICE=eth0
BOOTPROTO=static
IPADDR=10.0.0.182
NETMASK=255.255.255.0
ONBOOT=yes
HWADDR=52:52:a1:1a:62:32

节点2交叉/DRBD接口:

vi /etc/sysconfig/network-scripts/ifcfg-eth1

内容如下:

DEVICE=eth1
BOOTPROTO=static
IPADDR=172.16.0.2
NETMASK=255.255.255.0
ONBOOT=yes
HWADDR=1a:18:b2:50:96:1e

接下来在两个节点上设置DNS配置。

vi /etc/resolv.conf

内容如下:

search clustersmb.int
nameserver 10.0.0.9

接下来配置基本的主机名解析,打开/etc/hosts文件:

vi /etc/hosts

内容如下:

127.0.0.1localhost.localdomain localhost
10.0.0.191 node1.clustersmb.intnode1
10.0.0.192 node2.clustersmb.intnode2

Ps:这里根据你的实际情况可以添加更多类似的快速解析条目。

设置好后,检查一下网络连接是否正常,首先在节点1上通过LAN接口ping节点2。

[root@node1 ~]# ping -c 2 node2
PING node2 (10.0.0.182) 56(84) bytes of data.
64 bytes from node2 (10.0.0.182): icmp_seq=1 ttl=64 time=0.089 ms
64 bytes from node2 (10.0.0.182): icmp_seq=2 ttl=64 time=0.082 ms
--- node2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.082/0.085/0.089/0.009 ms

然后通过交叉接口ping节点2。

[root@node1 ~]# ping -c 2 172.16.0.2
PING 172.16.0.2 (172.16.0.2) 56(84) bytes of data.
64 bytes from 172.16.0.2: icmp_seq=1 ttl=64 time=0.083 ms
64 bytes from 172.16.0.2: icmp_seq=2 ttl=64 time=0.083 ms
--- 172.16.0.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.083/0.083/0.083/0.000 ms

一切正常,然后在节点2上通过LAN接口ping节点1。

[root@node2 ~]# ping -c 2 node1
PING node1 (10.0.0.181) 56(84) bytes of data.
64 bytes from node1 (10.0.0.181): icmp_seq=1 ttl=64 time=0.068 ms
64 bytes from node1 (10.0.0.181): icmp_seq=2 ttl=64 time=0.063 ms
--- node1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.063/0.065/0.068/0.008 ms

接下来通过交叉接口ping节点1。

[root@node2 ~]# ping -c 2 172.16.0.1
PING 172.16.0.1 (172.16.0.1) 56(84) bytes of data.
64 bytes from 172.16.0.1: icmp_seq=1 ttl=64 time=1.36 ms
64 bytes from 172.16.0.1: icmp_seq=2 ttl=64 time=0.075 ms
--- 172.16.0.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.075/0.722/1.369/0.647 ms

配置启动选项,我将启动级别设为3。

vi /etc/inittab

修改下面这行内容,其它不变。

id:3:initdefault:

我喜欢将多余的启动服务去掉,只留下真正需要的服务,下面是我需要的服务列表。

使用GFS和DRBD在CentOS 5.5上进行Samba CTDB集群部署

现在需要重启两个节点,让配置生效。

Reboot

3、安装先决条件和集群程序包

在开始之前需要安装一些先决条件程序包。

yum -y install drbd82 kmod-drbd82 samba

接下来安装Red Hat集群套件。

yum -y groupinstall "Cluster Storage" "Clustering"

4、配置DRBD

首先,我们需要在两个节点上配置/etc/drbd.conf。

vi /etc/drbd.conf

内容如下:

global {
usage-count yes;
}
common {
syncer {
rate 100M;
al-extents 257;
}
}
resource r0 {
protocol C;
startup {
become-primary-on both; ### For Primary/Primary ###
degr-wfc-timeout 60;
wfc-timeout30;
}
disk {
on-io-errordetach;
}
net {
allow-two-primaries;### For Primary/Primary ###
cram-hmac-alg sha1;
shared-secret "mysecret";
after-sb-0pri discard-zero-changes;
after-sb-1pri violently-as0p;
after-sb-2pri violently-as0p;
}
on node1.clustersmb.int {
device /dev/drbd0;
disk/dev/sdb;
address172.16.0.1:7788;
meta-diskinternal;
}
on node2.clustersmb.int {
device /dev/drbd0;
disk/dev/sdb;
address172.16.0.1:7788;
meta-diskinternal;
}
}

配置要点:

Resource:由DRBD管理的资源,注意我们称之为“r0”。

Disk:DRBD要使用的磁盘(或磁盘分区)。

Address:DRBD要使用的IP地址和端口号(注意我们使用的是交叉接口)。

Syncer:节点间的传输速度(我们使用100M,因为我们用的是千兆网卡)。

如果要任何疑问,请参考DRBD用户指南:www.drbd.org/users-guide-emb/

接下来我们在r0资源上创建元数据,在两个节点上执行下面的命令:

drbdadm create-md r0

接下来启动DRBD服务,创建initdb,在两个节点上执行下面的命令:

/etc/init.d/drbd start

为了让两个节点都成为主节点,在两个节点上执行下面的命令:

drbdsetup /dev/drbd0 primary -o

如果要检查同步的进度和DRBD资源的状态,查看/proc/drbd:

cat /proc/drbd

现在需要等待同步结束,根据同步数据大小和磁盘性能,这个时间可能会很长,同步结束后,我们可以查看资源r0的状态。

节点1:

[root@node1 ~]# cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-x8664-build, 2008-10-03 11:30:17
0: cs:Connected st:Primary/Primary ds:UpToDate/UpToDate C r---
ns:2097052 nr:0 dw:0 dr:2097052 al:0 bm:128 lo:0 pe:0 ua:0 ap:0 oos:0

节点2:

[root@node2 ~]# cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-x8664-build, 2008-10-03 11:30:17
0: cs:Connected st:Primary/Primary ds:UpToDate/UpToDate C r---
ns:0 nr:2097052 dw:2097052 dr:0 al:0 bm:128 lo:0 pe:0 ua:0 ap:0 oos:0

需要注意的是,两个服务器都是最新状态(UpToDate/UpToDate),都是主节点(Primary/Primary),有关状态的详细信息,请参考www.drbd.org/users-guide-emb/ch-admin.html#s-proc-drbd

我们需要将DRBD服务设为随系统启动而启动。

chkconfig --level 35 drbd on

5、配置GFS

接下来需要配置Red Hat全局文件系统(GFS),它是DRBD要使用的集群文件系统,首先,我们需要在两个节点上配置/etc/cluster/cluster.conf。

vi /etc/cluster/cluster.conf

内容如下:

<?xml version="1.0\"?>
<cluster name="cluster1" config_version="3">
<cman two_node="1" expected_votes="1"/>
<clusternodes>
<clusternode name="node1.clustersmb.int" votes="1" nodeid="1">
<fence>
<method name="single">
<device name="manual" ipaddr="10.0.0.181"/>
</method>
</fence>
</clusternode>
<clusternode name="node2.clustersmb.int" votes="1" nodeid="2">
<fence>
<method name="single">
<device name="manual" ipaddr="10.0.0.182"/>
</method>
</fence>
</clusternode>
</clusternodes>
<fence_daemon clean_start="1" post_fail_delay="0" post_join_delay="3"/>
<fencedevices>
<fencedevice name="manual" agent="fence_manual"/>
</fencedevices>
</cluster>

接下来需要在两个节点上启动cman服务(同时启动)。

/etc/init.d/cman start

然后在两个节点上启动其他服务。

/etc/init.d/clvmd start
/etc/init.d/gfs start
/etc/init.d/gfs2 start

我们必须确保两个节点上所有服务都在系统初始化时启动。

chkconfig --level 35 cman on
chkconfig --level 35 clvmd on
chkconfig --level 35 gfs on
chkconfig --level 35 gfs2 on

接下来在任一节点上格式化设备。

gfs_mkfs -p lock_dlm -t cluster1:gfs -j 2 /dev/drbd0

然后在两个节点上创建挂载点,并挂载drbd设备。

mkdir /clusterdata
mount -t gfs /dev/drbd0 /clusterdata

在两个节点上,将设备添加到fstab中。

vi /etc/fstab

在文件后面追加:

/dev/drbd0 /clusterdatagfsdefaults0 0

接下来最好检查一下集群文件系统是否工作正常,在节点1上执行:

tar -zcvf /clusterdata/backup-test.tgz /etc/

然后在节点2上检查文件是否存在。

[root@node2 ~]# ls -l /clusterdata
total 12576
-rw-r--r-- 1 root root 12844520 Jul 23 16:01 backup-test.tgz

接下来测试节点2是否可写入,在节点2上执行:

tar -zcvf /clusterdata/backup-test2.tgz /etc/

在节点1上检查两个文件是否存在。

[root@no2 ~]# ls -l /clusterdata/
total 25160
-rw-r--r-- 1 root root 12850665 Jul 23 16:03 backup-test2.tgz
-rw-r--r-- 1 root root 12844520 Jul 23 16:01 backup-test.tgz

如果一切正常,我们还可以在任一节点上删除文件。

rm -f /clusterdata/backup*

6、配置Samba

Samba配置非常简单,相关教程已经很多,本文不打算详细讲解如何配置Samba,只简要介绍一些基本的配置,在两个节点上执行:

vi /etc/samba/smb.conf

内容如下:

[global]
clustering = yes
idmap backend = tdb2
private dir=/clusterdata/ctdb
fileid:mapping = fsname
use mmap = no
nt acl support = yes
ea support = yes
[public]
comment = public share
path = /clusterdata/public
public = yes
writeable = yes
only guest = yes

我们必须在任一节点上创建Samba要使用的目录。

mkdir /clusterdata/ctdb
mkdir /clusterdata/public
chmod 777 /clusterdata/public

在任一节点上执行下面的命令给Samba添加root用户:

smbpasswd -a root

7、配置CTDB

安装CTDB的过程很简单,首先下载它(注意,下面的操作要在两个节点上执行)。

cd /usr/src
rsync -avz samba.org::ftp/unpacked/ctdb .
cd ctdb/

编译

cd /usr/src/ctdb/
./autogen.sh
./configure
make
make install

创建启动脚本,配置链接。

cp config/ctdb.sysconfig /etc/sysconfig/ctdb
cp config/ctdb.init /etc/rc.d/init.d/ctdb
chmod +x /etc/init.d/ctdb
ln -s /usr/local/etc/ctdb/ /etc/ctdb
ln -s /usr/local/bin/ctdb /usr/bin/ctdb
ln -s /usr/local/sbin/ctdbd /usr/sbin/ctdbd

接下来在两个节点上打开/etc/sysconfig/ctdb文件。

vi /etc/sysconfig/ctdb

内容修改如下:

CTDB_RECOVERY_LOCK="/dadoscluster/ctdb/storage"
CTDB_PUBLIC_INTERFACE=eth0
CTDB_PUBLIC_ADDRESSES=/etc/ctdb/public_addresses
CTDB_MANAGES_SAMBA=yes
ulimit -n 10000
CTDB_NODES=/etc/ctdb/nodes
CTDB_LOGFILE=/var/log/log.ctdb
CTDB_DEBUGLEVEL=2
CTDB_PUBLIC_NETWORK="10.0.0.0/24"
CTDB_PUBLIC_GATEWAY="10.0.0.9"

然后在两个节点上打开/etc/ctdb/public_addresses。

vi /etc/ctdb/public_addresses

内容如下:

10.0.0.183/24
10.0.0.184/24

接着在两个节点上打开/etc/ctdb/nodes。

vi /etc/ctdb/nodes

内容如下:

10.0.0.181
10.0.0.182

再在两个节点上打开/etc/ctdb/events.d/11.route。

vi /etc/ctdb/events.d/11.route

内容如下:

#!/bin/sh
. /etc/ctdb/functions
loadconfig ctdb
cmd="$1"
shift
case $cmd in
takeip)
# we ignore errors from this, as the route might be up already when we're grabbing
# a 2nd IP on this interface
/sbin/ip route add $CTDB_PUBLIC_NETWORK via $CTDB_PUBLIC_GATEWAY dev $1 2> /dev/null
;;
esac
exit 0

给脚本设置可执行权限。

chmod +x /etc/ctdb/events.d/11.route

最后,启动相关服务。

/etc/init.d/ctdb start
/etc/init.d/smb start
chkconfig --level 35 ctdb on
chkconfig --level 35 smb on

至此,一个Samba主动/主动集群就搭建好了。

原文出处:http://www.howtoforge.com/setting-up-an-active-active-samba-ctdb-cluster-using-gfs-and-drbd-centos-5.5

相关推荐