25.7.2012

Exchange 2010 ja Load Balancing, Osa 3


Exchangen palvelut

Microsoftilla on Technetissä aiheesta kaksi artikkelia. Aiheesta on pidetty myös esityksiä viime ja tämän vuoden TechEdissä. Artikkelit sisältävät suosituksia, miten eri applikaatioissa tulisi pysyvyysmääritykset tehdä. Alla oleva taulukko on yhteenveto näistä. Taulukko on peräisin Andrew Ehrensingin TechEd 2011:ssä pidetystä esityksestä. Sitä on hieman muokattu. RPC Endpoint Mapperille en ole löytänyt Persistence-suosituksia. Mutta loogisesti päätellen, sitä ei tarvita. Sillä asiakasohjelma tekee yhteyden alussa kyselyn RPC End Point Mapperin porttiin TCP 135 ja pyytää tietoa, missä portissa MAPI-pohjaiset palvelut ovat saatavilla. Exchange-palvelin palauttaa tiedon asiakasohjelmalle, jonka jälkeen liikennöinti tapahtuu määriteltyjä portteja pitkin. Oletusarvoisesti Exchange käyttää dynaamisia portteja TCP 1024-65535, mutta palvelut on kuitenkin hyvä määritellä staattisiksi Load Balanceria varten. Porttien arvot tulee olla välillä 59531-60554.




Exchangen palvelut voidaan jakaa karkeasti kahtia: http-pohjaiset (Layer 7) ja TCP Socket-pohjaiset (Layer 4). Jälkimmäinen liittyy Outlookin MAPI-yhteyksiin (pois lukien POP3 ja IMAP4) ja RPC Client Access Server-objektiin. Objekti luodaan seuraavasti:

New-ClientAccessArray –Name ”UC Demo Array” –Fqdn outlook.uc.demo -Site HQ

Tämä on siis se osoite, johon Outlook ottaa yhteyttä.

MAPI RPC:n staattinen määritys tehdään REGEDIT-ohjelmalla sekä CAS että Mailbox-palvelmelle:

Key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSExchangeRPC\
ParametersSystem
DWORD: ”TCP/IP Port”
Value: ”59596”

Osoitteistoyhteyttä (Exchange Address Book service) varten määritellään myös kiinteä portti CAS-palvelimen REGEDIT-ohjelmalla:

Key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ MSExchange-AB\Parameters
STRING: ”RpcTcpPort”
Value: ”59595”

Tämä portti käsittelee sekä Address Book referral (ABREF) - että Name Service Provider Interface (NSPI) -yhteyksiä.

CAS Arraylla voi olla sama nimi, kuin http-pohjaisilla palveluilla, mutta selvyyden vuoksi ne voidaan erottaa. Jos MAPI-yhteyttä kutsutaan nimellä ”Outlook”, voidaan http-pohjaisia palveluita kutsua vaikka nimellä ”OutlookWS”.

Nimet ja osoitteet


Nimistä päästään loogisesti seuraavaan asiaan, eli miten palvelut tulisi jaotella Load Balancerin näkökulmasta. Vaihtoehtoja on monia. Periaatteessa kaikki palvelut voivat olla yhden IP-osoitteen ja DNS-nimen takana, jolloin TCP Socket-pohjaiset palvelupyynnöt tunnistetaan portin perusteella ja http-pohjaiset palvelupyynnöt virtuaalihakemiston avulla. Tällöin Load Balancerilla tulee olla jokin mekanismi erottaa nämä palvelupyynnöt toisistaan. Palvelupyyntöjen erottaminen toisistaan on tärkeää Load Balancing Persistence-asetuksen takia. Tällöin tiettyihin palvelupyyntöihin sovelletaan tiettyä pysyvyysasetusta. F5 käyttää ns. iRules-tekniikkaa erottamaan palvelupyynnöt toisistaan ja HAProxy (jota tulevissa esimerkeissä käytetään) käyttää ACL-tekniikkaa. Tästä myöhemmin lisää. Mikäli Load Balancerissa ei ole tällaisia mahdollisuuksia tai muuten vaan halutaan, niin jokaiselle palvelulle voidaan määritellä oma DNS-nimi ja IP-osoite. Usean nimen käyttäminen täytyy huomioida myös varmenteessa. SAN-kentässä tulee olla kaikki ne nimet, joilla palvelua kutsutaan. MAPI-yhteyden nimeä ei tarvita varmenteessa. Yksi vaihtoehto on niputtaa Persistence-tyypin perusteella palvelut toisiinsa, jolloin jokaisella Peristence-tyypillä on oma DNS-nimi ja IP-osoite. Tämän artikkelin esimerkeissä on käytetty kahta DNS-nimeä ja yhtä IP-osoitetta seuraavasti:

DNS Name
VIP
Port
App
outlookrpc.uc.demo
192.168.221.250
135, 59595, 59596
-
outlook.uc.demo
192.168.221.250
443
/owa
/ecp
/EWS
/Rpc
/Microsoft-Server-ActiveSync
/OAB
/Autodiscover


Helpoin tapa lähteä liikkeelle on käyttää Load Balancering omaa Template-pohjaa, jos sellainen on saatavilla. Näin ainakin suurimmilla valmistajilla on. Silloin saa asetukset helposti suurin piirtein niin kuin ne on tarkoitettu olevan.

Exchangen CAS-palveluiden sisältö on kaikilla palvelimilla sama ts. jokainen CAS-palvelin on samanarvoinen. Kuormantasauksen näkökulmasta tämä yksinkertaistaa asioita. CAS-palvelimen sisäisiä palveluja voidaan kuitenkin hajauttaa juurikin palvelupyynnön perusteella. Pilvipalveluja tarjoa organisaatio voisi esimerkiksi määritellä kaikki */oab-pyynnöt tietyille CAS-palvelimille, jotka huolehtivat niiden jakeluista. Osoitteistojen koko saattaa jo kasvaa merkittävän kokoisiksi isoilla tarjoajilla, jolloin tätä kautta saadaan CAS-roolin sisäistä kuormaa hajautettua. Samaa voidaan soveltaa mobiilipäätteisiin ja sielläkin voitaisiin erotella vielä, millä päätelaitteella palvelua käytetään ja sen pohjalta ohjata palvelupyynnöt niitä vastaaville todellisille palvelimille.

URL-asetukset

Exchangessa on http-pohjaisissa applikaatioissa on vielä URL-asetukset, jotka liittyvät tähän aiheeseen. URL-asetukset jakautuvat kahtia: InternalURL ja ExternalURL. Mikäli käytössä on vain yksi Site ja ulkoisista yhteyksistä Outlook Anywhere ei ole otettu käyttöön, voi URL-asetukset oikeastaan olla oletusarvoisesti. Asetukset on kuitenkin hyvä laittaa oikein jo alusta lähtien, vaikka kaikkia palveluja ei olisikaan käytössä. Alla olevista taulukoista selviää asetukset. Kuten edellä mainittu, nimet voidaan määritellä, miten vain halutaan ja jokaisella palvelulla voi olla vaikka oma nimensä. Tässä esimerkissä on tarkoituksella käytetty muuttujaa ”WS_Array”, joka viittaa nimenomaan http-pohjaisiin palveluihin, eikä CAS Array-objektiin.

Virtual Directory
InternalURL (Internet facing site)
OWA
https://WS_Array.domain.com/OWA
ECP
https://WS_Array.domain.com/ECP
EWS
https://WS_Array.domain.com/EWS/Exchange.asmx
ActiveSync
https://WS_Array.domain.com/Microsoft-Server-ActiveSync
OAB
https://WS_Array.domain.com/OAB
Autodiscover
https://WS_Array.domain.com/Autodiscover/Autodiscover.xml

Virtual Directory
ExternalURL (Internet facing site)
OWA
https://MAIL.domain.com/OWA
ECP
https://MAIL.domain.com/ECP
EWS
https://MAIL.domain.com/EWS/Exchange.asmx
ActiveSync
https://MAIL.domain.com/Microsoft-Server-ActiveSync
OAB
https://MAIL.domain.com/OAB
Autodiscover
https://MAIL.domain.com/Autodiscover/Autodiscover.xml 


SSL Offloading-asetukset

SSL-suojauksen purku on olennainen osa sovellustason kuormantasauksessa, kuten aiemmissa artikkeleissa on tullut jo ilmi. Asetukset tehdään seuraavasti:

Outlook Web Access
Määritellään IIS-hallintakonsolista pois vaatimus salatusta yhteydestä pois:

Virtual Directory
Require SSL
/owa
Uncheck

Lisäksi määritellään rekisteriasetus:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSExchangeOWA
REG_DWORD  = “SSLOffloaded” ja arvo “1”

Exchange Control Panel
Määritellään IIS-hallintakonsolista pois vaatimus salatusta yhteydestä pois:

Virtual Directory
Require SSL
/ecp
Uncheck

Outlook Anywhere
Set-OutlookAnywhere –Identity CAS_server\RPC* -SSLOffloading $true

Offline Address Book
Määritellään IIS-hallintakonsolista pois vaatimus salatusta yhteydestä pois:

Virtual Directory
Require SSL
/oab
Uncheck

Exchange ActiveSync (EAS)
Määritellään IIS-hallintakonsolista pois vaatimus salatusta yhteydestä pois:

Virtual Directory
Require SSL
/Microsoft-Server-ActiveSync
Uncheck

Exchange Web Services (EWS)
Määritellään IIS-hallintakonsolista pois vaatimus salatusta yhteydestä pois:

Virtual Directory
Require SSL
/EWS
Uncheck

Lisäksi määritellään konfiguraatiotiedostoon (web.config) tarvittavat asetukset.

C:\Program Files\Microsoft\Exchange Server\V14\ClientAccess\exchweb\ews

Exchange 2010 SP1 ja uudempien web.config tiedosto sisältää uudet sidosnimet RTM-version palveluille httpTransport ja httpsTransport (EWSHttpBinding ja EWSHttpsBinding). Muutoksia siis ei tarvitse tehdä web.config-tiedostoon.

Autodiscover Service (AS)
Määritellään IIS-hallintakonsolista pois vaatimus salatusta yhteydestä pois:

Virtual Directory
Require SSL
/Autodiscover
Uncheck

Lisäksi määritellään konfiguraatiotiedostoon (web.config) tarvittavat asetukset.

C:\Program Files\Microsoft\Exchange Server\V14\ClientAccess\Autodiscover

Exchange 2010 SP1 ja uudempien web.config tiedosto sisältää uudet sidosnimet RTM-version palveluille httpTransport ja httpsTransport (AutodiscoverBasicHttpBinding ja AutodiscoverBasicHttpsBinding). Muutoksia siis ei tarvitse tehdä web.config-tiedostoon.

”Köyhän miehen” Load Balancing-ratkaisu

Jos kaikesta huolimatta ei ole mahdollisuutta hankkia erillistä Load Balanceria, eikä neljää palvelinta, mutta siitä huolimatta haluttaisiin jonkinlaista korkeaa käytettävyyttä, niin mitä voidaan tehdä. Itse olen törmännyt ratkaisuihin, jossa CAS-rooli virtualisoidaan ja muut asennetaan rautaklusterille. Jossain määrin ymmärrettävä ratkaisu, mutta ei mielestäni hyvä ratkaisu. Sillä ei pystytä tarjoamaan minkäänlaista korkeaa käytettävyyttä. Parempi ratkaisu olisi tehdä kahden palvelimen ympäristö siten, että kummallakin palvelimella on kaikki pakolliset roolit (CAS, HUB ja MAILBOX). Muodostetaan CAS Array ja DAG normaalisti ja tehdään DNS Round Robin palvelunimille sekä niiden TTL-arvoksi 5 min. Tällä saavutetaan mielestäni parempi käytettävyys kuin kolmella palvelimella, vaikkakin siinä ei ole mitään älykkyyttä. Kun toiselle palvelimelle tehdään huoltoja, poistetaan se ensin DNS:stä ja odotetaan se 5 min, jonka jälkeen palvelupyyntöjä ei pitäisi enää tulla. Tehdään tarvittavat huoltotoimenpiteet. Sama tehdään toisen palvelimen kanssa.

Oma Load Balancing-ympäristö testaamiseen

Erillisen fyysisen Appliancen hankkiminen testikäyttöön saattaa olla hankalasti perusteltavissa työnantajalle. Osa valmistajista tarjoaa virtuaalista Appliancea (esim. F5, Citrix ja Kemp), joka voidaan asentaa omaan virtuaaliympäristöön. Näiden hintatasosta ei tosin ole käsitystä. Yksi vaihtoehto on rakentaa oma. Yksi suosittu vaihtoehto on käyttää HAProxya. Pohjalle tarvitaan Linux esim. Ubuntu. HAProxy ei voi käsitellä suoraan SSL-yhteyksiä, joten siihen tarvitaan erillinen tuote esim. Stunnel. Itse käytän kuvan mukaista kombinaatiota.



Stunnel ohjaa SSL-yhteydet Localhostin kautta HAProxylle ja sitä kautta todellisille palvelimille. HAProxy pystyy myös käsittelemään TCP Socket-pohjaisia palvelupyyntöjä.

Stunnel
Alla ote Stunnelin konfiguraatiosta.
 













Parametrien merkitys käy ilmi jo nimen perusteella. Alkuperäisen asiakkaan IP-osoite  (xforwardedfor) voitaisiin välittää Stunnelin kautta HAProxylle, mutta HAProxy ei ole hyväksynyt Stunnelin koodia. Jos ominaisuuden haluaa, pitää HAProxy-ohjelma kääntää uudestaan Stunnelin laajennuksen kanssa.

HAProxy
Alla ote HAProxyn konfiguraatiosta.


MAPI-pohjaisten palvelupyyntöjen konfiguraatio on yksinkertainen. Siinä määritellään portit, joita kuunnellaan, kuormantasausalgoritmi ja lopuksi todelliset palvelimet, joihin palvelupyynnöt ohjataan.

Http-pohjaisten pyyntöjen käsittely on hieman monimutkaisempi. Palvelupyyntöjen syöttö tulee Stunnelilta porttiin 80. ACL on eräänlainen pääsylista, jonka perusteella tunnistetaan applikaatio päätteen perusteella ja määritellään sille tunniste. Pääsylista nimeltä ”is_owa” tunnistaa palvelupyynnön, jonka pääte on ”/owa”. Tämä palvelupyyntö ohjataan ACL:n perusteella oikeaan backend-osioon, jossa määritellään pysyvyyden ja kuormantasauksen asetukset. Lisäksi, jos mikään kohdista ei vastaa pyyntöä, ohjataan se oletusarvoiselle backend-osiolle.

Lopuksi

Varsinainen asiaosuus oli tässä. Laitan vielä seuraavaan eli viimeiseen osaan Debug-lokeja, joista voi tarkastella palvelupyyntöjä.

Lähteet

Understanding Load Balancing in Exchange 2010

Load Balancing Requirements of Exchange Protocols

Load Balancing with Microsoft Exchange Server 2010

Microsoft Internet Information Services (IIS) Deployment Guide

Intro to Load Balancing for Developers – The Algorithms

Deploying the BIG-IP v11 with Microsoft Exchange 2010 Client Access Servers

Radware’s AppDirector And Microsoft Exchange 2010 Integration Guide

Advanced Logging Readme

Loadbalancer.org supported load balancing methods

Best of Both Worlds: Selective Source-NAT

HAProxy Configuration Manual

HAProxy Architecture  Guide

Making Applications Scalable With Load Balancing

NetScaler load balancing

Citrix NetScaler Deployment Guide for Microsoft Exchange 2010

Cisco ACE 4700 Series Appliance Quick Start Guide, Release A3(1.0)

Barracuda Load Balancer Administrator's Guide

LoadMaster Deployment Guide for Load Balancing MS Exchange 2010

Hypertext Transfer Protocol -- HTTP/1.1




Ei kommentteja:

Lähetä kommentti