> For the complete documentation index, see [llms.txt](https://support.getdatastream.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://support.getdatastream.com/support/disaster-recovery/load-balancing.md).

# Load Balancing

Data Stream supports load balancing between two computers running Microsoft SQL Server and configured for [database mirroring](https://docs.microsoft.com/en-us/sql/database-engine/database-mirroring/database-mirroring-sql-server?view=sql-server-2017).

## Installation

1. [Create Primary Master Key](/support/disaster-recovery/load-balancing.md#create-primary-master-key)
2. [Create Primary Certificate](/support/disaster-recovery/load-balancing.md#create-primary-certificate)
3. [Create Primary Endpoint](/support/disaster-recovery/load-balancing.md#create-primary-endpoint)
4. [Backup Primary Certificate](/support/disaster-recovery/load-balancing.md#backup-primary-certificate)
5. [Create Secondary Login](/support/disaster-recovery/load-balancing.md#create-secondary-login)
6. [Create Secondary Master Key](/support/disaster-recovery/load-balancing.md#create-secondary-master-key)
7. [Create Secondary Certificate](/support/disaster-recovery/load-balancing.md#create-secondary-certificate)
8. [Create Secondary Endpoint](/support/disaster-recovery/load-balancing.md#create-secondary-endpoint)
9. [Backup Secondary Certificate](/support/disaster-recovery/load-balancing.md#backup-secondary-certificate)
10. [Create Primary Login](/support/disaster-recovery/load-balancing.md#create-primary-login)
11. [Map Primary Certificate to Primary User](/support/disaster-recovery/load-balancing.md#map-primary-certificate-to-primary-user)
12. [Grant Connect to Primary User](/support/disaster-recovery/load-balancing.md#grant-connect-to-primary-login)
13. [Map Secondary Certificate to Secondary User](/support/disaster-recovery/load-balancing.md#map-secondary-certificate-to-secondary-user)
14. [Grant Connect to Secondary User](/support/disaster-recovery/load-balancing.md#grant-connect-to-secondary-user)
15. [Alter Primary Database Set Partner](/support/disaster-recovery/load-balancing.md#alter-primary-database-set-partner)
16. [Alter Secondary Database Set Partner](/support/disaster-recovery/load-balancing.md#alter-primary-database-set-partner)

### Primary

#### Create Primary Master Key

```sql
USE master;

CREATE MASTER KEY ENCRYPTION
  BY PASSWORD = 'secret password';
GO
```

#### Create Primary Certificate

```sql
USE master;

CREATE CERTIFICATE PRIMARY_cert
   WITH SUBJECT = 'Primary certificate for database mirroring',
   EXPIRY_DATE = '1/1/2038';
GO
```

#### Create Primary Endpoint

```sql
USE master;

CREATE ENDPOINT Mirroring
   STATE = STARTED
   AS TCP (
      LISTENER_PORT = 5022
      , LISTENER_IP = ALL
   )
   FOR DATABASE_MIRRORING (
      AUTHENTICATION = CERTIFICATE PRIMARY_cert
      , ENCRYPTION = REQUIRED ALGORITHM AES
      , ROLE = ALL
   );
GO
```

#### Backup Primary Certificate

```sql
USE master;

BACKUP CERTIFICATE PRIMARY_cert 
  TO FILE = 'C:\PRIMARY_cert.cer';
GO
```

#### Create Secondary Login

```sql
USE master;

CREATE LOGIN SECONDARY_login
   WITH PASSWORD = 'secondary secret password';
GO

CREATE USER SECONDARY_user FOR LOGIN SECONDARY_login;
GO 
```

#### Map Secondary Certificate to Secondary User

```sql
USE master;

CREATE CERTIFICATE SECONDARY_cert
   AUTHORIZATION SECONDARY_user
   FROM FILE = 'C:\SECONDARY_cert.cer';
GO
```

#### Grant Connect to Secondary User

```sql
USE master;

GRANT CONNECT ON ENDPOINT::Mirroring TO [SECONDARY_login];
GO
```

#### Alter Primary Database Set Partner

```sql
USE master;

ALTER DATABASE [DataStream] SET PARTNER = 'TCP://PARTNER:5022';
GO
```

### Secondary

#### Create Secondary Master Key

```sql
USE master;

CREATE MASTER KEY ENCRYPTION
  BY PASSWORD = 'secret password';
GO
```

#### Create Secondary Certificate

```sql
USE master;

CREATE CERTIFICATE SECONDARY_cert
   WITH SUBJECT = 'Secondary certificate for database mirroring',
   EXPIRY_DATE = '1/1/2038';
GO
```

#### Create Secondary Endpoint

```sql
USE master;

CREATE ENDPOINT Mirroring
   STATE = STARTED
   AS TCP (
      LISTENER_PORT = 5022
      , LISTENER_IP = ALL
   )
   FOR DATABASE_MIRRORING (
      AUTHENTICATION = CERTIFICATE SECONDARY_cert
      , ENCRYPTION = REQUIRED ALGORITHM AES
      , ROLE = ALL
   );
GO
```

#### Backup Secondary Certificate

```sql
USE master;

BACKUP CERTIFICATE SECONDARY_cert 
  TO FILE = 'C:\SECONDARY_cert.cer';
GO
```

#### Create Primary Login

```sql
USE master;

CREATE LOGIN PRIMARY_login
   WITH PASSWORD = 'primary secret password';
GO

CREATE USER PRIMARY_user FOR LOGIN PRIMARY_login;
GO
```

#### Map Primary Certificate to Primary User

```sql
USE master;

CREATE CERTIFICATE PRIMARY_cert
   AUTHORIZATION PRIMARY_user
   FROM FILE = 'C:\PRIMARY_cert.cer';
GO
```

#### Grant Connect to Primary Login

```sql
USE master;

GRANT CONNECT ON ENDPOINT::Mirroring TO [PRIMARY_login];
GO
```

#### Alter Secondary Database Set Partner

```sql
USE master;

ALTER DATABASE [DataStream] SET PARTNER = 'TCP://PARTNER:5022';
GO
```

## Validation

### Primary

<div align="left"><img src="/files/-LTd8ONaYo3fVWUzLcsx" alt=""></div>

### Secondary

<div align="left"><img src="/files/-LTd8ONZZsJftLcX7q0_" alt=""></div>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://support.getdatastream.com/support/disaster-recovery/load-balancing.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
