CLUSTERPRO® D for Linux
ファイルサーバー
(Samba)
改版履歴
版数 改版日付 内容
目次
第
1 章 はじめに... 1
1.1 対象読者と目的...2
1.2 適用範囲 ...2
1.3 表記規則 ...2
1.4 免責事項 ...2
1.5 商標情報 ...3
1.6 最新情報の入手先...3
第
2 章 概要... 4
2.1 機能概要 ...5
2.2 動作環境 ...6
第
3 章 構築手順... 7
3.1 Samba の設定...8
3.1.1 smb サービスの起動設定 ...8
3.1.2 nmb サービスの起動設定 ...8
3.1.3 smb.conf の設定 ...8
3.2 CLUSTERPRO の設定 ...9
3.2.1 リソースグループの設定 ...9
第
4 章 注意事項... 11
付録
A. サンプルスクリプト... 12
A.1 セッション切断用スクリプト ...12
第
1 章
はじめに
目次
1.1 対象読者と目的...2
1.2 適用範囲 ...2
1.3 表記規則 ...2
1.4 免責事項 ...2
1.5 商標情報 ...3
1.6 最新情報の入手先...3
第1 章 はじめに1.1 対象読者と目的
本ガイドは、
CLUSTERPRO D において、Samba と組み合わせて、ファイルサーバーをフェー
ルオーバークラスター化するシステムエンジニアを対象読者としています。
ここでご紹介するソフトウェアや設定例は、あくまで参考情報としてご提供するものであ
り、各ソフトウェアの動作保証を行うものではありません。
1.2 適用範囲
本ガイドでは、以下のバージョンの
CLUSTERPRO を対象としています。
• CLUSTERPRO D 1.0 for Linux (内部バージョン:1.0.5.20340)
バージョンが異なる場合、一部の表示や設定内容が異なる可能性がありますので、ご注意く
ださい。
1.3 表記規則
本書では以下の表記法を使用します。
表記 使用方法 例 []角かっこ ダイアログボックス、メニューなど であることを示します [スタート] をクリックします。 [プロパティ] ダイアログボックス モ ノ ス ペ ー ス フォント パス、コマンドライン、メッセージ、 ファイル名、ファイルパス、関数な どを示します usercmd -s [-h <host_name>] モ ノ ス ペ ー ス フォント中の[]角 か っ こ で 囲 ま れ た部分 角かっこ内の値が省略可能であるこ とを示します usercmd -s [-h <host_name>] モ ノ ス ペ ー ス フ ォ ン ト 中 の<> 山 形 か っ こ で 囲 まれた部分 山形かっこ内の値をユーザーが有効 な値に置き換えて入力することを示 します usercmd -s [-h <host_name>]1.4 免責事項
本書の内容は、予告なしに変更されることがあります。
日本電気株式会社は、本書の技術的もしくは編集上の間違い、欠落について、一切責任をお
いません。
また、お客様が期待される効果を得るために、本書にしたがった導入、使用および使用効果
につきましては、お客様の責任とさせていただきます。
第1 章 はじめに本書に記載されている内容の著作権は、日本電気株式会社に帰属します。本書の内容の一部
または全部を日本電気株式会社の許諾なしに複製、改変、および翻訳することは禁止されて
います。
1.5 商標情報
CLUSTERPRO® は日本電気株式会社の登録商標です。
Linux は、Linus Torvalds 氏の米国およびその他の国における登録商標です。
Red Hat および Red Hat Enterprise Linux は、Red Hat, Inc.の米国およびその他の国における商
標または登録商標です。
CentOS®は、CentOS ltd.の商標または登録商標です。
本書に記載されたその他の製品名および標語は、各社の登録商標または商標です。
1.6 最新情報の入手先
最新の製品情報については、以下の
Web サイトを参照してください。
http://jpn.nec.com/clusterpro/
第1 章 はじめに第
2 章
概要
目次
2.1 機能概要 ...5
2.2 動作環境 ...6
第2 章 概要2.1 機能概要
Samba を利用したファイルサーバーのフェールオーバークラスター化は、CLUSTERPRO D
が各ノード上の
smb サービス、nmb サービスの起動/停止を制御することで実現します。
本ガイドで利用するリソースは以下のとおりです。
• ミラーリソース
共有するディレクトリ内のデータを各ノードにミラーリングするために利用します。
• ファイル共有リソース(Samba)
smb サービス、nmb サービスの起動/停止を制御するために利用します。
なお、本リソースが
smb サービス、nmb サービスを制御するため、OS 起動時に自動起
動しないように設定する必要があります。
• 汎用リソース
停止対象の共有ディレクトリのセッションを切断するために利用します。
• 仮想 IP リソース
クライアントから共有ディレクトリに接続する
IP アドレスとして利用します。
第2 章 概要2.2 動作環境
動作確認で利用した環境は以下のとおりです。
• CentOS 6
項目 内容
OS CentOS 6.6
CLUSTERPRO CLUSTERPRO D 1.0 for Linux (内部バージョン: 1.0.5.20340) samba samba-3.6.23-12.el6.x86_64 samba-common samba-common-3.6.23-12.el6.x86_64
• CentOS 7
項目 内容 OS CentOS 7.1CLUSTERPRO CLUSTERPRO D 1.0 for Linux (内部バージョン: 1.0.5.20340)
samba samba-4.1.12-21.el7_1.x86_64
samba-common samba-common-4.1.12-21.el7_1.x86_64 samba-libs samba-libs-4.1.12-21.el7_1.x86_64
第
3 章
構築手順
目次
3.1 Samba の設定...8
3.2 CLUSTERPRO の設定 ...9
第3 章 構築手順3.1 Samba の設定
ここでは、Samba に関する設定内容について説明します。
なお、後述する設定内容は、
CLUSTERPRO に追加する各ノードで設定する必要があります。
3.1.1 smb サービスの起動設定
smb サービスは、OS 起動時に自動起動しないように設定します。
• Red Hat Enterprise Linux 6/CentOS 6 の場合
chkconfig smb off
• Red Hat Enterprise Linux 7/CentOS 7 の場合
systemctl disable smb.service
3.1.2 nmb サービスの起動設定
nmb サービスは、OS 起動時に自動起動しないように設定します。
• Red Hat Enterprise Linux 6/CentOS 6 の場合
chkconfig nmb off
• Red Hat Enterprise Linux 7/CentOS 7 の場合
systemctl disable nmb.service
3.1.3 smb.conf の設定
smb.conf に以下の内容を追記することで、共有設定を追加します。
なお、security の設定等の smb.conf の設定内容は、用途に合わせて設定してください。
# 共有対象の共有名を指定。 [<共有名>] # 共有対象として、ミラーボリュームのマウント先ディレクトリ、もしくは # ミラーボリュームのマウント先ディレクトリ配下のディレクトリを指定。 path = <共有対象のディレクトリ> # 共有対象に書き込み権限を付与 writeable = yes 第3 章 構築手順3.2 CLUSTERPRO の設定
ここではクラスターの構築は既に完了しているものとして、リソースグループの作成や設定
内容について説明します。
クラスターの構築方法については、
CLUSTERPRO D 1.0 for Linux ユーザーズガイドを参照く
ださい。
3.2.1 リソースグループの設定
1. Advanced WebConsole の TOP 画面で[リソースグループを作成する]を選択します。
リソースの追加画面が表示されます。
2. [リソースを追加]を選択し、以下のリソースを選択します。
• ミラーリソース
• 汎用リソース
• ファイル共有リソース(Samba)
• 仮想 IP リソース
画面上にミラーリソース、汎用リソース、ファイル共有リソース(Samba)、仮想 IP リ
ソースを示すアイコンが追加されます。
3. [詳細設定を表示]のチェックボックスをオンにします。
4. ミラーリソースのアイコンを選択し、設定値を入力します。
a.
[依存関係設定]タブを選択します。
b. [既定の依存関係設定を使用する]のチェックボックスをオフにします。
c.
[リソース固有設定]タブを選択し、以下の項目に設定値を入力します。
• ミラーボリュームのサイズ
• ミラーデータの保存先ディレクトリサイズ
設定値を入力後、ミラーリソースのアイコンが正常であることを確認します。
5. 汎用リソースのアイコンを選択し、設定値を入力します。
a.
[依存関係設定]タブを選択します。
b. [既定の依存関係設定を使用する]のチェックボックスをオフにします。
c.
[依存するリソース]にミラーリソースを追加します。
d. [リソース固有設定]タブを選択します。
第3 章 構築手順入力するスクリプトの内容は、
「セッション切断用スクリプト(
12 ページ)」
を
参考にしてください。
設定値を入力後、汎用リソースのアイコンが正常であることを確認します。
6. ファイル共有リソース(Samba)のアイコンを選択し、設定値を入力します。
a.
[依存関係設定]タブを選択します。
b. [既定の依存関係設定を使用する]のチェックボックスをオフにします。
c.
[依存するリソース]に汎用リソースを追加します。
d. [監視設定]タブを選択します。
e.
[監視リトライ回数]に 1 以上の設定値を入力します。
設定値を入力後、ファイル共有リソース(Samba)のアイコンが正常であることを確認し
ます。
7. 仮想 IP リソースのアイコンを選択し、設定値を入力します。
a.
[依存関係設定]タブを選択します。
b. [既定の依存関係設定を使用する]のチェックボックスをオフにします。
c.
[依存するリソース]にファイル共有リソース(Samba)を追加します。
d. [リソース固有設定]タブを選択し、[仮想 IP アドレス]に設定値を入力します。
設定値を入力後、仮想
IP リソースのアイコンが正常であることを確認します。
8. すべてのリソースのアイコンが正常であることを確認したら[次へ]を選択します。
リソースグループの作成画面が表示されます。
9. [リソースグループ名]に設定値を入力します。
設定値を入力後、リソースグループのアイコンが正常であることを確認します。
10. [完了]を選択します。
[完了]を選択すると、自動的にクラスターの運用管理画面へと遷移します。これでリ
ソースグループの設定は完了です。
第3 章 構築手順第
4 章
注意事項
• 汎用リソースに設定する停止スクリプトでは、共有ディレクトリのセッションを切断す
るために
smb サービス、nmb サービスの再起動を行います。
そのため、リソースグループ停止時には、一時的に以下の事象が発生する場合がありま
す。
- 他リソースグループが制御する共有ディレクトリにアクセスするとエラーが発生
する場合があります。
- 他リソースグループのファイル共有リソース(Samba)の監視処理でエラーが発生す
る場合があります。
本現象発生時に不要なフェールオーバーを回避するには、監視リトライ回数の設定
値を
1 以上にする必要があります。
• 仮想 IP リソースに設定した仮想 IP アドレスを用いていない共有ディレクトリへの接
続が存在する場合、停止スクリプトによる共有ディレクトリのセッション切断が行え
ず、リソースグループのフェールオーバーや停止が失敗する場合があります。
この現象を回避するために、共有ディレクトリへの接続は仮想
IP リソースに設定した
仮想
IP アドレスを利用するようにしてください。
第4 章 注意事項付録
A. サンプルスクリプト
本章では、本ガイドと合わせて提供している
Samba と CLUSTERPRO の連携用サンプルスク
リプトについて説明します。
ここで説明するサンプルスクリプトを使用しない場合でも、同様の処理を行うスクリプトを
作成することによって
Samba と CLUSTERPRO を連携させることは可能です。
本ガイドに記載したサンプルスクリプトの内容をコピーして利用する場合、不正なコード
(意図しない改行等)が含まれる可能性がありますので、ご注意ください。
A.1 セッション切断用スクリプト
リソースグループ停止時に停止対象の共有ディレクトリのセッションを切断するためのス
クリプトです。smb サービス、nmb サービスの再起動を行うことで、セッションの切断を実
現しています。
SHARENAME 変数の値<ShareName>を停止対象の共有名に編集した上で利用してくださ
い。
#!/bin/sh SHARENAME="<ShareName>" TRYCNT_KILLPROC=10 TRYINT_KILLPROC=1 INSTALL_DIR="/opt/clznode" WORK_DIR="/work" SAMBA_DIR="/samba" TARGET_DIR=${INSTALL_DIR}${WORK_DIR}${SAMBA_DIR} LOG_FILE="${TARGET_DIR}/restartsamba_${SHARENAME}.log" STAT_FILE="${TARGET_DIR}/smbstatus_${SHARENAME}" LINE_FILE="${TARGET_DIR}/line_${SHARENAME}" BEFORE_PROC_FILE="${TARGET_DIR}/bproc_${SHARENAME}" AFTER_PROC_FILE="${TARGET_DIR}/aproc_${SHARENAME}" TEMP_FILE1="${TARGET_DIR}/tmp1_${SHARENAME}" TEMP_FILE2="${TARGET_DIR}/tmp2_${SHARENAME}" ENDOFHEADER="\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-" get_session_pid() {# initialize target pid targetpid=-1
# create temporary file for smbstatus
then
logging "failed (${STAT_FILE} cannot be created)" exit 1
fi
# create temporary file for searching pid touch ${LINE_FILE}
if [ $? -ne 0 ] then
rm -f ${STAT_FILE}
logging "failed (${LINE_FILE} cannot be created)" exit 1
fi
smbstatus -S > ${STAT_FILE} 2>&1 iret=$?
logging "get_session_pid (smbstatus retval = ${iret})" passedheader=0
while read line do
if [ ${passedheader} -eq 0 ] then
# search line representing end of header
echo ${line} | grep "${ENDOFHEADER}" >/dev/null 2>&1 if [ $? -eq 0 ]
then
passedheader=1 fi
else
# read information of samba session echo ${line} > ${LINE_FILE} 2>&1
# some continuous spaces in line are compressed to 1 space selectedline=`sed -e 's/ */ /g' ${LINE_FILE}`
# get sharename from line
selectedname=`echo ${selectedline} | cut -d ' ' -f 1` if [ "${SHARENAME}" = "${selectedname}" ]
then
# get pid for target samba session from line
targetpid=`echo ${selectedline} | cut -d ' ' -f 2` break fi fi done < ${STAT_FILE} rm -f ${STAT_FILE} rm -f ${LINE_FILE}
logging "get_session_pid (target pid = ${targetpid})" }
if [ $? -ne 0 ] then
logging "failed (${TEMP_FILE1} cannot be created)" exit 1 fi touch ${TEMP_FILE2} if [ $? -ne 0 ] then rm -f ${TEMP_FILE1}
logging "failed (${TEMP_FILE2} cannot be created)" exit 1
fi
# save ps info
ps -ef > ${TEMP_FILE1}
# some continuous spaces in line are compressed to 1 space sed -e 's/ */ /g' ${TEMP_FILE1} > ${TEMP_FILE2}
while read line do
selectedname=`echo ${line} | cut -d ' ' -f 8` if [ "${selectedname}" = "smbd" ] then echo ${line} >> ${1} fi done < ${TEMP_FILE2} rm -f ${TEMP_FILE1} rm -f ${TEMP_FILE2} } logging() { if [ ! -e ${LOG_FILE} ] then touch ${LOG_FILE} if [ $? -ne 0 ] then
# log file cannot be created, so execute without logging return
fi fi
echo "`date` [restartsamba <${SHARENAME}>] : $1" >> ${LOG_FILE} }
# restartsamba main export LANG=C
# check existence of smbstatus command which smbstatus >/dev/null 2>&1
if [ $? -ne 0 ] then
fi
# create temporary directory mkdir -p ${TARGET_DIR}
if [ $? -ne 0 ] then
logging "failed (${TARGET_DIR} cannot be created)" exit 1
fi
# get pid of target samba session get_session_pid
# target session may already be disconnected, so do nothing if [ ${targetpid} -eq -1 ]
then
logging "succeeded (target samba process does not exist)" exit 0
fi
# create temporary file for saving samba processes before restart touch ${BEFORE_PROC_FILE}
if [ $? -ne 0 ] then
logging "failed (${BEFORE_PROC_FILE} cannot be created)" exit 1
fi
# save samba processes before restart get_ps_info ${BEFORE_PROC_FILE}
# restart samba service
logging "begin to restart samba service" service smb restart
if [ $? -ne 0 ] then
logging "failed (smbd cannot be restarted.)" exit 1
fi
service nmb restart if [ $? -ne 0 ] then
logging "ignored (nmbd cannot be restarted)" fi
# create temporary file for saving samba processes after restart touch ${AFTER_PROC_FILE}
if [ $? -ne 0 ] then
logging "failed (${AFTER_PROC_FILE} cannot be created)" exit 1
# check existence of remaining samba process while read bline
do
bproc_pid=`echo ${bline} | cut -d ' ' -f 2` bproc_stime=`echo ${bline} | cut -d ' ' -f 5` while read aline
do
aproc_pid=`echo ${aline} | cut -d ' ' -f 2` aproc_ppid=`echo ${aline} | cut -d ' ' -f 3` aproc_stime=`echo ${aline} | cut -d ' ' -f 5` if [ ${bproc_pid} -eq ${aproc_pid} -a \
"${bproc_stime}" = "${aproc_stime}" -a \ ${aproc_ppid} -eq 1 ]
then
# remaining samba process exist
# try to kill remaining samba process remain=${TRYCNT_KILLPROC}
while [ ${remain} -gt 0 ] do
kill -KILL ${bproc_pid}
ps -ef | grep "${aproc_pid}" | grep "${aproc_ppid}" | grep "${aproc_stime}" >/dev/null 2>&1
if [ $? -ne 0 ] then
logging "killed (PID=${aproc_pid} PPID=${aproc_ppid} ST IME=${aproc_stime})" break fi sleep ${TRYINT_KILLPROC} remain=`expr ${remain} - 1` done if [ ${remain} -le 0 ] then rm -f ${BEFORE_PROC_FILE} rm -f ${AFTER_PROC_FILE}
logging "failed (remaining process cannot be killed)" exit 1 fi fi done < ${AFTER_PROC_FILE} done < ${BEFORE_PROC_FILE} rm -f ${BEFORE_PROC_FILE} rm -f ${AFTER_PROC_FILE}
logging "succeeded (samba service was restarted)" exit 0