> 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>
