Added high availability options to AWS deployment. #5304
parent
6d1283f92d
commit
83e2ee04d1
|
@ -53,6 +53,9 @@ details.
|
||||||
|
|
||||||
* Use the *Provisioned IOPS* in case of Provisioned IOPS (SSD) storage type.
|
* 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
|
.. image:: images/cloud_aws_database.png
|
||||||
:alt: Cloud Deployment Provider
|
:alt: Cloud Deployment Provider
|
||||||
:align: center
|
:align: center
|
||||||
|
|
|
@ -73,7 +73,7 @@ details.
|
||||||
should be accepted. Add multiple IP addresses/ranges separated with commas,
|
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"
|
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
|
option. Zone redundant high availability deploys a standby replica in a
|
||||||
different zone.
|
different zone.
|
||||||
The Burstable instance type does not support high availability.
|
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 |
|
@ -11,6 +11,7 @@ notes for it.
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|
||||||
|
release_notes_6_15
|
||||||
release_notes_6_14
|
release_notes_6_14
|
||||||
release_notes_6_13
|
release_notes_6_13
|
||||||
release_notes_6_12
|
release_notes_6_12
|
||||||
|
|
|
@ -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
|
||||||
|
*********
|
|
@ -102,6 +102,8 @@ class RdsProvider(AbsProvider):
|
||||||
parser_create_instance.add_argument('--storage-type', default='gp2',
|
parser_create_instance.add_argument('--storage-type', default='gp2',
|
||||||
help='storage type for the data '
|
help='storage type for the data '
|
||||||
'database (default: gp2)')
|
'database (default: gp2)')
|
||||||
|
parser_create_instance.add_argument('--high-availability',
|
||||||
|
default=False)
|
||||||
parser_create_instance.add_argument('--public-ip', default='127.0.0.1',
|
parser_create_instance.add_argument('--public-ip', default='127.0.0.1',
|
||||||
help='Public IP '
|
help='Public IP '
|
||||||
'(default: 127.0.0.1)')
|
'(default: 127.0.0.1)')
|
||||||
|
@ -207,7 +209,7 @@ class RdsProvider(AbsProvider):
|
||||||
StorageEncrypted=True,
|
StorageEncrypted=True,
|
||||||
Iops=args.storage_iops,
|
Iops=args.storage_iops,
|
||||||
AutoMinorVersionUpgrade=True,
|
AutoMinorVersionUpgrade=True,
|
||||||
MultiAZ=False,
|
MultiAZ=bool(args.high_availability),
|
||||||
MasterUsername=args.db_username,
|
MasterUsername=args.db_username,
|
||||||
MasterUserPassword=db_password,
|
MasterUserPassword=db_password,
|
||||||
DBInstanceClass=args.instance_type,
|
DBInstanceClass=args.instance_type,
|
||||||
|
|
|
@ -283,6 +283,8 @@ def deploy_on_rds(data):
|
||||||
str(data['instance_details']['storage_size']),
|
str(data['instance_details']['storage_size']),
|
||||||
'--public-ip',
|
'--public-ip',
|
||||||
str(data['instance_details']['public_ip']),
|
str(data['instance_details']['public_ip']),
|
||||||
|
'--high-availability',
|
||||||
|
str(data['instance_details']['high_availability'])
|
||||||
]
|
]
|
||||||
|
|
||||||
if data['instance_details']['storage_type'] == 'io1':
|
if data['instance_details']['storage_type'] == 'io1':
|
||||||
|
|
|
@ -205,6 +205,10 @@ export function validateCloudStep3(cloudDBDetails, nodeInfo) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function createData(name, value) {
|
function createData(name, value) {
|
||||||
|
if (typeof(value) == 'boolean') {
|
||||||
|
value = (value === true) ? 'True' : 'False';
|
||||||
|
}
|
||||||
|
|
||||||
return { name, value };
|
return { name, value };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -237,7 +241,11 @@ export function getAWSSummary(cloud, cloudInstanceDetails, cloudDBDetails) {
|
||||||
createData(gettext('Port'), cloudDBDetails.db_port),
|
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) => {
|
const getStorageType = (cloudInstanceDetails) => {
|
||||||
|
|
|
@ -75,6 +75,7 @@ export function FinalSummary(props) {
|
||||||
summaryHeader.push('Network Connectivity','Availability');
|
summaryHeader.push('Network Connectivity','Availability');
|
||||||
summary = getAzureSummary(props.cloudProvider, props.instanceData, props.databaseData);
|
summary = getAzureSummary(props.cloudProvider, props.instanceData, props.databaseData);
|
||||||
}else {
|
}else {
|
||||||
|
summaryHeader.push('Availability');
|
||||||
summary = getAWSSummary(props.cloudProvider, props.instanceData, props.databaseData);
|
summary = getAWSSummary(props.cloudProvider, props.instanceData, props.databaseData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,7 @@ class CloudInstanceDetailsSchema extends BaseUISchema {
|
||||||
oid: undefined,
|
oid: undefined,
|
||||||
name: '',
|
name: '',
|
||||||
public_ip: initValues.hostIP,
|
public_ip: initValues.hostIP,
|
||||||
|
high_availability: false,
|
||||||
...initValues
|
...initValues
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -50,6 +51,10 @@ class CloudInstanceDetailsSchema extends BaseUISchema {
|
||||||
type: 'nested-fieldset', label: gettext('Storage'),
|
type: 'nested-fieldset', label: gettext('Storage'),
|
||||||
mode: ['create'],
|
mode: ['create'],
|
||||||
schema: new StorageSchema(),
|
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,
|
noEmpty: true,
|
||||||
},{
|
},{
|
||||||
id: 'db_instance_class', label: gettext('Instance class'),
|
id: 'db_instance_class', label: gettext('Instance class'),
|
||||||
type: 'toggle',
|
type: 'select',
|
||||||
options: [
|
options: [
|
||||||
{'label': gettext('Standard classes (includes m classes)'), value: 'm'},
|
{'label': gettext('Standard classes (includes m classes)'), value: 'm'},
|
||||||
{'label': gettext('Memory optimized classes (includes r & x classes)'), value: 'x'},
|
{'label': gettext('Memory optimized classes (includes r & x classes)'), value: 'x'},
|
||||||
{'label': gettext('Burstable classes (includes t classes)'), value: 't'},
|
{'label': gettext('Burstable classes (includes t classes)'), value: 't'},
|
||||||
], noEmpty: true, orientation: 'vertical',
|
], noEmpty: true
|
||||||
},{
|
},{
|
||||||
id: 'instance_type', label: gettext('Instance type'),
|
id: 'instance_type', label: gettext('Instance type'),
|
||||||
options: this.instanceOpts,
|
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 {
|
class BigAnimalInstanceSchema extends BaseUISchema {
|
||||||
constructor(fieldOptions = {}, initValues={}) {
|
constructor(fieldOptions = {}, initValues={}) {
|
||||||
|
|
Loading…
Reference in New Issue