2010年9月28日 星期二

建立 AppFabric Cache Cluster

當應用程式使用了Windows Server AppFabric 的快取(Cache)後,為了服務不被中斷,我們通常會被要求高可用性(High availity)的實作。這一次的分享,我就來簡單地實作一下 AppFabric Cache Cluster並且應用在 ASP.NET 的 Session上。

環境

這一次,我們需要四台機器。一台 SQL Server 2008(電腦名稱為SQL2008SP1), 兩台 Windows Server 2008 R2作為 AppFabric,一台Windows 7安裝VS2010作為開發機器。

用途 電腦名稱
資料庫伺服器 SQL2008STDSP1
AppFabric AppFabric1
AppFabric AppFabric2
Windows 7 WinDev

此環境需要 AD domain,因此全部的機器都需要加入domain。電腦名稱可以自行更名,上表的命名為我的習慣。

AppFabric 的安裝

第一台機器命名為 AppFabric1。步驟大致同之前介紹的安裝過程。不過,重要的是需要指定資料庫伺服器到SQL2008SP1,資料庫名稱AppFacbricCaching。由於這是第一台AppFabric,需要指定為 New Cluster(預設)。

image

image

而第二個 AppFabric2 的安裝是一模一樣的,但必須選 “Join Cluster”

image

建立Cache

這裡需要以管理員的權限來執行 Caching Administration Windows PowerShell

New-Cache –CacheName session

設定 Web.Config

在 ASP.NET 上,我們需要設定 web.config。

第一段需要註冊 config section

<configSections>
<section name="dataCacheClient"
         type="Microsoft.ApplicationServer.Caching.DataCacheClientSection,
                Microsoft.ApplicationServer.Caching.Core, Version=1.0.0.0, 
                Culture=neutral, PublicKeyToken=31bf3856ad364e35"
         allowLocation="true"
             allowDefinition="Everywhere"/>
</configSections>
第二段增加 dataCacheClient 的設定
<dataCacheClient>
    <hosts>
        <host
             name="AppFabric1"
             cachePort="22233"/>
    </hosts>
</dataCacheClient>

第三段則將 sessionstate 改用自訂的 session provider

<sessionState mode="Custom" customProvider="AppFabricCacheSessionStoreProvider">
    <providers>
        <add
            name="AppFabricCacheSessionStoreProvider"
            type="Microsoft.ApplicationServer.Caching.DataCacheSessionStoreProvider"
            cacheName="session" sharedId="MyApp"/>
    </providers>
</sessionState>
注意到 cacheName 使用在上一個指令新增的 Cache “session”

Application Pool 的 Identity

最後,在 IIS 上必須讓該ASP.NET 應用程式跑在一個帳號上,而該帳號必須是資料庫AppFacbricCaching的 owner。

SNAGHTML3725fb

執行

我使用的是 Hyper-V ,很容易地可以暫停/繼續電腦。試著將其中一台電腦暫停,並不會影響 ASP.NET 的運作。

image

5 則留言:

living in my life 提到...

您好!
目前我狀況是這樣的,我在vm裡建立一個網域,名為AppFabric.com
網域裡面有
1台SERVER2K8R2(AD+SQL2K8R2)當DC以及資料庫名為AppFabricDC
2台SERVER2K8R2做AppFabric(已加入網域)名為AppFabric1,AppFabric2
1台WIN7當開發環境(已加入網域)名為AppFabricDev

網路可對外,Host主機也可ping進入網域的vm

我目前在2台SERVER2K8R2做AppFabric
照著您的方式建立第1台跟第2台AppFabric各自裝完都可以在各自的IIS看到Cache狀態,但當我在PowerShell執行 Start-CacheCluster 指令時,等了很久會出現錯誤訊息"ErrorCode:SubStatus:Some or all identity references could not be translated"
請問我該如何解決??謝謝!!

秉程 提到...

這樣的問題我沒有碰過。而我在猜,您所建立的 VM 是不是正確的呢?我之前為了快速,將VM 的 vhd 複製到另一台 VM並改了一下 Host name,此時在 AD 裡的電腦名稱就不正確了。
建議您 check 一下 AD 內的電腦名稱正確性。
建疧使用 sysprep 來改變VM 的 sid。這樣較能模擬正確的環境。

秉程 提到...

另外,啟動「快取管理PowerShell」時,在Windows Server 2008 需要以管理員身份執行,可避免掉許多權限的問題。

living in my life 提到...

了解!!因為我是先安裝一台乾淨的SVR2K8R2企業版,然後在COPY出來分成4台,之後再將之安裝腳色,我先試著將非DC的VM用sysprep ,之後結果會再跟您說!謝謝您的寶貴經驗!!

living in my life 提到...

您好!問題目前是解決了!!
原因果然出在機器的SID有問題!謝謝

Share with Facebook