Find Communities by: Category | Product

日本語コミュニティ

3 Posts authored by: go.y

今回はsysctlの変更方法についてのお話です。

Isilonには大きく分けて2つsysctlを変更する方法があります。

1) FreeBSD同様にsysctlコマンドを実行する方法。

2) isi_sysctl_clusterのコマンドを実行する方法。

 

それぞれ以下のメリット・デメリットがあります。

 1) FreeBSD同様にsysctlコマンドを実行する方法。

   メリット) コマンドを実行したノードでしか有効になりません。ノード1で実行した場合にはノード1でのみ有効です。

   デメリット) 再起動した場合には、設定は解除され初期化されてしまいます。

        またクラスタ全体に恒常的に反映させるには、別な方法が必要になります。

    

   [ノード1でsysctlコマンドを実行した場合]

   Test-New-1# isi_for_array -s sysctl net.inet.tcp.inflight.enable

   Test-New-1: net.inet.tcp.inflight.enable: 0

   Test-New-2: net.inet.tcp.inflight.enable: 0

   Test-New-3: net.inet.tcp.inflight.enable: 0

 

   Test-New-1# sysctl net.inet.tcp.inflight.enable=1

   net.inet.tcp.inflight.enable: 0 -> 1

 

   Test-New-1# isi_for_array -s sysctl net.inet.tcp.inflight.enable

   Test-New-1: net.inet.tcp.inflight.enable: 1

   Test-New-2: net.inet.tcp.inflight.enable: 0

   Test-New-3: net.inet.tcp.inflight.enable: 0

   Test-New-1#

    

   

 

 2) isi_sysctl_clusterのコマンドを実行する方法。

   メリット) クラスタ全体に反映され、/etc/mcp/override/sysctl.confに追記されるためクラスタ全体の恒常的な設定となります。

   デメリット) 特定ノードのみに実行したい場合には使用できない。  

 

          [ノード1でisi_sysctl_clusterコマンドを実行した場合]

   Test-New-1# isi_for_array -s sysctl net.inet.tcp.inflight.enable

   Test-New-1: net.inet.tcp.inflight.enable: 0

   Test-New-2: net.inet.tcp.inflight.enable: 0

   Test-New-3: net.inet.tcp.inflight.enable: 0

   Test-New-1#

   Test-New-1#

   Test-New-1# isi_sysctl_cluster net.inet.tcp.inflight.enable=1

   Value set successfully

   Test-New-1#

   Test-New-1# isi_for_array -s sysctl net.inet.tcp.inflight.enable

   Test-New-1: net.inet.tcp.inflight.enable: 1

   Test-New-2: net.inet.tcp.inflight.enable: 1

   Test-New-3: net.inet.tcp.inflight.enable: 1

   Test-New-1#

  

   cf. 反映前後の/etc/mcp/override/sysctl.conf

   <isi_sysctl_cluster実行前>

    Test-New-1# cat /etc/mcp/override/sysctl.conf

         efs.bam.acl_policies=536936708 #added by script

 

   <isi_sysctl_cluster実行後>

         Test-New-1# cat /etc/mcp/override/sysctl.conf

         net.inet.tcp.inflight.enable=1 #added by script  

         efs.bam.acl_policies=536936708 #added by script

 

 

ざっくりとした紹介ですが、参考になれば幸いです。

今年の5月に開催されたIsilon: Ask the Expert: The What, Why and How of Isilon Job Engineの翻訳が見つからなかったため、

個人的に内容を要約、一部情報を自分の中で整理するために補填しました。

また質問の内容や回答の順番は必ずしも原典と同じではありません。

コミュニティ公式の翻訳版とは異なりますことを予めご了承ください。

 

≪Job Engineの基本的な動作に関して≫

 

 

【Rash】

Job engineは、様々な異なるタスクを処理するためジョブの種類もいろいろある。

あるジョブはイベントでトリガーされ(例:ディスクが壊れたとき)、あるジョブは機能に関するジョブ(Snapshotの削除など)またあるジョブはユーザーがトリガーするジョブ(データを削除するなど)。

Job engineは、タスクをより小さな処理に分割し、それをクラスタ内の異なるノードに分散して処理させることで、全ノードに影響を与える。

 

 

各ノードでは、1個以上のworker(場合によっては複数のworker)が実行される。

こうすることで、ジョブはより早く完了する。 Job engineはバックグラウンドでこの処理を実行し、各ノードのリソースをある程度使用する。

OneFS 7.1.1.x以降ではリソースとしてはCPUとDisk I/Oが監視されていて、workerの数を調整してジョブが実行されている。

 

 

Isilonのジョブには全てimpact(処理の負荷の程度)とpriority(優先度)が設定されている。

impactは、そのジョブが実行されるときにどの程度のリソースを使用するかを決める。

impact レベルが高ければ、それだけ早く処理は終わるけど、ユーザーアクセスへのパフォーマンスに影響を与える可能性も高くなる。

impactレベルは、そのジョブがいつ実行されるかもコントロールできるよ。例えばOFF_HOURS--勤務時間外に実行されるようにすることもできる。

 

 

priorityは文字通り複数のジョブが同時にトリガーされている時の処理の優先度を決定する。

OneFSv7.1.1より前のバージョンでは、同時に実行できるジョブは1つのみだった。

priorityが1番高いジョブのみ実行され、他のジョブは待機していた。

 

 

OneFS 7.1.1以降では、同時に最大3つのジョブ(Exlusion setが全て異なる場合)が実行される。

priorityは同一Exclusion setのジョブが複数同時にトリガーされた場合やExclusion setによらず4つ以上のジョブがトリガーされているときにどれを優先されるかを決定するのに使用する。

【補足】OneFSv7.1.1におけるExclusion set別ジョブ一覧

Exclusion Set: Restripe

AutoBalance,AutoBalanceLin,FlexProtect, FlexProtectLin, MedisScan,MultiScan,SetProtectPlus,ShadowStoreProtect,SmartPools

Exclusion Set: Mark

Collect,IntegrityScan,MultiScan

Exclusion Set: None  

AVScan,ChangelistCreate, Dedupe, DedupeAssessment, DomainMark, FSAnalyze, PermissionRepair, QuotaScan, ShadowStoreDelete,SnapRevert,SnapshotDelete,TreeDelete,WormQueue

 

Isilonの各ジョブのPriorityやImpactの変更はどのような影響を与えるのか理解している限りは両方変更しても差し支えはない。

基本的にはサポート窓口に確認してから作業した方が良いよ。

 

一般的にisi job status -vのコマンドでよくみるジョブには以下のようなものがある。(たくさんあるのでよく見かけるであろう一部だけ抜粋)

FlexProtect/FlexProtectlin -- ディスクが壊れたときに自動的にデータを再構築するために実行される。

SnapshotDelete -- Snapshotの有効期限が来たときに削除するために実行される。

SmartPools -- tier間でデータを移動するときに実行される.

MultiScan - ノードが追加されたときなどにAutoBalanceとCollectを実行する。

MediaScan -- ディスクのECCエラーをチェックし修正するために、デフォルトでは毎月第一土曜日にスケジュールされている。

 

 

ジョブの一覧やスケジュールの詳細に関してはCLIで"isi job types list --verbose"を実行するか、WebUIでCluster Management > Job Operations > Job Typesで確認可能。

ちょっととある案件でNFSのポート固定をしなければいけなかったのを思い出して、OneFSv7.1.1で動作する方法を確認のために検証してみました。

デフォルトだとIsilonは以下のポートを使っています。

DNS 53 (UDP)

rpcbind 111 (UDP/TCP)

nfsd 2049 (UDP/TCP)

mountd 300 (UDP/TCP)

rpc.statd 302 (UDP/TCP)

rpc.lockd 304 (UDP/TCP)

 

最初の3つは特にポートを変更する必要がありませんが、mountd、rpc.statd、rpc.lockdを以下の通り変更する必要がありました。

mountd 1011

rpc.statd 1013

rpc.lockd 1015

 

手順は以下の通りです。(なお、この手順は現在はKBにみあたらなかったので、利用は自己責任でお願いいたします)

 

1. まず他のサービスで今回使用したいportが使われないように以下のコマンドで設定値を変更します。

# isi_sysctl_cluster net.inet.ip.portrange.lowfirst=1010

(コマンドを実行すると/etc/mcp/override/sysctl.confに値が追加され、クラスタ内の全ノードに適用されます)

# cat /etc/mcp/override/sysctl.confで値が追加されていることを確認します。

 

2.以下の手順で設定を変更したファイルを作成し、クラスタ全体に展開します。

# mkdir /ifs/data/Isilon_Support

# cp /etc/mcp/sys/services/nfs /ifs/data/Isilon_Support/nfs.ORIGINAL

# cd /ifs/data/Isilon_Support/

# cat nfs.ORIGINAL| perl -npe '

s/(\/usr\/sbin\/rpc.statd)/$1 -p 1013/;

s/(\/usr\/sbin\/rpc.lockd)/$1 -p 1015/;

s/(\/usr\/sbin\/mountd)/$1 -p 1011/ ' > nfs.modified

# isi_for_array -s 'cp /ifs/data/Isilon_Support/nfs.modified /etc/mcp/sys/services/nfs'

 

3.以下のコマンドを実行し、全ノードexited with status 1(該当なし)の応答が返答されることを確認します。

# isi_for_array -s 'netstat -na | grep LISTEN | egrep "101[1|3|5]"'

 

4.以下のコマンドでnfsサービスをnfsdを停止せずに再起動します。既存の接続には影響はありませんが、lock処理をしているものに関してはクライアント側で再度lock要求のリトライが必要な場合がありますでのご注意ください。

# isi_for_array -s 'killall -m "mountd|rpc.statd|rpc.lockd"ʼ

 

5. 1-2分後以下のコマンドで期待通りのポートになっているかを確認します。

# isi_for_array -s 'ps auwx | egrep "lockd|statd|mountd" | grep -v grep'

 

6. listenポートにもudp/tcpともに正しく反映されていることを確認します。

# isi_for_array -s 'rpcinfo -p localhost | egrep "mountd|status|nlockmgr"'

 

[ノード増設時の注意点]

ノード増設時には上記項番1のコマンドは実施する必要ありませんが、項番2以降に関しては同様の手順を踏む必要があります。

手順としては以下のような形になります。(ファイルを削除していないことが前提です)

1.増設したノードにrootユーザーでログインする。

2.以下のコマンドを実施する。

# cp /ifs/data/Isilon_Support/nfs.modified /etc/mcp/sys/services/nfs

3. 以下のコマンドを実行し、特に出力されないことを確認する。

# netstat -na | grep LISTEN | egrep "101[1|3|5]"

4.以下のコマンドでnfsサービスをnfsdを停止せずに再起動します。既存の接続には影響はありませんが、lock処理をしているものに関してはクライアント側で再度lock要求のリトライが必要な場合がありますでのご注意ください。

# isi_for_array -s 'killall -m "mountd|rpc.statd|rpc.lockd"ʼ

5. 1-2分後以下のコマンドで期待通りのポートになっているかを確認します。

# isi_for_array -s 'ps auwx | egrep "lockd|statd|mountd" | grep -v grep'

6. listenポートにもudp/tcpともに正しく反映されていることを確認します。

# isi_for_array -s 'rpcinfo -p localhost | egrep "mountd|status|nlockmgr"'

 

[バージョンアップ時の注意点]

再起動では設定ファイルは削除されないため有効ですが、バージョンアップ時にはOneFSの仕様変更により各種ファイルが上書きされる可能性があります。将来のバージョンで同様の設定変更が必要になった場合には、事前にSRで確認することをお勧めいたします。

Filter Blog

By date:
By tag: