Read-only nodes are replicas of a cluster’s primary node located in additional geographical regions. Using read-only nodes reduces latency for users connecting from those regions.
Communication between primary and read-only nodes is SSL-encrypted and sent over the public network.
    
    Read-only nodes differ from standby nodes, which are exact copies of the primary node that are automatically moved into place in the event of a primary node failure.
Create a Read-Only Node Using the CLI
    
        
    
    
    To create a read-only node using doctl, you need to provide values --region and --size flags, which specify the node’s datacenter and its configuration (number of CPUs, amount of RAM, and hard disk space). Use the doctl databases options regions and doctl databases options slugs commands, respectively, to get a list of available values.
    How to Create a Read-Only Node Using the DigitalOcean CLI
- Install doctl, the official DigitalOcean CLI.
- Create a personal access token and save it for use with doctl.
- Use the token to grant doctlaccess to your DigitalOcean account.
- Finally, run doctl databases replica create. Basic usage looks like this, but you can read the usage docs for more details:doctl databases replica create <database-cluster-id> <replica-name> [flags]
 
example-replicafor a database cluster with the IDca9f591d-f38h-5555-a0ef-1c02d1d1e35:doctl databases replica create ca9f591d-f38h-5555-a0ef-1c02d1d1e35 example-replica --size db-s-1vcpu-1gb
 
 
Create a Read-Only Node Using the API
    
        
    
    
    To create a read-only node using the API, you need to provide values for the region and size fields, which specify the new node’s datacenter and its configuration (number of CPUs, amount of RAM, and hard disk space). Use the /v2/databases/options endpoint to get a list of available values.
    How to Create a Read-Only Node Using the DigitalOcean API
- Create a personal access token and save it for use with the API.
- Send a POST request to https://api.digitalocean.com/v2/databases/{database_cluster_uuid}/replicas.
cURL
    
        
    
Using cURL:
curl -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
  -d '{"name":"read-nyc3-01", "region":"nyc3", "size": "db-s-2vcpu-4gb", "storage_size_mib": 61440}' \
  "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/replicas"
Go
    
        
    
Using Godo, the official DigitalOcean API client for Go:
import (
    "context"
    "os"
    "github.com/digitalocean/godo"
)
func main() {
    token := os.Getenv("DIGITALOCEAN_TOKEN")
    client := godo.NewFromToken(token)
    ctx := context.TODO()
    replicaRequest := &godo.DatabaseCreateReplicaRequest{
        Name:   "read-nyc3-01",
        Region: "nyc3",
        Size:   "db-s-2vcpu-4gb",
        StorageSizeMiB : 61440,
    }
    replica, _, err := client.Databases.CreateReplica(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30", replicaRequest)
}
Python
    
        
    
Using PyDo, the official DigitalOcean API client for Python:
import os
from pydo import Client
client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))
create_req = {
  "name": "read-nyc3-01",
  "region": "nyc3",
  "size": "db-s-2vcpu-4gb",
  "storage_size_mib": 61440,
}
create_resp = client.databases.create_replica(database_cluster_uuid="9cc10173", body=create_req)
 
Create a Read-Only using the Control Panel
    
        
    
To add a read-only node, click the name of the cluster to go to its Overview. At the bottom of the page, click the Add a read-only node link to go to the read-only node creation page.
 
Select the size, which must be equal to or larger than the primary node, then select the datacenter and name the node. When you’re done, click Create a read-only node to provision the node.
Like primary nodes, you can limit access to a read-only nodes to trusted sources and access read-only nodes using a command-line client and the connection string in the node’s Overview page.
You can promote an existing read-only node to become the primary node of a new database cluster, essentially creating a fork or replica of its former database cluster. However, these two clusters are independent and do not remain in sync, so any changes you make to one are not copied to the other.
You can also promote a read-only node to create a new database cluster in a different datacenter region. This option can help you maintain uptime if a cluster is experiencing issues in another region.
    How to Promote a Read-Only Node Using the DigitalOcean CLI
- Install doctl, the official DigitalOcean CLI.
- Create a personal access token and save it for use with doctl.
- Use the token to grant doctlaccess to your DigitalOcean account.
- Finally, run doctl databases replica promote. Basic usage looks like this, but you can read the usage docs for more details:doctl databases replica promote <database-cluster-id> <replica-name> [flags]
 
example-replicafor a database cluster with the IDca9f591d-f38h-5555-a0ef-1c02d1d1e35:doctl databases replica promote ca9f591d-f38h-5555-a0ef-1c02d1d1e35 example-replica
 
 
    How to Promote a Read-Only Node Using the DigitalOcean API
- Create a personal access token and save it for use with the API.
- Send a PUT request to https://api.digitalocean.com/v2/databases/{database_cluster_uuid}/replicas/{replica_name}/promote.
Using cURL:
curl -X PUT \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
  "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/replicas/read-nyc3-01/promote"
Using Godo, the official DigitalOcean API client for Go:
import (
    "context"
    "os"
    "github.com/digitalocean/godo"
)
func main() {
    token := os.Getenv("DIGITALOCEAN_TOKEN")
    client := godo.NewFromToken(token)
    ctx := context.TODO()
    _, err := client.Databases.PromoteReplicaToPrimary(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30", "read-nyc3-01")
}
Using PyDo, the official DigitalOcean API client for Python:
import os
from pydo import Client
client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))
resp = client.databases.promote_replica(database_cluster_uuid="a7a8bas", replica_name="ba8ab22")