Configuring file replication


This section describes how to work with the File Replication FSR.

Overview

Unlike BSR, FSR connections are 1-channel connections that handle both replication and meta-packets. If you look at the drx connection information, you will see that it is marked as a complex type.

λ drx-ctl co all
------------------------------------------------------------------------------------------
Name           Type    replicator  State          local-drx   State          remote-drx
------------------------------------------------------------------------------------------
r0_node2_node1 complex (local-fsr) -established-> (local-drx) -----bridged-> (remote-drx)
------------------------------------------------------------------------------------------
r0_node3_node1 complex (local-fsr) -established-> (local-drx) -----bridged-> (remote-drx)
------------------------------------------------------------------------------------------
 All connections : 2, Established : 2


Configuration files

Below is a description of the properties you need to specify for each section.

proxy connections

  • Section: connections/node1/proxy, connections/node2/proxy
propertiestypeformatdescription
namestringnameConnection name. Auto-generated if not specified.
Auto-generated format: {resource name}_{relative node name}_{node name}
insidestring{IP:Port}Address of the local DRX for the local FSR → local DRX connection
outsidestring{IP:Port}Address of the local DRX for remote DRX → local DRX connection
hostnamestringhost nameHostname of the machine on which DRX is operating
Operates according to the hostname specification in the system configuration.
optionsObjectProxy optionoption

The FSR connects to the inside address and the remote DRX connects to the outside address.

  • node1 connection
Local FSR         Local DRX                                      Remote DRX
(node1 url) <-> (node1/proxy/inside | node1/proxy/outside) <-> (node2/proxy/outside)
  • node2 connection
Remote DRX                Local DRX                                      Local FSR
(node1/proxy/outside) <-> (node2/proxy/outside | node2/proxy/inside) <-> (node2 url)


proxy options

  • section: proxy, connections/node1/proxy/options, connections/node2/proxy/options

Each option can be overridden hierarchically lower down the hierarchy.

propertiestypeformatdescription

memlimit

string

{number}{unit}

TX BAB size.
default: 1M

bwlimit

string

{number}{unit}

Limit transfers per second

plugin

Object


Plugin settings list


svc_autostart

string
Boolean

true, yes, on,1
false, no, off, 0

Auto-start resources on DRX startup.
default: true


rx_memlimit

string

{number}{unit}

RX BAB size.
default: 0


crypto

string

plugin name

Encryption plugins
support: openssl AES256


compressor

string

plugin name

compression plugin
support: zlib, lz4


compressor_level

string
number

1~9

compression level
default: 1


Example configuration file

{
  "id": "r0",
  "description": "proxy test",
  "nodes": [
    {
      "name": "node1",
      "hostname": "drx1",
      "files": [ { "path": "E:/r2" } ],
      "buffer": { "size": 100 },
    },
    {
      "name": "node2",
      "hostname": "drx2",
      "files": [ { "path": "E:/r2" } ],
      "buffer": { "size": 100 },
    },
    {
      "name": "node3",
      "hostname": "drx3",
      "files": [ { "path": "E:/r2" } ],
      "buffer": { "size": 100 },
    }
  ],
  "connections": [
    {
      "node1": {
        "name": "node1",
        "url": "192.168.65.111:9830",
        "proxy": {
          "inside": "192.168.65.111:9831",
          "outside": "192.168.65.111:9832"
        }
      },
      "node2": {
        "name": "node2",
        "url": "192.168.65.112:9830",
        "proxy": {
          "inside": "192.168.65.112:9831",
          "outside": "192.168.65.112:9832"
        }
      }
    },
    {
      "node1": {
        "name": "node1",
        "url": "192.168.65.111:9830",
        "proxy": {
          "inside": "192.168.65.111:9833",
          "outside": "192.168.65.111:9834",
        }
      },
      "node2": {
        "name": "node3",
        "url": "192.168.65.113:9830"
        "proxy": {
          "inside": "192.168.65.113:9831",
          "outside": "192.168.65.113:9832"
        }
      }
    },
    {
      "node1": {
        "name": "node2",
        "url": "192.168.65.112:9830",
        "proxy": {
          "inside": "192.168.65.112:9833",
          "outside": "192.168.65.112:9834"
        }
      },
      "node2": {
        "name": "node3",
        "url": "192.168.65.113:9830",
        "proxy": {
          "inside": "192.168.65.113:9833",
          "outside": "192.168.65.113:9834"
        }
      }
    } 
  ],
  "proxy": {
    "memlimit": "100M"
    "plugin": {
      "compressor": "lz4",
      "crypto": "openssl",
      "rx-memlimit": "10M",
    }
  }
}