ラベル Exchange の投稿を表示しています。 すべての投稿を表示
ラベル Exchange の投稿を表示しています。 すべての投稿を表示

2013年12月26日木曜日

Exchange 2007 の3ノードクラスタで、2番目のメールボックスサーバーへのメールボックス作成に失敗する

昨日、Exchange 2007 の既知不具合を踏んだ。
今頃 Exchange 2007 の情報かい、という感じで需要ないと思われるが記録を残しておく。
3ノードクラスタの動作確認で問題発生
Exchange 2007のメールボックスサーバーの高可用性構成には "ローカル連続レプリケーション (lcr)", "クラスタ連続レプリケーション (ccr)", "スタンバイ連続レプリケーション (scr)", "シングルコピークラスタ (scc)" の4種類がある。
高可用性: Exchange 2007 ヘルプ
今回担当したシステムでは、昔ながらの共有ディスク構成である scc を選択。ベストの選択かどうかはともかく、ディスクサイズ節約という観点では、scc 以外の選択肢は無いので。
サイジングの結果、Active-Active-Passive の3ノード構成になった。
3ノードって滅多に無いので、この時点でやや不安ではあった。

で、メールボックスを新規作成する試験を実施したところ、見慣れぬエラーが発生。
サーバー <servername> 上のプロキシの生成プログラム DLL が見つからないか、初期化に失敗しました。現在の受信者のプロキシ アドレスを計算できません。すべてのプロキシ アドレス生成プログラム DLL が対象となるサーバーにインストールされていることを確認してください。
2007 の既知の不具合だった
調査したところ、すぐに下記の情報に行き着いた。
シングル コピー クラスタのインストール: Exchange 2007 ヘルプ
複数のクラスタ化メールボックス サーバーが存在する SCC では、フェールオーバー クラスタにインストールされている 2 番目以降のクラスタ化メールボックス サーバーに新しいメールボックスを作成できないという、既知の問題があります。
なんで既に枯れてる 2007 にこんなしょぼいバグが残ってるんだ。
その対処方法は下記ページに書かれている。
Exchange 2007 シングル コピー クラスタ (SCC) の 2 台目以降のクラスタ化メールボックス サーバー (CMS) 上でメールボックス作成を有効にする方法
このページによると、どうやら、AD内に本来自動的に作られるべき "Microsoft MTA" オブジェクトが、クラスタの2番目以降のサーバでは作られないので、手作業で作ってくれということのようである。さっきのエラーメッセージの「プロキシの生成プログラムDLL」って、全然関係ないじゃん。Microsoft 製品のエラーメッセージは相変わらずアレだ。

というわけで、上記ページの手順に従って Microsoft MTA オブジェクトを作成して本件は解決した。
今後 Exchange 2007 で3ノード以上の scc を組む人の参考になれば幸いである。そんな人いないか。

2012年6月14日木曜日

Outlookの階層型アドレス帳が遅かったら、他サイトのADと通信しているのが原因かも。

階層型アドレス帳がクソ重い
本拠地にExchange Server 2007がある環境で、遠隔サイトより「Outlook2007で階層型アドレス帳を使うと、ちょお遅いんですけど」という申告があった。ツリーを展開するだけで数十秒固まるという深刻な状況とのこと。
(ちなみに遠隔サイトにもドメインコントローラは存在する)。

パケットを取ったりして調査した結果、遠隔サイトのOutlook2007にて階層型アドレス帳を操作すると、自サイトのドメインコントローラではなく本拠地のドメインコントローラ(グローバルカタログ=GC)に対して通信を行っていることが判明した。

Figure.1 デフォルト設定では、Outlookは本拠地のGCと通信する

2012年3月18日日曜日

Exchange 2007のグローバル アドレス一覧とオフラインアドレス帳について(2)

前回の続き。

オフラインアドレス帳とは
Exchange 2007にはオフライン アドレス帳というものがある。
これは、Outlookの「Exchange キャッシュ モード」がOnの場合に使われるもので、グローバル アドレス一覧のローカルキャッシュである。毎回Exchange Server上のアドレス帳を見に行かなくても済むので、サーバの負荷軽減や、アドレス帳の表示レスポンス改善に効果がある。
ローカルキャッシュといいつつも、データはExchange Server上で生成され、拡張子oabのファイルとしてクライアントにダウンロードされる仕組みになっている。
Outlookクライアントでアドレス帳画面より「グローバル アドレス一覧」を選択すると、oabファイルがダウンロードされるまではExchange Server上のグローバル アドレス一覧を見に行き、oabファイルのダウンロードが完了すると以後はそちらを見に行く。
当たり前の話だけど、Exchange キャッシュ モードがOffの場合には常にExchange Server上のグローバル アドレス一覧が参照される。
Figure.1 グローバル アドレス一覧(参考画像)

Exchange 2007のグローバル アドレス一覧とオフラインアドレス帳について(1)

グローバル アドレス一覧とは何か
グローバル アドレス一覧は、Exchange組織内の全Exchange Serverからメールアドレスを集めて来たリストである。
Exchange Serverを立てると、'既定のグローバル アドレス一覧'というのが自動的に作られる。こいつには組織内の全メールアドレスが入っている。そのため、一般的には'グローバル アドレス一覧'と言えば、全ユーザのアドレスを参照できるアドレス帳として利用されるケースが多い。
グローバル アドレス一覧は複数作成できる
しかし実は、ひとつのExchange組織内には'既定のグローバル アドレス一覧'以外にも複数のグローバル アドレス一覧を作成することができる。
グローバル アドレス一覧の作成には、Exchange管理シェルのNew-GlobalAddressListコマンドを使う。こいつの-RecipientFilterパラメータを使うと、作成するグローバル アドレス一覧に含むメンバを絞ることができる。
例えば部署単位でグローバルアドレス一覧を作ることにより、他部署のユーザのアドレスをOutlookのアドレス帳に表示させない、といったことが可能だ。
RecipientFilterの書式の詳細はここでは割愛するが、例えば"(<プロパティ名> -eq '<文字列>')"などと書く。フィルタに使えるプロパティの一覧はExchange 2007 SP1 および SP2 の -RecipientFilter パラメータでフィルタ可能なプロパティに載っている。部署名で絞る場合は例えば下記のようになる。
New-GlobalAddressList -Name '情シス' `
 -RecipientFilter "(Department -eq '情報システム部')"

2012年2月28日火曜日

PowerShellでExchange Serverのユーザメールボックスのサイズを調べる

Exchange Serverのメールボックスのサイズを調べるには、Exchange管理シェルのGet-MailboxStatistics の TotalItemSize プロパティを使う。
こいつを使う機会があったのだが、なんか動きがおかしかったのでその記録と、備忘のためのメモとしてこのエントリをポストしておく。

まずは基本編
特定のユーザのメールボックスサイズを調べるとしよう。
Get-MailboxStatisticsには引数-Identityがあるので、これにユーザのDNを与えれば結果が得られそうだが、私の手元の環境ではなんだかよくわからないがエラーになってしまった。
Exchangeの環境をいくつも持ってるわけではないので、この環境固有の問題なのか、引数の与え方が悪いのか、世間的に常識なのかは分からなかった。
引数-Serverを指定するとどうにかうまく動いたので、サーバ上の全ユーザの情報を取り出してから、where-objectで任意のユーザの情報を抽出することとした。
Get-MailboxStatistics | Get-Member をするとMailBoxGuidってのがいたので、Get-Mailboxで目的のユーザのメールボックスのGUIDを調べて突き合わせれば目的は達成できそう。
$allstats = Get-MailboxStatistics -Server <servername>
$name = Get-Mailbox -Filter { <filterstring> }
$allstats | `
 Where-Object { $_.MailBoxGuid -eq $name.ExchangeGuid } | `
 fl TotalItemSize
という感じ。
応用編
filterstringで複数のユーザを引っ掛けた場合は、foreachでぐるぐるまわしてあげたらいい。
$allstats = Get-MailboxStatistics -Server <servername>
$names = Get-Mailbox -Filter { <filterstring> }
foreach($name in $names) {
 $name.SamAccountName
 $allstats | `
 Where-Object { $_.MailBoxGuid -eq $name.ExchangeGuid } |`
  fl TotalItemSize
}
Get-Mailboxのフィルタ条件は腐っていてイマイチ使い物にならないので、実際の利用シーンでは、さらにGet-ADUserなどと組み合わせる必要があると思われる。
ちなみに今回はcustomAttributeN(Nは1~15)でのユーザ抽出が目的だったので、上のコードで事足りてしまった。

2011年12月21日水曜日

Exchange 2007: Set-AdSiteLinkを使って、ADサイト間で送信できるメールの最大サイズを制限する方法

ADが複数拠点に跨っていて、拠点間がWANで接続されている場合、拠点ごとにサイトを定義し、サイト間にサイトリンクを設定するのが普通だ。その目的は、主にAD関係のトラフィックが低速なWANに大量に流れるのを抑えるためである。
ここで、各サイトにそれぞれExchange Serverを構築することを考える。このような場合に気にしなければならないのは、大容量メールの送受信によるトラフィック増だ。デフォルトではExchange 2007は異なるサイトのハブ トランスポート サーバ(以下HUB)間で送受信するメールサイズを制限していない。そのため、誰かが別サイトのユーザに対してドデカい添付ファイル付きのメールを送りつけたりすると、WANの帯域があっという間に食いつぶされてしまう。

そこでよく取る手は、メールサイズ(メッセージサイズ)に上限を設けることであるが、Exchange組織に対してメッセージサイズの制限をかけてしまうと、同一拠点内のメールにも制限がかかってしまってウマくない。別拠点へのメールのみ制限したい場合は、Set-AdSiteLinkコマンドレットで設定する。

PS C:\> Set-AdSiteLink -Identity <サイトリンク名> -MaxMessageSize <上限サイズ>

例えば、Site AとSite Bの間に[SiteAB]というサイトリンクが設定してあって、メッセージサイズを10MBに絞りたい場合、以下のようにする。

PS C:\> Set-AdSiteLink -Identity SiteAB -MaxMessageSize 10MB

以後、Site AからSite Bに10MB以上のメールを送信しようとすると、送信者にNDRが返るようになる。

see also: Set-AdSiteLink: Exchange 2007 ヘルプ