Added high availability options to AWS deployment. #5304

pull/5349/head
Yogesh Mahajan 2022-09-22 11:26:05 +05:30 committed by Akshay Joshi
parent 6d1283f92d
commit 83e2ee04d1
10 changed files with 74 additions and 6 deletions

View File

@ -53,6 +53,9 @@ details.
* Use the *Provisioned IOPS* in case of Provisioned IOPS (SSD) storage type.
* Use the *High Availability* option to specify High Availability
option. This option creates a standby in a different Availability Zone(AZ).
.. image:: images/cloud_aws_database.png
:alt: Cloud Deployment Provider
:align: center

View File

@ -73,7 +73,7 @@ details.
should be accepted. Add multiple IP addresses/ranges separated with commas,
for example: "192.168.0.50, 192.168.0.100 - 192.168.0.200"
* User *Zone redundant high availability* option to specify High Availability
* Use *Zone redundant high availability* option to specify High Availability
option. Zone redundant high availability deploys a standby replica in a
different zone.
The Burstable instance type does not support high availability.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 KiB

After

Width:  |  Height:  |  Size: 153 KiB

View File

@ -11,6 +11,7 @@ notes for it.
.. toctree::
:maxdepth: 1
release_notes_6_15
release_notes_6_14
release_notes_6_13
release_notes_6_12

View File

@ -0,0 +1,25 @@
************
Version 6.15
************
Release date: 2022-10-20
This release contains a number of bug fixes and new features since the release of pgAdmin 4 v6.14.
Supported Database Servers
**************************
**PostgreSQL**: 10, 11, 12, 13 and 14
**EDB Advanced Server**: 10, 11, 12, 13 and 14
New features
************
| `Issue #5304 <https://github.com/pgadmin-org/pgadmin4/issues/5304>`_ - Added high availability options to AWS deployment.
Housekeeping
************
Bug fixes
*********

View File

@ -102,6 +102,8 @@ class RdsProvider(AbsProvider):
parser_create_instance.add_argument('--storage-type', default='gp2',
help='storage type for the data '
'database (default: gp2)')
parser_create_instance.add_argument('--high-availability',
default=False)
parser_create_instance.add_argument('--public-ip', default='127.0.0.1',
help='Public IP '
'(default: 127.0.0.1)')
@ -207,7 +209,7 @@ class RdsProvider(AbsProvider):
StorageEncrypted=True,
Iops=args.storage_iops,
AutoMinorVersionUpgrade=True,
MultiAZ=False,
MultiAZ=bool(args.high_availability),
MasterUsername=args.db_username,
MasterUserPassword=db_password,
DBInstanceClass=args.instance_type,

View File

@ -283,6 +283,8 @@ def deploy_on_rds(data):
str(data['instance_details']['storage_size']),
'--public-ip',
str(data['instance_details']['public_ip']),
'--high-availability',
str(data['instance_details']['high_availability'])
]
if data['instance_details']['storage_type'] == 'io1':

View File

@ -205,6 +205,10 @@ export function validateCloudStep3(cloudDBDetails, nodeInfo) {
}
function createData(name, value) {
if (typeof(value) == 'boolean') {
value = (value === true) ? 'True' : 'False';
}
return { name, value };
}
@ -237,7 +241,11 @@ export function getAWSSummary(cloud, cloudInstanceDetails, cloudDBDetails) {
createData(gettext('Port'), cloudDBDetails.db_port),
];
return [rows1, rows2, rows3, rows4];
const rows5 = [
createData(gettext('High availability'), cloudInstanceDetails.high_availability),
];
return [rows1, rows2, rows3, rows4, rows5];
}
const getStorageType = (cloudInstanceDetails) => {

View File

@ -75,6 +75,7 @@ export function FinalSummary(props) {
summaryHeader.push('Network Connectivity','Availability');
summary = getAzureSummary(props.cloudProvider, props.instanceData, props.databaseData);
}else {
summaryHeader.push('Availability');
summary = getAWSSummary(props.cloudProvider, props.instanceData, props.databaseData);
}

View File

@ -18,6 +18,7 @@ class CloudInstanceDetailsSchema extends BaseUISchema {
oid: undefined,
name: '',
public_ip: initValues.hostIP,
high_availability: false,
...initValues
});
@ -50,6 +51,10 @@ class CloudInstanceDetailsSchema extends BaseUISchema {
type: 'nested-fieldset', label: gettext('Storage'),
mode: ['create'],
schema: new StorageSchema(),
}, {
type: 'nested-fieldset', label: gettext('Availability'),
mode: ['create'],
schema: new HighAvailablity(),
},
];
}
@ -198,12 +203,12 @@ export class InstanceSchema extends BaseUISchema {
noEmpty: true,
},{
id: 'db_instance_class', label: gettext('Instance class'),
type: 'toggle',
type: 'select',
options: [
{'label': gettext('Standard classes (includes m classes)'), value: 'm'},
{'label': gettext('Memory optimized classes (includes r & x classes)'), value: 'x'},
{'label': gettext('Burstable classes (includes t classes)'), value: 't'},
], noEmpty: true, orientation: 'vertical',
], noEmpty: true
},{
id: 'instance_type', label: gettext('Instance type'),
options: this.instanceOpts,
@ -301,6 +306,27 @@ export class StorageSchema extends BaseUISchema {
}
}
export class HighAvailablity extends BaseUISchema {
constructor() {
super({
high_availability: false
});
}
get baseFields() {
return [
{
id: 'high_availability',
label: gettext('High availability'),
type: 'switch',
mode: ['create'],
helpMessage: gettext(
'Creates a standby in a different Availability Zone (AZ) to provide data redundancy, eliminate I/O freezes, and minimize latency spikes during system backups.'
),
},
];
}
}
class BigAnimalInstanceSchema extends BaseUISchema {
constructor(fieldOptions = {}, initValues={}) {