V3 Multi-Datacenter
Replication Operations

This document explains how to manage replication with the riak-repl command. Some of these commands can be set or behavior altered by setting appropriate configuration values.

All commands need to be run only once on a single node of a cluster for the changes to propagate to all other nodes. All changes will persist across node restarts and will automatically take effect when nodes are added to the cluster.

Cluster Connectivity

clustername

Set the clustername for all nodes in a Riak cluster.

  • Without a parameter, returns the current name of the cluster
  • With a parameter, names the current cluster

To set the clustername:

  • Syntax: riak-repl clustername <clustername>
  • Example: riak-repl clustername Boston

To get the clustername:

  • Syntax: riak-repl clustername
  • Example: riak-repl clustername

connect

The connect command establishes communications from a source cluster to a sink cluster of the same ring size. The host:port of the sink cluster is used for this. The IP and port to connect to can be found in the advanced.config of the remote cluster, under riak_core and cluster_mgr.

The host can be either an IP address

  • Syntax: riak-repl connect <ip>:<port>
  • Example: riak-repl connect 192.168.2.1:9080

…or a hostname that will resolve to an IP address.

  • Syntax: riak-repl connect <host>:<port>
  • Example: riak-repl connect Austin:9080

disconnect

Disconnecting a source cluster from a sink cluster.

You may define a host:port combination

  • Syntax: riak-repl disconnect <host>:<port>
  • Example: riak-repl disconnect 192.168.2.1:9080

…or use the name of the cluster.

  • Syntax: riak-repl disconnect <sink_clustername>
  • Example: riak-repl disconnect Austin

connections

Display a list of connections between source and sink clusters.

  • Syntax: riak-repl connections
  • Example: riak-repl connections

clusterstats

Displays current cluster stats using an optional ip:port as well as an optional protocol-id.

protocol-id can be one of the following:

  • cluster_mgr
  • rt_repl
  • fs_repl

The clusterstats command in use:

  • Syntax: riak-repl clusterstats <host>:<port> <protocol-id>
  • Example: riak-repl clusterstats 192.168.2.1:9080
  • Example: riak-repl clusterstats 192.168.2.1:9080 fs_repl

Realtime Replication Commands

realtime enable

Enable realtime replication from a source cluster to sink clusters.

This will start queuing updates for replication. The cluster will still require an invocation of realtime start for replication to occur.

  • Syntax: riak-repl realtime enable <sink_clustername>
  • Example: riak-repl realtime enable Austin

realtime disable

Disable realtime replication from a source cluster to sink clusters.

  • Syntax: riak-repl realtime disable <sink_clustername>
  • Example: riak-repl realtime disable Austin

realtime start

Start realtime replication connections from a source cluster to sink clusters. See also realtime enable (above).

  • Syntax: riak-repl realtime start <sink_clustername>
  • Example: riak-repl realtime start Austin

realtime stop

Stop realtime replication from a source cluster to sink clusters.

  • Syntax riak-repl realtime stop <sink_clustername>
  • Example riak-repl realtime stop Austin

Fullsync Replication Commands

These behaviors can be altered by using the advanced.config fullsync_on_connect parameter. See the Configuration Guide for more information.

fullsync enable

Enable fullsync replication from a source cluster to sink clusters. By default, a fullsync will begin as soon as a connection to the remote cluster is established.

  • Syntax: riak-repl fullsync enable <sink_clustername>
  • Example: riak-repl fullsync enable Austin

fullsync disable

Disables fullsync for a cluster.

  • Syntax: riak-repl fullsync disable <sink_clustername>
  • Example: riak-repl fullsync disable Austin

fullsync start

Starts a fullsync. If the application configuration fullsync_on_connect is set to false, a fullsync needs to be started manually. This is also used to trigger a periodic fullsync using a cron job. While a fullsync is in progress, a start command is ignored and a message is logged.

  • Syntax: riak-repl fullsync start <sink_clustername>
  • Example: riak-repl fullsync start Austin

fullsync stop

Stops a fullsync.

  • Syntax: riak-repl fullsync stop <sink_clustername>
  • Example: riak-repl fullsync stop Austin

Cascading Realtime Writes

realtime cascades

Shows the current cascading realtime setting.

  • Syntax: realtime cascades
  • Example: riak-repl realtime cascades

realtime cascades always

Enable realtime cascading writes.

  • Syntax: realtime cascades always
  • Example: riak-repl realtime cascades always

realtime cascades never

Disable realtime cascading writes.

  • Syntax: realtime cascades never
  • Example: riak-repl realtime cascades never

NAT

Note: See the V3 Multi Data Center Replication With NAT for more information.

nat-map show

Show the current NAT mapping table.

  • Syntax: nat-map show
  • Example: riak-repl nat-map show

nat-map add

Adds a NAT map from the external IP, with an optional port, to an internal IP.

  • Syntax: nat-map add <externalip>[:port] <internalip>
  • Example: riak-repl nat-map add 128.205.106.1:5555 192.168.1.2

nat-map del

Deletes a specific NAT map entry.

  • Syntax: nat-map del <externalip>[:port] <internalip>
  • Example: riak-repl nat-map del 128.205.106.1:5555 192.168.1.2

NAT changes will be applied once fullsync and/or realtime replication has been stopped and started.

Riak CS MDC Gets

proxy-get enable

Enable Riak CS proxy_get requests from a sink cluster (if proxy_get has been enabled in advanced.config).

  • Syntax: proxy-get enable <sink_clustername>
  • Example: riak-repl proxy-get enable newyorkbackup

proxy-get disable

Disable Riak CS proxy_get requests from a sink cluster (if proxy_get has been enabled in advanced.config).

  • Syntax: proxy-get disable <sink_clustername>
  • Example: riak-repl proxy-get disable newyorkbackup

add-block-provider-redirect

Provide a redirection to the <to-cluster-id> for proxy_get if the <from-cluster> is going to be decommissioned.

  • Syntax: riak-repl add-block-provider-redirect <from-cluster> <to-cluster>
  • Example: riak-repl add-block-provider-redirect "{'dev1@127.0.0.1',{1391,544501,519016}}" "{'dev3@127.0.0.1',{1299,512501,511032}}"

show-block-provider-redirect

Show the mapping for a given cluster-id redirect.

  • Syntax: riak-repl show-block-provider-redirect <from-cluster>
  • Example: riak-repl show-block-provider-redirect "{'dev1@127.0.0.1',{1391,544501,519016}}"

delete-block-provider-redirect

Delete a existing redirect such that proxy_gets go again to the original provider cluster id.

  • Syntax:* riak-repl delete-block-provider-redirect <from-cluster>
  • Example:* riak-repl delete-block-provider-redirect "{'dev1@127.0.0.1', {1391,544501,519016}}"

show-local-cluster-id

Display this cluster’s cluster-id tuple, for use with the *-block-provider-redirect commands.

Note: A cluster-id is surrounded by double quotes, which need to be included when passed to *-block-provider-redirect.

  • Syntax: riak-repl show-local-cluster-id
  • Example:

    riak-repl show-local-cluster-id
    

    Possible output:

    local cluster id: "{'dev1@127.0.0.1',{1391,544501,519016}}"
    

riak-repl Status Output

Details about the riak-repl status command can be found under Statistics.

Tuning

These tuning values may also be set via the node’s advanced.config file. See the Configuration Guide for more information.

fullsync max_fssource_node

This limits the number of fullsync workers that will be running on each individual node in a source cluster. This is a hard limit for all fullsyncs that are enabled. Additional fullsync configurations will not increase the number of fullsync workers allowed to run on any node. This only affects nodes on the source cluster on which this parameter is defined via the configuration file or command line.

  • Syntax: riak-repl fullsync max_fssource_node <value>
  • Default: 1
  • Example: riak-repl fullsync max_fssource_node 2

fullsync max_fssource_cluster

This is the hard limit of fullsync workers that will be running on the source side of a cluster across all nodes on that cluster for a fullsync to a sink cluster. This means if one has configured fullsync for two different clusters, both with a max_fssource_cluster of 5, 10 fullsync workers can be in progress. Only affects nodes on the source cluster on which this parameter is defined via the configuration file or the command line.

  • Syntax: riak-repl fullsync max_fssource_cluster <value>
  • Default: 5
  • Example: riak-repl fullsync max_fssource_cluster 5

fullsync max_fssink_node

This limits the number of fullsync workers allowed to run on each individual node in a sink cluster. This is a hard limit for each fullsync source node interacting with a sink node. Thus, multiple simultaneous source connections to a sink node will have to share the sink node’s number of maximum connections. Only affects nodes on the sink cluster on which this parameter is defined via the configuration file or command line.

  • Syntax: riak-repl fullsync max_fssink_node <value>
  • Default: 1
  • Example: riak-repl fullsync max_fssink_node 5

Mixing Version 2 Replication with Version 3 Replication

Riak Version 2 Replication and Version 3 Replication can be safely used at the same time. If you choose to move to Version 3 Replication completely, we recommend disabling Version 2 realtime replication bucket hooks with the riak-repl modes command.

riak-repl modes

modelist is one or both of mode_repl12 (Version 2) or mode_repl13 (Version 3) separated by spaces (without commas).

  • Syntax: riak-repl modes <modelist>
  • Example:

    riak-repl modes mode_repl12 mode_repl13
    

    Possible output:

    Current replication modes: [mode_repl12,mode_repl13]
    

To check the current replication modes:

  • Syntax: riak-repl modes
  • Example:

    riak-repl modes
    

    Possible output:

    Current replication modes: [mode_repl12,mode_repl13]
    

Configurations and Metadata in Replication

Fullsync and Realtime replication replicates data from source clusters to sink clusters, but some configurations and metadata (such as bucket properties) will not be replicated.

Non-replication of certain configurations and metadata supports heterogenous cluster configurations in Replication, but there operational things you can do when you want homogeneous cluster configurations.

Buckets and Bucket Types in Replication

Buckets and Bucket Type properties on the source cluster will not be replicated from source clusters to sink clusters.

If you want the properties for Buckets or Bucket Types present on the source cluster to be propagated to sink clusters you should update this data for each cluster at the same time you would change the source cluster.