Blog Post

Exchange Team Blog
5 MIN READ

Understanding Hybrid Migration Endpoints in Classic and Modern Hybrid

The_Exchange_Team's avatar
Oct 16, 2019

In this blog post we will discuss hybrid migration endpoints in both Classic and Modern hybrid topologies, explain what migration endpoints are and how you can find them. In Part 2 of this post (now available) we cover troubleshooting of any related issues.

A migration endpoint in Exchange Online represents the source connection information for all our supported migration types: Remote Moves, Cutover, Staged, IMAP, and G Suite. A Hybrid Migration endpoint is a term used interchangeably with Remote Move endpoint when referring to the source on-premises environment for Hybrid migrations to Exchange Online.

As you probably know, there are 2 flavors of hybrid configurations:

To choose one vs. the other, when running the Hybrid Configuration Wizard (HCW), you would choose one of the appropriate options when running the HCW:

Both of those hybrid topologies support hybrid remote moves based on Mailbox Replication Service (MRS) and specifically the MRSProxy extension.

We won’t go into details about MRS here, but here are some references for you to read if you are interested to read more:

One of the greatest benefits of MRS-based moves is that we don’t need to recreate Outlook profiles and re-download the OST after migration, because we keep the same ExchangeGuid and mailbox signature of the mailbox when it is moved. With hybrid remote moves, we migrate all the data that is contained in the mailbox and we cannot skip any data (like dumpster or junk folder). 

When moving mailboxes through migration batches, another service called Migration Service is also involved. It is an orchestration engine on top of MRS. Migration Service does not have an independent service running on the server, it is a part of Microsoft Exchange Service Host. This is present in Exchange Online and on-premises Exchange 2013/2016/2019 servers. Migration Service runs cmdlets like New-MoveRequest (hybrid migrations), New-SyncRequest (IMAP migrations), New-MergeRequest (Outlook Anywhere migrations) and is managed using “migration” commands like New-MigrationBatch, New-MigrationUser, New-MigrationEndpoint etc.

More specifically, when you start a migration through batches, the Migration Service will:

  • Create the batch of users as per your inputs: the name of the migration batch, which users are to be migrated in a batch based on CSV file or selecting them from People Picker in the GUI, settings like bad and large items limit, settings for manual or automatic startup / completion of the batch.

In the background, the cmdlet New-MigrationBatch <name of the migration batch> will create the batch containing the user identities to be migrated in that batch, ex: john@contoso.com, jane@contoso.com. This will create new migration user objects for each user identity from the migration batch that you can retrieve later with Get-MigrationUser and Get-MigrationUserStatistics cmdlets.

As a note, hybrid migrations are the only ones where migration batches can be completed (Complete-MigrationBatch). Also, with Cutover migrations, you can have only one batch (this will take all your on-premises Exchange recipients present in the GAL). For the rest of our native migrations, there is a 100 batches limit.

  • Create the migration endpoint if it does not exist already, for example: New-MigrationEndpoint -Name “Hybrid Exchange” -ExchangeRemoteMove
    On migration endpoints, you will choose settings like using Autodiscover or not, on-premises admin credentials, max concurrent migrations.
  • Invoke cmdlets specific for the migration type chosen (Hybrid, Cutover, Staged, IMAP/GSuite), example New-MoveRequest john@contoso.com -Remote for a Hybrid Migration (Exchange Remote Move).

Below is a simplified image of what migration service in Exchange Online does when you start a migration:

Knowing this background processes will help you troubleshoot your migrations more efficiently, see exactly where are you stuck at with your migration: if for example you see that a migration user is created in a hybrid migration but a corresponding move request is not created, then you could just try to inject the move request by yourself and see if it gives the same error message (bypassing the Migration Service as a troubleshooting step).

Additionally, if you are not able to do migrations anymore via an existing migration endpoint (supposing the credentials of a particular admin for that endpoint expired) , you could directly inject the move request in Exchange Online PowerShell and inputting valid admin credentials to start the migration until you update that endpoint / create a new one.

Example of a cmdlet that will directly inject the onboarding move request in Exchange Online PowerShell, bypassing the migration endpoint settings or the Migration Service itself:

 

 

 

 

New-MoveRequest -Identity john@contoso.com -Remote -RemoteHostName <External EWS URL or Hybrid Agent> -TargetDeliveryDomain <YourTenantInitialDomain>.mail.onmicrosoft.com -RemoteCredential (Get-Credential domain\admin)

 

 

 

 

When initiating a move request like this, you won’t have a migration user object created for it, as the Migration Service / migration batches were not used.

So, depending on how the migration was initiated – through migration batches or not -  you will see these objects created by default by the Migration Service and you can run get-* commands to see what has been created in your environment during a migration: Get-Migration* commands results are available when migrations were initiated through migration batches / Migration Service and Get-MoveRequest command results would be available if for example you started a hybrid move directly from PowerShell with New-MoveRequest but also if you started migration via batches and the Migration Service successfully created the move request (see below image).

Migration Service in Exchange Online stores information regarding your migration endpoints or migration batches in migration Arbitration mailboxes. To check your migration Arbitration mailbox, you can connect to Exchange Online PowerShell and run Get-Mailbox -Migration cmdlet. Issues with this mailbox (migration arbitration mailbox) or the Migration Service in Office 365 would affect your migration endpoints and migration batches.

Hybrid migrations (as well as the other native migrations) are always initiated from O365 Exchange Online side in both onboarding (migrate to Exchange Online) and offboarding (migrate from Exchange Online). However, offboarding request back to on-premises Exchange are only natively possible with Hybrid Migrations. These can be performed using migration batches or through separate move requests in PowerShell. The most common way is by using migration batches, typically from GUI.

Now that you have an idea on the migration components involved, let us show you how we check the migration endpoints in Exchange Admin Center (EAC) and PowerShell.

Locate migration endpoints in EAC:

There are several migration (endpoint) types:

Below is an image that explains briefly these Migration Endpoints and their corresponding Migration types:

To view existing or currently configured migration endpoints from PowerShell (Exchange Online), you can run the following cmdlets:

 

 

 

 

Get-MigrationEndpoint
Get-MigrationEndpoint | FL
Get-MigrationEndpoint -DiagnosticInfo verbose | FL

 

 

 

 

 

With that, we are done with the migration endpoints overview. We will follow up soon with the troubleshooting part!

I wanted to thank Brad Hughes, Nino Bilic and Greg Taylor for their review of this post.

Mirela Buruiana

Updated Oct 25, 2019
Version 6.0
  • Hi Andy Dring , you don't require Autodiscover and EWS to be published externally for Migration and Free/Busy purposes. The EWS endpoint will be reachable at <GUID>.resource.mailboxmigration.his.msappproxy.net externally by Exchange Online and from there routed to the Hybrid Connector (which can be load balancer or Exchange CAS) through Azure App Proxy technology.
    More info on this:
    https://techcommunity.microsoft.com/t5/exchange-team-blog/the-microsoft-hybrid-agent-public-preview/ba-p/608939 
    https://docs.microsoft.com/en-us/exchange/hybrid-deployment/hybrid-agent

  • Hi, my name is Mirela Buruiana and I am the main author of this blog. Reply to this comment if you want me to get notified about your question /comment.

  • Andy Dring's avatar
    Andy Dring
    Copper Contributor

    Hi Mirela,

     

    In a modern hybrid, using hte Hybrid Agent, if there is no requirement to publish the Autodiscover and other endpoints that would typically be required, such as EWS, how do you set up the Migration Endpoint. Is it still necessary to have a DNS record pointing to the EWS endpoint?

     

    thanks,

     

    Andy

  • Hello

    I am a little bit confused with the Multi Hybrid Agents. In case we dont have a Load Balancer can i have the Agents on 2 x Exchange 2010 SP3 with the CAS roles ? And what about the endpoint ? if we run the new Agent Setup does it change to Azure App proxy format ? Can i have some clarification on that please ? Thank you very much!

  • KonstantinosPassadis

    For the first question, our documentation says that you cannot point the Hybrid Agent to LoadBalancer for Ex2010 version anyway: https://docs.microsoft.com/en-us/exchange/hybrid-deployment/hybrid-agent#direct-your-hybrid-agents-to-the-load-balancer-instead-of-a-specific-server
    But I believe you can still install multiple Hybrid Agents in Ex2010 environment just that they will point to single Ex2010 CAS at a time. Looking at the prerequisites in the same article I pasted above, if you want to install it on Exchange 2010 CAS itself, you need the Windows Server 2012 R2 OS running on it. What is important is that the Internal URI (you can see it in Get-HybridApplication cmdlet available in Hybrid Management module OR in the HCW log in the Connector Route) to be resolved internally (hosts file or internal DNS) to single Exchange 2010 CAS servers IP address.
    I am not sure I understand your second question, can you elaborate on that?

     

  • Thank you Mirela_Buru , your explanation is quite clear and it helped me clear out what i was thinking. Never mind the second Question , i read a series of docs regarding the new HCA and it is clear also , how the endpoint URL looks like.

     

    Again thank you very much!