Samba 冗長化 (HAクラスタ構成)(目次)

Table of Contents
↑

システム構成

samba_ha.jpg

HeartbeatとDRBDを利用してSambaのHAクラスタ(Active/Stanby)を実現します。
Sambaのデータ(/data)はDRBDでネットワーク越しのデータミラーリングを行い、Heartbeatを利用して自動フェイルオーバーを行ないます。

↑

プライマリ側

  • ホスト名(IP)
    • serv11(192.168.11.11)
  • OS
    • CentOS 5.5 (kernel 2.6.18-194.11.1.el5)
  • パッケージ
    • samba3x-common-3.3.8-0.52.el5_5
    • samba3x-3.3.8-0.52.el5_5
    • samba3x-winbind-3.3.8-0.52.el5_5
    • samba3x-swat-3.3.8-0.52.el5_5
    • samba3x-client-3.3.8-0.52.el5_5
    • kmod-drbd83-8.3.8-1.el5.centos
    • drbd83-8.3.8-1.el5.centos
    • heartbeat-2.1.3-3.el5.centos
↑

セカンダリ側

  • ホスト名(IP)
  • OS
    • CentOS 5.5 (kernel 2.6.18-194.11.1.el5)
  • パッケージ
    • samba3x-common-3.3.8-0.52.el5_5
    • samba3x-3.3.8-0.52.el5_5
    • samba3x-winbind-3.3.8-0.52.el5_5
    • samba3x-swat-3.3.8-0.52.el5_5
    • samba3x-client-3.3.8-0.52.el5_5
    • kmod-drbd83-8.3.8-1.el5.centos
    • drbd83-8.3.8-1.el5.centos
    • heartbeat-2.1.3-3.el5.centos
↑

仮想IP

  • ホスト名(IP)
↑

DRBDのインストール・設定

↑

DRBDパーティンションの作成

↑

メタディスク用のパーティンション作成

  • メタディスクのサイズはDRBDユーザーズガイドに計算式があるので参考にして下さい。
    ちなみに0.7系では128M固定です。
    http://www.drbd.jp/users-guide/ch-internals.html#s-internal-meta-data

  • ざっくり計算すると以下のようになります。
    しかし、下記容量ではメタデータ領域が小さいとの警告が出る場合があります。
    データ容量 メタデータ
    10GB 2MB
    100GB 5MB
    1TB 32MB
    10TB 310MB


  • 今回のディスクは5GBですが、起動時に警告が表示されるため、200MBのメタデータ領域を作成します。
    # fdisk /dev/sdbコマンド (m でヘルプ): nコマンドアクション   e   拡張   p   基本領域 (1-4)p領域番号 (1-4): 1最初 シリンダ (1-652, default 1): 1終点 シリンダ または +サイズ または +サイズM または +サイズK (1-652, default 652): +200M
↑

データ用のパーティンション作成

  • 残りは全てデータ領域とします。
    コマンド (m でヘルプ): nコマンドアクション   e   拡張   p   基本領域 (1-4)p領域番号 (1-4): 2最初 シリンダ (26-652, default 26):Using default value 26終点 シリンダ または +サイズ または +サイズM または +サイズK (26-652, default 652):Using default value 652
  • パーティション情報をセーブして終了します。
    コマンド (m でヘルプ): w領域テーブルは交換されました!ioctl() を呼び出して領域テーブルを再読込みします。ディスクを同期させます。
↑

DRBDのインストール

  • DRBDはyumで8.3をインストールします。
    # yum install drbd83# yum install kmod-drbd83

↑

DRBDの設定

↑

drbd.confの設定

  • DRBDの設定を行います。セカンダリ側も同じ設定をします。
↑

メタファイルの作成

  • meta-diskに「internal」を指定した場合、ext3などのファイルシステムが作成されているとメタファイルの作成に失敗する事があるため、ddコマンドを利用してmeta-diskのデバイスをゼロで埋めます。
    詳細は 公式サイトFAQ (英文)を参照
    # dd if=/dev/zero bs=1M count=1 of=/dev/sdb1; sync

  • メタファイルを作成します。
    # drbdadm create-md r0Writing meta data...initializing activity logNOT initialized bitmapNew drbd meta data block successfully created.
↑

自動起動の設定

  • 自動起動をonに設定します
    # chkconfig drbd on

  • chkconfigコマンドで自動起動のonを確認します。
    # chkconfig --list drbddrbd            0:off   1:off   2:on    3:on    4:on    5:on    6:off
↑

DRBDの起動

  • もう1台のDRBDが起動していないため、最初に起動したサーバでは以下のような警告が出ますが、
    yesとタイプして先に進みます。起動に成功したら、もう1台も起動します。
    #  /etc/init.d/drbd startStarting DRBD resources: [r0Found valid meta data in the expected location, 0 bytes into /dev/sdb1.d(r0) s(r0) n(r0) ]..........*************************************************************** DRBD's startup script waits for the peer node(s) to appear. - In case this node was already a degraded cluster before the   reboot the timeout is 0 seconds. [degr-wfc-timeout] - If the peer was available before the reboot the timeout will   expire after 120 seconds. [wfc-timeout]   (These values are for resource 'r0'; 0 sec -> wait forever) To abort waiting enter 'yes' [  13]:yes
  • 2台ともDRBDを起動したら、以下のようにして状態を確認します。 「ro:Secondary/Secondary」の通り、起動時は両方ともセカンダリで接続されています。
↑

プライマリへの昇格(プライマリ側のみ)

  • プライマリにしたいサーバで、以下のコマンドを実行するとプライマリへの昇格処理が行われ、同時にデータ同期が実施されます。
    # drbdadm -- --overwrite-data-of-peer primary r0

  • 次にデータの同期状態を以下のコマンドで確認します。
↑

DRBDボリュームのマウント(プライマリ側のみ)

  • DRBDボリュームにファイルシステムを作成後、マウントします。
    [root@serv11 ~]# mke2fs -j /dev/drbd0[root@serv11 ~]# mount -t ext3 /dev/drbd0 /data/

  • ファイルがマウントされている事を確認します。
  • dfコマンドでもマウントを確認する事が可能です。
    [root@serv11 ~]# df -hFilesystem          サイズ  使用  残り 使用% マウント位置/dev/mapper/VolGroup00-LogVol00                      7.2G  2.7G  4.2G  39% //dev/sda1              99M   25M   70M  26% /boottmpfs                 125M     0  125M   0% /dev/shm/dev/drbd0            4.8G  138M  4.4G   3% /data


これでDRBDボリュームが利用可能になります。

↑

DRBDの動作確認

プライマリ側で作成したテストファイルがセカンダリ側でも表示される事を確認します。

  • プライマリ側でテストファイルを作成後、セカンダリに降格させる。
    (セカンダリへの降格には、DRBDボリュームをアンマウントさせる必要があります)
    [root@serv11 ~]# echo test > /data/test.txt[root@serv11 ~]# umount /data[root@serv11 ~]# drbdadm secondary r0
  • セカンダリ側をプライマリに昇格させて、テストファイルを確認します。
    [root@serv12 ~]# drbdadm primary r0[root@serv12 ~]# mount -t ext3 /dev/drbd0 /data[root@serv12 ~]# cat /data/test.txttest
    プライマリ側で作成したファイルが見れれば、DRBDの動作に問題はありません。
↑

Sambaのインストール・設定

↑

Sambaのインストール

  • sambaは3.3系をインストールします
    # yum install samba3x# yum install samba3x-swat# yum install samba3x-client

↑

sambaの設定

↑

smb.confの編集

  • sambaの設定ファイル「/etc/samba/smb.conf」を編集します。
    # vi /etc/samba/smb.conf[global]workgroup = MYGROUPserver string = Samba Server Version %vlog file = /var/log/samba/log.%mmax log size = 50security = userpassdb backend = tdbsamload printers = no   #変更cups options = rawunix charset = UTF-8       #追加dos charset = UTF-8        #追加display charset = UTF-8    #追加hosts allow = 192.168.11.  #追加[public]    path = /data/public    guest ok = no    writable = yes[watch]    path = /data/watch    guest ok = yes    writable = no    browseable = no

    ※/data/watchはサービス監視用の共有フォルダです。

  • 設定ファイルの構文チェックを行います。
    # testparm
↑

共有フォルダの作成

  • 共有フォルダを作成します。
    # mkdir -m 1777 /data/public# mkdir -m 1777 /data/watch
    ※共有フォルダにスティッキービットを指定する事で、自分が作成したファイルのみ削除可能になります。
↑

ユーザ作成

  • UNIXユーザとしてhogeを追加します。
    # useradd hoge# passwd hogenew password:retype new password:
  • Sambaユーザとしてhogeを追加します。(※hogeはUNIXユーザとして登録済みであること)
    # pdbedit -a hogenew password:retype new password:Unix username:        hogeNT username:Account Flags:        [U          ]User SID:             S-1-5-21-2455231410-8090910-4175433884-1000Primary Group SID:    S-1-5-21-2455231410-8090910-4175433884-513Full Name:Home Directory:       \\serv11\hogeHomeDir Drive:Logon Script:Profile Path:         \\serv11\hoge\profileDomain:               SERV11Account desc:Workstations:Munged dial:Logon time:           0Logoff time:          neverKickoff time:         neverPassword last set:    土, 04  9月 2010 09:15:57 JSTPassword can change:  土, 04  9月 2010 09:15:57 JSTPassword must change: neverLast bad password   : 0Bad password count  : 0Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
↑

自動起動の設定

  • SambaはHeartbeat経由で起動する必要があるため自動起動をOFFにします
    # chkconfig smb off

  • chkconfigコマンドで自動起動offを確認します。
    #  chkconfig --list smbsmb             0:off   1:off   2:off   3:off   4:off   5:off   6:off
↑

Heartbeatのインストール・設定

↑

Heartbeatのインストール

  • yumでインストールします。 先にstonithをインストールしないとheartbeatのインストールに失敗します。
    # yum install heartbeat-stonith# yum install heartbeat
↑

Heartbeatの設定

  • heartbeatの設定で利用するファイルは以下の通りです。尚、heartbeatの設定は特に記述がない限り、プライマリとセカンダリで全く同じ設定を行います。
    ファイル名 説明 備考
    /etc/ha.d/ha.cf クラスタ構成を定義するメイン設定ファイル
    /etc/ha.d/haresources Version1用のリソース設定ファイル
    /etc/ha.d/authkeys 認証設定ファイル


  • 設定ファイルはサンプルがあるのでコピーします。
    # cp /usr/share/doc/heartbeat-2.1.3/authkeys /etc/ha.d/# cp /usr/share/doc/heartbeat-2.1.3/ha.cf /etc/ha.d/# cp /usr/share/doc/heartbeat-2.1.3/haresources /etc/ha.d/

  • Samba用のリソース起動スクリプトを用意します。
    # ln -s /etc/init.d/smb /etc/ha.d/resource.d/smb 
↑

ha.cfの設定

  • ha.cfを編集します。ほとんどの設定がコメントアウトを解除しただけです。
    # vi /etc/ha.d/ha.cflogfile /var/log/ha-loglogfacility local0keepalive 2deadtime 30warntime 10initdead 120udpport 694#baud    19200      # シリアルケーブル用の設定(今回は利用しない)#serial  /dev/ttyS0 # シリアルケーブル用の設定(今回は利用しない)bcast eth0 auto_failback offnode    serv11  #uname -nnode    serv12  #uname -nrespawn root /usr/local/bin/check_service #サービス監視スクリプト
↑

haresourcesの設定

  • 共有リソースの設定はDRBDに関する設定を一行追加します。
    • 書式  [node-name resource1 resource2 ... resourceN]
    • resourceの部分は「/etc/ha.d/resource.d」配下のファイル名を記載します。
    • 各リソースに渡す引数は「::」で区切って記述します。
    • リソースがIPADDRの場合はリソース名を省略可能です。
      # vi /etc/ha.d/haresourcesserv11 drbddisk::r0 Filesystem::/dev/drbd0::/data::ext3 smb  192.168.11.10/24

↑

authkeysの設定

  • 認証の設定を行います。認証は現時点で最もセキュリティレベルの高いsha1を利用します。
    # vi /etc/ha.d/authkeysauth 22 sha1 test
  • セキュリティを確保するため、ファイルパーミッションを変更します。セカンダリ側も同様に設定します。
    # chmod 600 /etc/ha.d/authkeys 
↑

サービス監視スクリプトの作成

  • Heartbeatはサーバ間のフェイルオーバを自動的に行いますが、Sambaサービスが異常終了してもフェイルオーバしません。
    そのため、監視スクリプトを作成してサービスが正しく動作している事を監視する必要があります。
    # vi /usr/local/bin/check_service#!/bin/sh#=============================================# heartbeat用 Sambaサービス監視スクリプト#=============================================#-----------------------------------------------------------------INTERVAL=5                   #  監視間隔VIP=192.168.11.10            #  仮想IPGATEWAY=192.168.11.1         #  ゲートウェイMNT_POINT=/mnt/samba#-----------------------------------------------------------------#ログを記録するLog_Write() {    /bin/logger -p local0.crit -t  "check_service" $1}#-----------------------------------------------------------------while :do        sleep $INTERVAL        #        # 仮想IPアドレスの有無を確認        #        /etc/ha.d/resource.d/IPaddr $VIP status > /dev/null 2>&1        if [ $? -ne 0 ]        then                continue        fi        #        # ゲートウェイとの通信確認        #        ping -c 1 -w 1 $GATEWAY > /dev/null 2>&1        if [ $? -ne 0 ]        then                Log_Write "Destination ".$GATEWAY." Unreachable"                /usr/lib/heartbeat/heartbeat -k                exit        fi        #        # Sambaのサービス確認        #        mount.cifs //$VIP/watch $MNT_POINT -o guest        if [ $? -ne 0 ]        then                Log_Write "Samba service failed"                /usr/lib/heartbeat/heartbeat -k                exit        else                umount $MNT_POINT        fidone
    ※whileの後の:(コロン)はtrueと同じですが、:の方がtrueより実行効率が良いです。
  • スクリプトに実行権限を付与します。
    # chmod +x /usr/local/bin/check_service

  • サービス確認用のマウントポイントを作成します。
    # mkdir /mnt/samba
↑

自動起動の設定

  • 自動起動をonに設定します。セカンダリ側も同様に設定します。
    # chkconfig heartbeat on

  • chkconfigコマンドで自動起動のonを確認します。
    # chkconfig --list heartbeat heartbeat       0:off   1:off   2:on    3:on    4:on    5:on    6:off
↑

Heartbeatの起動

  • Sambaサービスを停止させDRBDをセカンダリへ変更します。
    # /etc/init.d/smb stop# umount /data# drbdadm secondary r0

  • Heartbeatを起動します。セカンダリ側も同様に起動させます。
    # /etc/init.d/heartbeat start

↑

冗長化(HA)の動作確認

プライマリ側のSambaを停止させてフェイルオーバー、フェイルバックの動作確認を行います。

↑

初期状態の確認

  • serv11(プライマリ側)の状態を確認します。
    仮想IPが割り当てられている事を確認します。
    [root@serv11 ~]# ifconfig -a eth0:0eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:BF:CC:32          inet addr:192.168.11.10  Bcast:192.168.11.255  Mask:255.255.255.0          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1          Interrupt:177 Base address:0x1400

  • DRBD領域をマウントしている事を確認します。
  • Sambaが起動されている事を確認します。
    [root@serv11 ~]# ps ax |grep smb 9885 ?        Ss     0:00 smbd -D 9886 ?        S      0:00 smbd -D


  • serv12(セカンダリ側)の状態を確認します。
    仮想IPが割り当てられていない事を確認します。
    [root@serv12 ~]# ifconfig -a eth0:0eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:0F:CB:EB          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1          Interrupt:177 Base address:0x1400

  • DRBD領域もマウントされていない事を確認します。
  • Sambaが起動していない事を確認します。
    [root@serv12 ~]# ps ax |grep smb

↑

フェイルオーバーの確認

  • フェイルオーバーの確認をするため、serv11(プライマリ側)のSambaを停止させます。
    [root@serv11 ~]# /etc/init.d/smb stopSMB サービスを停止中:                                      [  OK  ]


  • serv11の状態を確認します。
    Sambaを終了させたため、仮想IPが割り当てられていません。
    [root@serv11 ~]# ifconfig -a eth0:0eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:BF:CC:32          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1          Interrupt:177 Base address:0x1400
  • DRBD領域もマウントされていません。


  • Sambaも起動していません。
    [root@serv11 ~]# ps ax |grep smb


  • serv12の状態を確認します。
    serv11側でSambaを終了させたため、仮想IPが割り当てられています。
    [root@serv12 ~]# ifconfig -a eth0:0eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:0F:CB:EB          inet addr:192.168.11.10  Bcast:192.168.11.255  Mask:255.255.255.0          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1          Interrupt:177 Base address:0x1400
  • DRBD領域もマウントされています。


  • Sambaも起動しています。
    [root@serv12 ~]# ps ax |grep smb19695 ?        Ss     0:00 smbd -D19696 ?        S      0:00 smbd -D
  • serv11側のheartbeatがサービス監視スクリプトにより停止しているため起動させます。
    [root@serv11 ~]# /etc/init.d/heartbeat startlogd is already runningStarting High-Availability services:                                                           [  OK  ]
    フェイルオーバの確認は終了です。
↑

FAQ

#include(): No such page: FAQ/DRBD
↑

参考

このエントリーをはてなブックマークに追加
Last-modified: 2010-09-05 (日) 19:43:11   最終更新のRSS