2011年7月24日日曜日

RHEL6.1 を使い倒す Resilient Storage(Clustered Samba)


このエントリーをはてなブックマークに追加


前回は3ノード、3ストレージを使ってCLVM/GFS2の環境を構築した。その続きでGFS2上にClustered Sambaを構築する。

といっても実際はCTDB を稼働させ、そこでSambaをCTDBを連携させるようにしてやるだけ。


手順としては前回の続きから。


SELinuxの無効化

前回まではSELinux ONの状態で作業していたが今回は無効にする必要がある。

CTDBが作成するUNIX DOMAIN SOCKETへSambaがアクセスする際に、SELinuxが有効だとアクセスが拒否されてしまいSambaが起動できなくなってしまうためだ。

[root@rhel6-2 ~]# setenforce 0
[root@rhel6-2 ~]# getenforce
Disabled

[root@rhel6-3 ~]# setenforce 0
[root@rhel6-3 ~]# getenforce
Disabled

[root@rhel6-4 ~]# setenforce 0
[root@rhel6-4 ~]# getenforce
Disabled



CTDBとsambaのインストール

[root@rhel6-2 ~]# yum install samba
[root@rhel6-2 ~]# yum install ctdb

[root@rhel6-3 ~]# yum install samba
[root@rhel6-3 ~]# yum install ctdb

[root@rhel6-4 ~]# yum install samba
[root@rhel6-4 ~]# yum install ctdb



CTDB用の共有ファイルシステムを作成

CTDBを起動する全てのノードからアクセス可能な領域を作成する。これはGFS2のようなクラスタファイルシステム上である必要がある。
[root@rhel6-2 ~]# lvcreate -L 1G -n clvm-ctdb01 clvg01
  Logical volume "clvm-ctdb01" created

[root@rhel6-2 ~]# lvs
  LV          VG        Attr   LSize  Origin Snap%  Move Log Copy%  Convert
  clvm-ctdb01 clvg01    -wi-a-  1.00g
  clvm01      clvg01    -wi-ao 50.00g
  lv_root     vg_rhel62 -wi-ao 97.54g
  lv_swap     vg_rhel62 -wi-ao  1.97g

[root@rhel6-3 ~]# lvs
  LV          VG        Attr   LSize  Origin Snap%  Move Log Copy%  Convert
  clvm-ctdb01 clvg01    -wi-a-  1.00g
  clvm01      clvg01    -wi-ao 50.00g
  lv_root     vg_rhel63 -wi-ao 97.54g
  lv_swap     vg_rhel63 -wi-ao  1.97g

[root@rhel6-4 ~]# lvs
  LV          VG        Attr   LSize  Origin Snap%  Move Log Copy%  Convert
  clvm-ctdb01 clvg01    -wi-a-  1.00g
  clvm01      clvg01    -wi-ao 50.00g
  lv_root     vg_rhel64 -wi-ao 97.54g
  lv_swap     vg_rhel64 -wi-ao  1.97g


GFS2フォーマットしてマウントする。
[root@rhel6-2 ~]# mkfs -t gfs2 -j 3 -p lock_dlm -t cluster01:gfs02 /dev/clvg01/clvm-ctdb01
This will destroy any data on /dev/clvg01/clvm-ctdb01.
It appears to contain: symbolic link to `../dm-3'

Are you sure you want to proceed? [y/n] y

Device:                    /dev/clvg01/clvm-ctdb01
Blocksize:                 4096
Device Size                1.00 GB (262144 blocks)
Filesystem Size:           1.00 GB (262142 blocks)
Journals:                  3
Resource Groups:           4
Locking Protocol:          "lock_dlm"
Lock Table:                "cluster01:gfs02"
UUID:                      7BA1391E-6D15-1E16-B364-FE3E872D619C


[root@rhel6-2 ~]# mkdir /mnt/ctdb
[root@rhel6-2 ~]# mount -t gfs2 /dev/clvg01/clvm-ctdb01 /mnt/ctdb

[root@rhel6-3 ~]# mkdir /mnt/ctdb
[root@rhel6-3 ~]# mount -t gfs2 /dev/clvg01/clvm-ctdb01 /mnt/ctdb

[root@rhel6-4 ~]# mkdir /mnt/ctdb
[root@rhel6-4 ~]# mount -t gfs2 /dev/clvg01/clvm-ctdb01 /mnt/ctdb



CTDBの設定

基本ファイルの編集
[root@rhel6-2 ~]# vim /etc/sysconfig/ctdb

# You must specify the location of a shared lock file across all the
# nodes for split brain prevention to work.
# This must be on shared storage.
# CTDB can operate without a reclock file, but this means that there is no
# protection against a split brain.
# It is strongly suggested to NOT run ctdb without a reclock file.
CTDB_RECOVERY_LOCK="/mnt/ctdb/.CTDB_RECOVERY_LOCK"

# Should ctdb do IP takeover? If it should, then specify a file
# containing the list of public IP addresses that ctdb will manage
# Note that these IPs must be different from those in $NODES above
# there is no default.
# The syntax is one line per public address of the form :
#   <ipaddress>/<netmask> <interface>
# Example: 10.1.1.1/24 eth0
#
CTDB_PUBLIC_ADDRESSES=/etc/ctdb/public_addresses

# should ctdb manage starting/stopping the Samba service for you?
# default is to not manage Samba
CTDB_MANAGES_SAMBA=yes

# should ctdb manage starting/stopping Winbind service?
# if left comented out then it will be autodetected based on smb.conf
CTDB_MANAGES_WINBIND=no

# the NODES file must be specified or ctdb won't start
# it should contain a list of IPs that ctdb will use
# it must be exactly the same on all cluster nodes
# defaults to /etc/ctdb/nodes
CTDB_NODES=/etc/ctdb/nodes

# where to log messages
# the default is /var/log/log.ctdb
CTDB_LOGFILE=/var/log/log.ctdb
CTDB_RECOVERY_LOCK・・・クラスタ化されたTDB。先ほど作ったGFS2上に作成する必要がある。
CTDB_PUBLIC_ADDRESSES・・・CTDBは仮想IPを制御してくれる。使いたいアドレスと割り当てるNICを列挙する。
CTDB_MANAGES_SAMBA・・・CTDBからSambaの起動停止を制御する。
CTDB_MANAGES_WINBIND・・・CTDBからWinbindの起動停止を制御する。
CTDB_NODES・・・CTDBに参加するノードのアドレスを列挙する。
CTDB_LOGFILE・・・ログファイルの場所。


参加ノードを列挙する。
[root@rhel6-2 ~]# vim /etc/ctdb/nodes

192.168.1.112
192.168.1.113
192.168.1.114


CTDBに制御させる仮想IPと割り当てるNICを列挙する。
[root@rhel6-2 ~]# vim /etc/ctdb/public_addresses

192.168.1.212/24 eth0
192.168.1.213/24 eth0
192.168.1.214/24 eth0


全ノードへ同じ設定を施す
[root@rhel6-2 ~]# scp /etc/sysconfig/ctdb rhel6-3:/etc/sysconfig
[root@rhel6-2 ~]# scp /etc/sysconfig/ctdb rhel6-4:/etc/sysconfig

[root@rhel6-2 ~]# scp /etc/ctdb/nodes rhel6-3:/etc/ctdb/
[root@rhel6-2 ~]# scp /etc/ctdb/nodes rhel6-4:/etc/ctdb/

[root@rhel6-2 ~]# scp /etc/ctdb/public_addresses rhel6-3:/etc/ctdb/
[root@rhel6-2 ~]# scp /etc/ctdb/public_addresses rhel6-4:/etc/ctdb/

以上でCTDBの設定は終了。



sambaの設定

設定ファイルを以下のように編集する(テストのなので細かい制御は行わない)
[root@rhel6-2 ~]# cat /etc/samba/smb.conf
[global]
        guest ok = yes
        clustering = yes
        netbios name = scale-out-cifs-server
        ctdbd socket = /tmp/ctdb.socket
        log level = 3

[csmb]
        comment = Clustered Samba
        public = yes
        path = /mnt/gfs01/share
        writeable = yes


設定を配布する
[root@rhel6-3 ~]# scp /etc/samba/smb.conf rhel6-3:/etc/samba
[root@rhel6-4 ~]# scp /etc/samba/smb.conf rhel6-4:/etc/samba


パスワードの設定を行う。
[root@rhel6-2 ~]# pdbedit -a -u root



CTDBの起動(Sambaも合わせて起動される)

[root@rhel6-2 ~]# /etc/init.d/ctdb start
ctdbd サービスを起動中: [ OK ]

[root@rhel6-3 ~]# /etc/init.d/ctdb start
ctdbd サービスを起動中: [ OK ]

[root@rhel6-4 ~]# /etc/init.d/ctdb start
ctdbd サービスを起動中: [ OK ]


起動後の状態
[root@rhel6-2 ~]# ctdb status
Number of nodes:3
pnn:0 192.168.1.112    OK (THIS NODE)
pnn:1 192.168.1.113    OK
pnn:2 192.168.1.114    OK
Generation:322772619
Size:3
hash:0 lmaster:0
hash:1 lmaster:1
hash:2 lmaster:2
Recovery mode:NORMAL (0)
Recovery master:0


CTDBによって割り当て足られ仮想IP
[root@rhel6-2 ~]# ip addr list eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:09:e8:ea brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.112/24 brd 192.168.1.255 scope global eth0
    inet 192.168.1.214/24 brd 192.168.1.255 scope global secondary eth0
    inet6 2001:c90:941:1984:a00:27ff:fe09:e8ea/64 scope global dynamic
       valid_lft 2591994sec preferred_lft 604794sec
    inet6 fe80::a00:27ff:fe09:e8ea/64 scope link
       valid_lft forever preferred_lft forever

[root@rhel6-3 ~]# ip addr list eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:51:0e:49 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.113/24 brd 192.168.1.255 scope global eth0
    inet 192.168.1.213/24 brd 192.168.1.255 scope global secondary eth0
    inet6 2001:c90:941:1984:a00:27ff:fe51:e49/64 scope global dynamic
       valid_lft 2591967sec preferred_lft 604767sec
    inet6 fe80::a00:27ff:fe51:e49/64 scope link
       valid_lft forever preferred_lft forever

[root@rhel6-4 ~]# ip addr list eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:f8:f5:8e brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.114/24 brd 192.168.1.255 scope global eth0
    inet 192.168.1.212/24 brd 192.168.1.255 scope global secondary eth0
    inet6 2001:c90:941:1984:a00:27ff:fef8:f58e/64 scope global dynamic
       valid_lft 2591950sec preferred_lft 604750sec
    inet6 fe80::a00:27ff:fef8:f58e/64 scope link
       valid_lft forever preferred_lft forever
仮想IPはランダムに分散される。1台のノードが落ちると別のノードが仮想IPを引き継ぐ。


sambaの起動状態
[root@rhel6-2 ~]# ps -ef |grep smb
root      3668     1  0 Jul23 ?        00:00:00 smbd -D
root      3680  3668  0 Jul23 ?        00:00:00 smbd -D
root      6256  3668  0 Jul23 ?        00:00:00 smbd -D

[root@rhel6-3 ~]# ps -ef |grep smb
root      3505     1  0 Jul23 ?        00:00:00 smbd -D
root      3517  3505  0 Jul23 ?        00:00:00 smbd -D
root      5085  3505  0 Jul23 ?        00:00:00 smbd -D

[root@rhel6-4 ~]# ps -ef |grep smb
root      3796     1  0 Jul23 ?        00:00:00 smbd -D
root      3809  3796  0 Jul23 ?        00:00:00 smbd -D
root      4581  3796  0 Jul23 ?        00:00:03 smbd -D


動作確認

各サーバでsambaを起動できるので、

\\192.168.1.213
\\192.168.1.213
\\192.168.1.213

でアクセス可能になる。以下は初期状態でのアクセス。


1つの共有領域に対してファイル作成、コピー、削除等を行うと、残り2つの領域からもその操作を確認することが可能。


以上。
ここの例では細かい設定は省いて実装の流れを説明しているので、実際に使う場合は細かなところも忘れずに。

0 件のコメント:

コメントを投稿