カテゴリ:サーバがらみ( 107 )
Subversion on apache で大量ファイルをコミットするとエラーになる

Subversion on apacheでTortoiseSVNから大量ファイルをコミットすると「サーバに接続できませんでした」というエラーになります。
環境は下記のとおりです。
OS:CentOS5.5
Apache 2.2.3 (OSバンドル品)
Subvsersion:mod_dav_svn-1.4.2

で、原因は Apache の KeepAlive が OFF になっていたからでした。
なので、コミット中に top コマンドで確認すると大量に httpd プロセスが存在してました。(ファイル毎にプロセスが立ち上がりプロセス数最大値を超えて接続が切れたんだと思います。)

httpd.conf の KeepAlive を On にすることでコネクションを使い回しするようになり、ちゃんとコミットできました。
普通 apache の KeepAlive でデフォルトでOnになってたと思うんですが、redhat系はoffなんでしょうか・・・

参考:
Subversionで大量のコミット中に接続が切断される
自宅LAN内に、linux(CentOS)サーバーを作り、subversionを設置.. - 人力検索はてな
[PR]
by Jehoshaphat | 2011-09-23 21:39 | サーバがらみ | Trackback | Comments(0)
共有フォルダにアクセスするとアクセスできずシステムイベントログに40960,40961が出る
WindowsServer2003 でドメインベースDFSを使って共有フォルダを管理しています。
また、イントラネットのWEBサイトに file:// プロトコルを使ってDFS共有フォルダへのリンクを張っています。

で、XP SP3のクライアントから、イントラネットWEBサイトの共有フォルダへのリンクを押下すると、下記のようなエラーが出ました。

Microsoft Internet Explorer の提供元:
\\hogedomain.local\share\test にアクセスできません。このネットワークリソースを使用するアクセス許可がない可能性があります。アクセス許可があるかどうかこのサーバーの管理者に問い合わせてください。

セキュリティに危害を与える試みが検出されました。認証したサーバーに連絡してください。


見慣れないエラーです。

Explorerから直接 \\hogedomain.local\share\test にアクセスしようとすると今度は下記エラーとなります。

ファンクションが間違っています。


それで、DFSのリンク先となっている共有フォルダを直接アクセスしようとするとアクセス権があるにも関わらず、ユーザ認証の画面が開きます。

システムのイベントログを確認してみたところ、下記のようになっていました。

イベントの種類: 警告
イベント ソース: LSASRV
イベント カテゴリ: SPNEGO (Negotiator)
イベント ID: 40960
日付: 2011/02/01
時刻: 00:00:00
ユーザー: N/A
コンピュータ: hogepc
説明:
サーバー cifs/10.0.0.25 に対するダウングレード アタックの試みを 検出しました。認証プロトコル Kerberos からのエラー コードは "参照したアカウントは現在無効であり、ログオンできません。
(0xc0000072)" でした。


イベントの種類: 警告
イベント ソース: LSASRV
イベント カテゴリ: SPNEGO (Negotiator)
イベント ID: 40961
日付: 2011/02/01
時刻: 00:00:00
ユーザー: N/A
コンピュータ: hogepc
説明:
サーバー cifs/10.0.0.25 とのセキュリティで保護された接続を確立できませんでした。利用できる認証プロトコルはありませんでした。


ネットで調べるとドメインコントローラに接続できなかったりするとこのエラーがでることがあるようですが、ActiveDirectory情報は検索できるのでドメインコントローラには接続できるようです。


いろいろ調べた結果、原因はDFSリンク先の共有フォルダへのアクセス権情報をPCに記憶させていることでした。
コントロールパネルのユーザアカウントで、任意の共有フォルダへのアクセス権情報を記憶させることができます。
そこに、既に無効になったユーザアカウントのアクセス権情報が記憶されていました。
既に無効になっているので、イベントログで、「参照したアカウントは現在無効であり、ログオンできません。」と出たんでしょうね。

記憶させてるアクセス権情報を削除することでアクセスできるようになりました。
[PR]
by Jehoshaphat | 2011-08-16 21:18 | サーバがらみ | Trackback | Comments(0)
Hyper-Vのネットワークアダプタエラー

Hyper-V上でWindowsサーバを動かしているですが、突然ネットワークアクセスできなくなるという事態が発生しました。
コンソールから触ってもフリーズしてるようです。

とりあえず強制再起動をかけて、イベントログを見たところ、ネットワーク関連とディレクトリサービスのエラーが頻発してます。
それらは下記のイベント以降発生していました。

イベントの種類: 情報
イベント ソース: netvsc
イベント カテゴリ: なし
イベント ID: 4
日付: 2011/02/01
時刻: 8:00:00
ユーザー: N/A
コンピュータ: DOMAINDC03
説明:
ミニポート 'Microsoft Virtual Machine Bus Network Adapter #2' はリセットされました。

(ゲストOSがWindowsServer2008だと「ミニポート 'Microsoft Virtual Machine バス ネットワーク アダプター' はリセットされました。」と表示されます)

どうやらHyper-Vの仮想ネットワークアダプタがリセットされたようです。

調査すると、MSサポート:HYPER-V VM 上で Windows Server 2003 ベースのネットワーク接続は失われますに似たような現象が載っていました。
修正プログラムが公開されているのでどうやらバグのようですね。
[PR]
by jehoshaphat | 2011-08-16 12:21 | サーバがらみ | Trackback | Comments(0)
DFSが遅延した原因は。。。。

Windows Server の DFS(分散ファイルシステム) を構築してたんですが、DFS上のファイルを開くのに数十秒かかるという問い合わせが殺到しました。

たしかに自機でもファイルを開くのに時間がかかる時と、そうでない時がありました。

DFSはドメインベースで構築してます。
ドメインコントローラ(ActiveDirecotory用DNSサーバも兼用)は3台構成で、ちょうど別拠点用のドメインコントローラ(DC)の構築が終わって、配送待ちにしている状態でした。

DFSは当初2台のドメインコントローラ上に配置してので、ネットワーク負荷が原因かと思い別サーバに構築し直したり、キャッシュの時間を長くしたり、パケット解析をしたりしましたが、どうにも原因が分かりませんでした。

で、別拠点用のDCを設置すると、とたんに現象が置きなくなったのです。

原因はどうやら、そのDCをセットアップ後、設置まで電源を切っていたことのようです。

DFSの名前解決の具体的なプロセスを知らないため何とも言えませんが、おそらくDFSクライアントがDCにアクセスしに行くんだと思いますが、その時にその別拠点用のDCを参照しに行き、見つからないためタイムアウトしてから別DCに接続し、名前解決をしてファイルオープンという感じではないかなと思います。

この別拠点はサイトを分ける予定だったため、この別拠点用DCも別サイトに設定したんですが、どうやら参照されようとしていたようですね。



同様の現象は下記のようにいくつかWEBに載っていました。
@IT:DFSを利用したファイル共有でパフォーマンスが出ません DCを一台停止したら、遅くなったようです。やはりDFSクライアントが停止DCを参照してたようですね。
@IT:Win2000ServerでDFSにアクセスできたりできなかったりします


となると、もし1台DC壊れたらどうなるんでしょうか。。。その壊れたサーバをDCとして参照しないようにActiveDirectory上から削除しないといけませんが、"ドメインコントローラ 削除"でググるといろいろ方法が出てきます。しかし、結構面倒なようですね。

結局起動してないDCが原因というのは分かりましたが、具体的になぜクライアントが停止DCを見に行くのか、またそれを制御する方法が分からなかったのが心残りです。


サポートツールを入れると DFSUtil.exe というコマンドが使えるようになるわけですが、これの詳しい使い方も情報としてあまり載っていませんでした。


ただクライアントから、ドメインベースの名前空間にアクセスできるドメインコントローラを特定するには spcinfo オプションを使えばいいようです。
例えば下記のような感じだと、+のついているドメインコントローラが現在アクティブになっているものらしいです。

C:\>DFSUtil /spcinfo
[*][dc01.hogedomain.jp]
[*][HOGEDOMAIN]
[*][hogedomain.jp]
[+][HOGEDOMAIN]
[-DC02]
[+DC01]
[-DC03]
[+][hogedomain.jp]
[-dc02.hogedomain.jp]
[+dc01.hogedomain.jp]
[-dc03.hogedomain.jp]
Done processing this command.



ただDFSサーバでパケットキャプチャしてると、
NT Trans Request, NT IOCTL FILE_SYSTEM Function:0x002a, FID: 0x800f
というリクエストに対して、
NT Trans Response, FID: 0x800f, NT IOCTL, Error: STATUS_NOT_A_REPARSE_POINT(0xC0000275)
というように、レスポンスパケットでエラーを吐いています。
NTSTATUSエラーコード一覧によると、このエラーは「NTFS ファイルまたはディレクトリは再解析ポイントではありません。」とのことです。調べましたが、結局よくわからないエラーでした。。

DFSは簡単なようで結構ハマる部分が多いので、参考先、特によく寄せられる質問は熟読しておいた方がいいです。

参考先:
MS:分散ファイル システム : よく寄せられる質問
MSサポート:Windows 分散ファイル システム名前空間のアクセス エラーのトラブルシューティング方法 原因の切り分けに役立ちます(翻訳おかしいですが)
MSサポート:紹介で完全修飾ドメイン名を使用するように DFS を構成する方法
MSサポート:Windows XP クライアントの DFS クエリの頻度を制御するポリシー クライアントは15分置きにDCにクエリしてるようです。このクエリの結果がキャッシュに残り上記のDFSUtil /spcinfoで確認できるようです。

MSサポート:DFS 名前空間のサービスと Windows Server 2003 または Windows Server 2008 を実行しているコンピューターで構成データについて
Active Directory ドメインコントローラの 1台を強制的に入れ替える / DFS 名前空間を強制削除 - Nire.Com 古い DFS 名前空間情報を削除する方法です。
[PR]
by jehoshaphat | 2011-02-20 19:21 | サーバがらみ | Trackback | Comments(0)
SunRayとRDTとで画面描画速度の違い

SunRay2で画面描画が遅く残像らしきものが残る の最後の方で、SunRayとターミナルサーバやリモートデスクトップで使う RDT プロトコルの帯域の違いをちょこっとだけ説明しました。


で、機会があったので SunRay の画面描画プロトコル ALP-RENDER と RDP とでどちらがシンクライアントの画面描画のレスポンスが早いか比較してみました。
なお、SunRayはSun Ray Connector for Windows を使いWindowsターミナルサーバに接続しています。
構成としては下記のような感じです。

○SunRayを使う方法
SunRay2 DTU←(ALP-RENDER)→SunRayサーバ←(RDP)→ターミナルサーバ

○RDPを使う方法
NEC US100←(RDP)→ターミナルサーバ


結果は SunRay の方が画面描画は高速でした。
特に画像が多い画面だとその傾向が顕著でした。

やはり SunRay の ALP-RENDER はUDPで帯域を使う分画面描画が高速なのですね。
なので、LAN等帯域が太いところでのソリューションにはいいかもしれません。

逆にRDPはTCPかつ低帯域なので、WANを挟んだ場合は有利かもしれませんね。
[PR]
by jehoshaphat | 2011-02-20 19:19 | サーバがらみ | Trackback | Comments(0)
ターミナルサーバユーザがi-Filterをプロキシとして使うとなりすましができる
プロキシとしてデジタルアーツ社のi-Filter7 を Windows Server 上で使ってます。

これでユーザ認証をNTLM認証としているのですが、ターミナルサーバを利用しているユーザがi-Filterを介してWEB閲覧した場合に、おかしな現象が発生しました。

ブロックログに引っ掛かっているユーザが、実際には別のユーザだったのです。
実際に自身のアカウントでターミナルサーバにログオンし、フィルタに引っ掛かるページを表示したのですが、ブロックページの禁止メッセージには別のユーザのアカウント名が表示されていました。

つまり、ログに表示されるユーザが全く信頼おけないということです。


とりあえずデジタルアーツ社の Q&A を検索すると、「i-FILTER」の「NTLM認証」で、同じ端末からログオンユーザーの切り替えをした際に、前回ログオンしたユーザー設定が残る現象が発生するのは何故ですか。 というのを見つけました。

このページによると、i-Filter には ActiveDirectory(ドメインコントローラ)の負荷軽減のために、「Cache Time to Live」という認証情報をキャッシュする機能が有るようです。
デフォルト値が 600秒(10分) なんですが、ブラウザ起動し i-Filter 認証されてから10分間は認証情報がキャッシュされます。この時間内に別アカウトでログオンしてブロックページ表示したとしても、i-Filterは10分間キャッシュされているユーザがフィルタに引っ掛かったと判断してしまうようですね。


たしかに普通のPCなら、10分以内にログインして使うユーザはそうそう無いと思うのですが、今回のようにターミナルサーバを使ったシンクライアントで百数十人が同時使用している場合は非常に困ったことになります。

この件で、デジタルアーツのサポートにターミナルサーバでちゃんと運用できる方法は無いのかと問い合わせたんですが、キャッシュ時間を短くするしか無いとのことでした。上記Q&AにはCache Time to Liveキャッシュ時間を30秒以下にすると過負荷になる可能性があるので十分に検討しろと書いていますし、サポート担当に規模を伝えてもどれくらいの値が最適かわからないようでした。(0にはできないため1秒で利用している事例は少数ながらあるとのことでしたが、まったく使い物にならんサポートです。)
どうやらこの製品はターミナルサーバでの利用は眼中にないようですね。

おまけにこのキャッシュの時間の設定変更を行うとi-Filterの再起動をしないといけないようです。

WEB上でキャッシュ時間の設定変更だけしておいて、i-Filterサービスを再起動するだけで構わないようなので、業務時間中に設定してバッチファイルでサービスの再起動をしてやる方法が使えます。(この点もサポート担当に聞いてみたんですが要領を得ない回答でしたね。)
[PR]
by jehoshaphat | 2011-02-20 19:17 | サーバがらみ | Trackback | Comments(0)
WindowsServer 2008 R2 のHyper-V上のライセンス

WindowsServer2008 や WindowsServer2008 R2 は、ライセンスにHyper-V上の仮想インスタンスも含んでいます。

例えば WindowsServer2008 Standard エディションだと仮想インスタンスのラインセス数1、Enterprise になると仮想インスタンス数4 となります。

どうもいまだにこれを勘違いしているSEもいるようで。。。(取引先のSEなんですが。。。)

これは仮想インスタンス(仮想マシン)自体が一つもしくは4つしか動かせないというわけではありません。

ホストOSに Standard エディションを使っていると、その物理ライセンスで、仮想インスタンス(WindowsServer2008 Standardエディション)が一つ実行できるということです。
つまり、仮想マシン用のWindowsライセンスを買わなくても一つなら物理ライセンスで動かせるというわけですね。
(もし、仮想マシンで WindowsServer2008 Standard を5つ動かすなら、残り4つのサーバOSライセンスは購入する必要があります。)

なので、仮想インスタンス自体はサーバスペックが許す限り無制限に配置できます。


ちなみに、物理ライセンスに付属の仮想インスタンス用ライセンスは、物理ライセンスと同じエディションで無いといけません。
ホストOSが Enterprise エディションなら、仮想インスタンスも Enterprise エディションにしないといけません。


また、仮想インスタンスに物理ライセンスを使ってWindowsServer2008をインストールしたのですが、プロダクトキーにハマりました。
ホストOSインストール時のプロダクトキーを入力したのですが、エラーになります。

プロダクトキーは仮想インスタンス用のものがあるので、そっちを使わないといけないようです。
そのキーは、プロダクトキーが書いているシール(COAラベル)の横の方に VirtualKey(仮想キー) として表示されています。

ラックサーバとかだと容易に確認するのが難しい場合もあるので、設置時にVirualKeyも必ず確認するようにしておいた方がいいですね。


注意点として、物理インスタンス付属のラインセスで仮想インスタンスを使った場合、その仮想マシンを別の物理サーバ上のHyper-Vに移動した時に、移動先で既に制限数まで物理インスタンス付属のライセンスで仮想インスタンスを動かしている場合は移動は無理なようです。
ここら辺の詳しい話は、参考先のMSのページで説明されています。


参考:
Windows Server 2008 早わかりライセンス ガイド : 仮想環境とライセンス : エディションごとのライセンスの違いは?
Windows Server 2008 Hyper-V のライセンス: Microsoft Virtualization
Dell PowerEdge システム用Microsoft Hyper-V重要情報ガイド
[PR]
by jehoshaphat | 2011-02-17 23:48 | サーバがらみ | Trackback | Comments(0)
ターミナルサービス構成のセッション制限時間は手打ち入力が可能
ターミナルサーバを動かしているサーバで、ターミナルサービス構成 の RDP-Tcp のプロパティ → セッション タブでセッションタイムアウトの設定ができます。
ここの設定はコンボボックスになっていて時間を選べるんですが、当初ここは選べるだけと思ってました。
デフォルトで用意されている項目は しない,1分,5分,10分,15分,30分,1時間,2時間,3時間,1日,2日 しかありません。
しかし、手で値を入力できるようです。
例えば [5時間] といった感じです。

たまにこの設定に意味を忘れるのでメモしておきます。

・ユーザ設定より優先にする(切断されたセッションを終了)
 ActiveDirectoryの各ユーザアカウントにも同様の設定ができますが、これにチェックを入れるとサーバの設定が優先されるようです。

・切断されたセッションを終了
 ターミナルサービスでセッションを切断した場合(リモートデスクトップで×ボタンで閉じたときとか)に、どれくらい時間が経てばセッションを終了(強制ログオフ)するかを設定するようです。

・アクティブなセッションの制限
 セッションの最大可能時間を設定します。つまりターミナルサーバにログオンしててもこの時間が経つとセッションの切断もしくは終了させられます。

・アイドルセッションの制限
 アイドルつまりターミナルサーバにはログインしてるけど、操作してない場合、この時間が経つとセッションの切断もしくは終了させられます。


・ユーザ設定より優先にする(セッションの制限に達したり接続が中断した場合)
 ActiveDirectoryの各ユーザアカウントにも同様の設定ができますが、これにチェックを入れるとサーバの設定が優先されるようです。
この下の項目で、セッションの制限に達したり、接続が中断した場合に、セッションを切断するか終了するかを選択できます。

参考:
リモート・デスクトップの接続時間を制限する - @IT
[PR]
by jehoshaphat | 2011-02-17 23:45 | サーバがらみ | Trackback | Comments(0)
サブ拠点にドメインコントローラを置く

現在本部拠点とサブ拠点間をVPNで接続しており、一つのWindowsドメインを使っています。(当然フォレストも一つ。)
ドメインコントローラ(WindowsServer2003 R2)は本部拠点のみに置いてます。

で、冗長化とサブ拠点でのActiveDirecotry使用時の高速化を目的に、サブ拠点にもドメインコントローラを置くこととしました。(ActiveDirecotry、DNSサーバの追加のインストールは既にしているものとします。)
ドメインは分割せず従来通り一つのドメインで運用します。

このような物理的な場所を一つのドメインで分割するために「サイト」という機能がActiveDirectoryには備わっています。

サイトの管理は管理ツールの「ActiveDirectory サイトとサービス」で行います。


サイトの作成
「サイト」というのが物理的な一つの場所という概念になるので、まずサブ拠点用のサイトを作成します。
「ActiveDirectory サイトとサービス」から、「Sites」 のコンテキストメニューから 「新しいサイト」 で新規サイトを作成します。
リンクオブジェクトはとりあえず 「DEFAULTIPSITELINK」 を選択します。


サブネットの作成
次にサブネットの定義を作成します。
ネットワークアドレスとサブネットマスクを定義するわけですが、ここでどのIPサブネットがどのサイトを使うかを設定します。
ActiveDirectoryクライアントは自身のIPを判断して接続するサイトを決めれるわけですね。

「ActiveDirectory サイトとサービス」から、「Subnets」 のコンテキストメニューから 「新しいサブネット」 で新規サブネットを作成します。
ここで、サブ拠点のサブネットならサブ拠点のサイトを、本部拠点のサブネットなら本部拠点のサイト(通常はデフォルトサイト)を選択します。


サイトリンクの作成
サイトリンクを作成することでサイト間のActiveDirecotry情報の更新の間隔や更新しない時間帯等を設定できます。

「ActiveDirectory サイトとサービス」から、「Inter-Site Transports」 → 「IP」のコンテキストメニューから 「新しいサイトリンク」 で新規サイトリンクを作成します。(SMTPも有りますが、IPの方が一般的なので。。)
作成時にどのサイトとリンクするかを選択します。今回はサブ拠点のサイトと本部拠点のサイトを指定します。

作成したサイトリンクのプロパティを表示すると「コスト」や「レプリケートの間隔」、「スケジュールの変更」が設定できます。(デフォルトのサイトリンクは削除してもいいかもしれません。もしくは、コストの値が新規で作成したサイトリンクの方が小さければそっちの設定を使うようです。)
コストの値は回線速度を意味するようで、下記のような関係になるようです。
100Mbps:コスト10
10Mbps:コスト30
1Mbps:コスト70
512kbps:コスト150
ダイヤルアップ:コスト1000

レプリケーション間隔はネットワーク負荷が気にならないなら最小の15分にしてもいいかもしれません。


ドメインコントローラの所属変更
サブ拠点用に追加したドメインコントローラはおそらくデフォルトのリンクの Servers にいるので、ドメインコントローラをオブジェクトを右クリックでサブ拠点のサイトに移動します。
また、AcriveDirectoryにはグローバルカタログ(フォレスト内の全ドメインの全オブジェクトから、頻繁に利用する属性のみを抽出したもの)というものがありますが、ドメインが一つでサイトを複数ある場合は、目安としてサイトの一つのドメインコントローラをグローバルカタログ(GC)をした方がよいようです。(ユーザログイン時にはGCにアクセスするようです。余りに多くのドメインコントローラをGCにするとドメインコントローラ間での複製の負荷が増えるようです。)
GCにするには、「ActiveDirectory サイトとサービス」内のドメインコントローラオブジェクト配下の 「NTDS Settings」 のプロパティで、「グローバルカタログ」 にチェックを入れます。
(フォレスト内に複数ドメインが存在する場合はGCレスログオンの設定の設定をしないといけないようですね。)

これでサブ拠点の各クライアントはサブ拠点用のドメインコントローラにアクセスするようになります。


参考:
ASCII.jp:遠隔地の拠点でActive Directoryを運用するには?|Windows Serverで学ぶサーバOS入門 ←今回はほとんどこちらを参考にさせてもらいました。
すぐできるWindowsサーバー強化術(第1回)既存システムに新規拠点をつなぐ - Windows読者限定:ITpro
Active Directoryの導入後の作業 - @IT
Technet:Active Directory サイトとサービスの概要 ‐ Active Directory のサイト コンテナ階層
Technet:Active Directory 複製を考慮したサイト トポロジの設計
[PR]
by jehoshaphat | 2011-02-10 23:12 | サーバがらみ | Trackback | Comments(0)
(WidnowsServer2003)複数のユーザープロファイルを一気に削除する
ターミナルサーバで使ってた Windows Server 2003 で、ターミナルサーバとしての役割を削除し別の目的で利用することとなりました。
それで、大量にたまっているユーザプロファイルを最初はシステムのプロパティのユーザープロファイルから一つずつ消していたですが、あまりに数が多いので、一気に削除できる方法はないかと調査してみました。

すると、Windows Server 2003 のリリースキットの中に、delprof.exe というツールがあり、それで複数のユーザプロファイルが削除できるようです。
(リリースキットはDownload details: Windows Server 2003 Resource Kit Toolsからダウンロードできます。)

とりあえずこんな感じです。

C:\Program Files\Windows Resource Kits\Tools>delprof

Delete inactive profiles on \\TESTSERVER? (Yes/No) yes
Deleting C:\Documents and Settings\Administrator... [Ok]
Deleting C:\Documents and Settings\user01... [Ok]
Deleting C:\Documents and Settings\user02... [Ok]
Deleting C:\Documents and Settings\user03... [Ok]
Deleting C:\Documents and Settings\user04... [Ok]


デフォルトでdelprofを起動すると、すべて非アクティブな(つまり今ログインしていない)プロファイルを削除するための確認が聞かれ、これで yes とすると一気に削除します。
オプションもいくつかあるようですね。
下記のようになります。

/q プロファイルごとに削除の確認メッセージが表示されない。
/i エラーが発生しても通知しない。
/p プロファイルごとに削除の確認メッセージを表示する。
/r 移動プロファイルのみを削除し、ローカル プロファイルは削除しない。
/c:\\<コンピュータ名> ツールを実行するPC名を指定して、ツールをリモートで起動。
/d:<日数> 指定した日数よりも古いプロファイルは非アクティブと見なし削除。


参考:
ユーティリティ スポットライト: User Profile Deletion Utility
[PR]
by jehoshaphat | 2011-02-10 23:00 | サーバがらみ | Trackback | Comments(0)