AWS RDS Aurora - Cross Region Read Replica has both Write and Reader instance? - amazon-web-services

I noticed when a Cross Region Read Replica was created for my AWS Aurora cluster - it has both a Write and Reader instance (Similar to my Primary which naturally has a writer in addition to a reader instance). In the Cluster Configuration for the Cross Region Replica cluster - I can see this "Replica" cluster indeed has the Replication source tag and its correctly getting all data flowed asynchronously.
Couple of questions I need help understanding this:
should a Cross Region Replica have a Writer?
Should I write to it in case of a disaster in the source region?

I had to explicitly make the read-replica instance (in replica region) as read_only. Otherwise read-replica accepts writes to it.

Found relevant answer in AWS re:Post:
"You're replicating to a new cluster, and each cluster needs a writer
instance. It is recommended that customers apply the read_only
parameter to the replica, but by default they are able to write to
this instance. This allows for architectures where the replica is read
& writable.
https://repost.aws/questions/QUrCbnj0u4TWaz-A1uR-QDPQ/aurora-create-cross-region-read-replica-vs-add-region

I think the name "writer" is a bit misleading.
In the doc for Aurora endpoint:
A cluster endpoint (or writer endpoint) for an Aurora DB cluster connects to the current primary DB instance for that DB cluster. This endpoint is the only one that can perform write operations such as DDL statements. Because of this, the cluster endpoint is the one that you connect to when you first set up a cluster or when your cluster only contains a single DB instance. Each Aurora DB cluster has one cluster endpoint and one primary DB instance.
So the writer instance is the same entity as the primary instance of the cluster.
In the doc for Cross-Region Replication:
When you create a cross-Region read replica for Aurora MySQL by using the AWS Management Console, Amazon RDS creates a DB cluster in the target AWS Region, and then automatically creates a DB instance that is the primary instance for that DB cluster.
For cross region replication, the new cluster (writer instance) will be created.
You don't need to take care of the writer instance. For the disaster recovery, promote read replica.

Related

aws rds multi-az configuration

On aws rds postgresql (not aurora) cluster, there is a writer instance and a reader instance. Couple of questions -
In the describe-db-cluster command output it shows "MultiAZ": true, but describe-db-instances of this cluster's instances says "MultiAZ": false.
(a) Are the cluster's instances configured to be multi-az?
(b) Whenever writer instance fails over I see reader becomes writer, a bit confused here because I thought the difference between multi-az and read replica setup is that in case of multi-az's automatic failover happens and in case of read replica's failover needs to be triggered manually. How is it that read replica is becoming primary in case of failover?
(c) Why multi-az shows to be true at cluster level. Is it
showing multi-az because of reader and writer being in different
az's?
How do I know what storage class (provisioned iops, gp2) is being used by the cluster's instances? I am unable to figure it out from the describe-db-instances or describe-db-cluster command output.
I think there is some confusion here what is cluster, aurora, multi-az, and so on.
"Cluster" only applies to Aurora. Thus there is no such thing as "postgresql (not aurora) cluster" and command describe-db-cluster will not work on non-aurora databases. If you try to run it on non-aurora db instance you will get:
DBCluster <name> not found
In Aurora, MultiAZ is provided through Aurora replicas (i.e. readers), while in RDS databases, MultiAZ is provided through a Stand-by db instance, which is different from read-replicas.
How is it that read replica is becoming primary in case of failover?
Because this is exactly what happens when you run Aurora. In RDS, the Stand-by becomes the new primary, not read-replica.
Why multi-az shows to be true at cluster level. Is it showing multi-az because of reader and writer being in different az's?
Yes. In aurora Multi-AZ is enabled through readers in different AZs than primary.
How do I know what storage class (provisioned iops, gp2) is being used by the cluster's instances?
In Aurora there is no such notion as different storage classes. AWS uses different and in-house develop storage solution for it.

Amazon RDS cross region bi-directional data replication

I have a Amazon RDS MySQL database in the us-east-1 region. I have a few read replicas in that region for the master db as well. I'm working on a new app which will require the same data from that db but I would like to host the app and create a new db instance in us-west-2 for latency reasons. I still want to host the original application in us-east 1 though.
Is it possible in Amazon RDS to create a cross region bidirectional database so the db in us-west-2 is a replica of the one in us-east-1 that I can also write to?
I rather not use Amazon Aurora right now if possible but if that's the only answer then I guess it's something I will have to do.
Amazon RDS does not support multi-master clusters across regions.
From Working with Aurora Multi-Master Clusters - Amazon Aurora:
You can't enable cross-region replicas from multi-master clusters.
Both Aurora and the non-Aurora databases in Amazon RDS can provide multi-region read replicas, but these are one-way replicas.
If you happen to be using Aurora MySQL - take a look at Write Forwarding.
This allows replicas to send writes to the primary cluster and then (depending on your selected consistency option) waits for relevant changes to be replicated back to itself and other region replicas.
This can help get around the cross-region limitations of Multi-Master and lets you at least simulate a 2-way replication across AWS regions.

Restore RDS DB instance from snapshot with multi-AZ deployment [duplicate]

When I restore a MySQL snapshot, I'm given the option to make the new instance Multi-AZ. However for some reason when I restore to Aurora, the "Multi-AZ Deployment" selection is disabled.
I thought possibly this meant it was automatically enabled. However when I go to the running instance details, it specifically lists Multi-AZ: "No".
Is there something I'm missing? Is there some other step I need to do to make Aurora Multi-AZ?
Multi-AZ doesn't mean the same thing in Aurora as it does for MySQL and MariaDB. With Aurora, any replica in the cluster can take over for the master on failure (though the selection is based on priority, so it isn't just a randomly selected replica, if there is more than one replica), and the storage is already/always multi-AZ in Aurora because that's a core part of the Aurora design. So, Aurora can be "converted" to Multi-AZ.
Apparently, that's the only way it is done when creating an Aurora instance from a snapshot, based on this:
You can migrate a DB snapshot of an Amazon RDS MySQL DB instance to create an Aurora DB cluster.
...
You can migrate either a manual or automated DB snapshot. After the DB cluster is created, you can then create optional Aurora Replicas.
http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Aurora.Migrate.RDSMySQL.html
If you create a multi-AZ Aurora cluster without a snapshot, that's all that happens -- a master and a replica are created. In that case, you can actually delete the replica and make it non-multi-AZ, which is a different process than what's involved with MySQL or MariaDB.
"Create a cluster" -- as used in the quote, above -- is a potentially confusing term, since you would naturally assume a cluster means two or more, but in fact an Aurora cluster can technically be a "cluster" of just one instance. Every Aurora instance is part of exactly one cluster. One instance is the primary (master) and any additional instances are replicas.
If the DB cluster doesn't contain any Aurora Replicas, then the primary instance is recreated during a failure event.
http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Aurora.Managing.html#Aurora.Managing.FaultTolerance

Does Amazon Aurora create a new replica if an existing one gets promoted to the primary?

If a primary Aurora DB instance dies for some reason, and an existing replica gets promoted to the new primary, does a new replica instance get created so that I end up with the same number of read replicas?
If so, how long does it take for a new replica to be spun up on average?
There are two types of read replicas:
Backup replica (also known as slave) made by AWS when you deploy Multi-AZ RDS instance. That is synchronous read replica, but you can not use it.
Read replica created by you. Those are asynchronous replicas that you can use to offload some work.
A backup replica will be promoted to master automatically, usually it takes less than a minute. And yes, AWS will create new slave for the RDS instance that's now the master. It could take from several minutes to several hours depending on your workload and DB size.
Read replicas created by you will be just switched to the new master.
AWS Aurora is AWS's database with an architecture designed for cloud computing technologies. One of it's differences is that data is stored in a storage architecture similar to S3, in a cluster volume, which is a single, utilizes solid state disk (SSD) drives and consists of copies of the data across multiple Availability Zones in a single region. That has a few advantages, such as durability and also the fact that is distributed through in entire region, not just an AZ, helping with consistency between replicas and performance.
In case you have read replicas and your Master fails, one of them will become Master without downtime.
If you don't have a read replica, a new Master instance will be created and the process is really fast. Since data is on clusterized across the region, not on the server's disk, the process is fast, but there is downtime.
As AWS says:
To increase availability, you can use Aurora Replicas as failover
targets. That is, if the primary instance fails, an Aurora Replica is
promoted to the primary instance with only a brief interruption during
which read and write requests made to the primary instance fail with
an exception. If your Aurora DB cluster does not include any Aurora
Replicas, then the primary instance is recreated during a failure
event. However, promoting an Aurora Replica is much faster than
recreating the primary instance. For high-availability scenarios, we
recommend that you create one or more Aurora Replicas, of the same DB
instance class as the primary instance, in different Availability
Zones for your Aurora DB cluster. For more information on Aurora
Replicas as failover targets, see Fault Tolerance for an Aurora DB
Cluster.
You can read more on: http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Aurora.Replication.html"

Multi-az deployment in AWS Aurora and read replicas

can someone help me with these questions please :
1- the documentation stated that Aurora will automatically fail-over to the read replicas, my question is how does it select the replica which will be promoted if you have more than one with different instances class?
2- can I disable this automatic fail-over (just asking, not stating that I will do it)
3- what is the purpose of multi-az in Aurora if you can have the same effect with much more control on instances classes while creating replicas and let Aurora do the auto fail-over for you. please correct me if I am wrong with this assumption.
thanks in advance
The algorithm for election of a new master in case of failure is not really documented... but it doesn't seem to matter, because Aurora replicas seem to be different than other RDS replicas, because all the instances in the cluster are necessarily of the same instance class.
Unlike other RDS offerings, read replicas in Aurora do not appear to have an independent copy of the backing store -- instead, the backing store itself provides redundancy, being replicated at the storage level with two copies in each of three availability zones.
The cluster volume is made up of multiple copies of the data for the DB cluster, but the data in the cluster volume is represented as a single, logical volume to the primary and Aurora Replicas in the DB cluster.
Because the cluster volume is shared among all instances in your DB cluster, no additional work is required to replicate a copy of the data for each Aurora Replica.
http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Aurora.Replication.html
Multi-AZ in Aurora is also not the same thing -- with other RDS products, multi-AZ involves a second, invisible instance, running in parallel with the master. The Aurora literature uses the phrase "multi-AZ technology," but the meaning appears to be different. Note that the Aurora pricing tables don't show a separate pricing rate for "multi-AZ" the way MySQL and MariaDB do.
Failover doesn't appear to be something that can be disabled. Even if you have no replicas, Aurora will still "fail over" if the master fails -- but it does it by spinning up a replacement master using the existing cluster volume as the backing store.
The above answer is no longer valid anymore.
Multi AZ = Aurora Cluster with at least one Read Replica in a
different AZ.
You can still create multiple read replicas for a cluster but if you create them within the same AZ of your writer, cluster will not be multi AZ.
Within each AWS Region, Availability Zones (AZs) represent locations that are distinct from each other to provide isolation in case of outages. We recommend that you distribute the primary instance and reader instances in your DB cluster over multiple Availability Zones to improve the availability of your DB cluster. That way, an issue that affects an entire Availability Zone doesn't cause an outage for your cluster.
You can set up a Multi-AZ cluster by making a simple choice when you create the cluster. The choice is simple whether you use the AWS Management Console, the AWS CLI, or the Amazon RDS API. You can also make an existing Aurora cluster into a Multi-AZ cluster by adding a new reader instance and specifying a different Availability Zone.
https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Concepts.AuroraHighAvailability.html