10. REST API

REST API используется, как внутри кластера, так и извне. Внутри кластера API в основном используется, как инструмент получения оперативной информации о репликации и получения файлов архива. Извне, такие сервисы, как HA-Proxy или Gobetween могут получать статус узла, для корректного проксирования запросов.

По-умолчанию порт API находится на 5030.

10.1. Внешнее REST API

10.1.1. /master

Код возврата 200, если узел находится в режиме master или 503

В JSON также возвращается текущий статус узла.

{
  "mode": "master"
}

10.1.2. /slave

Код возврата 200, если узел находится в режиме slave или 503

В JSON также возвращается текущий статус узла.

{
  "mode": "slave"
}

10.1.3. /status

Возвращает json со статусом узла:

Пример:

{
  "allow_failover": true,
  "api_url": "http://127.0.0.1:5030",
  "databases": {
    "491a3e52-41e6-461b-9b10-aa7e2f8ea1bb": {
      "alias": "testdb1",
      "dsn": "127.0.0.1/3050:testdb1",
      "generation": 1,
      "guid": "491a3e52-41e6-461b-9b10-aa7e2f8ea1bb",
      "in_sync": true,
      "initializing": false,
      "master_guid": "ED881F74-47E6-49BC-BA72-4B18FEE7B7B6",
      "mode": "master",
      "path": "/tmp/cook/sync_node0/database1.fdb",
      "progress": 0,
      "progress_total": 0,
      "replication_status": {
        "async_dir": "/tmp/cook/sync_node0/replication/6dbfcb0f-b9f7-4611-b987-5a2bea241f7a/logs/1/491a3e52-41e6-461b-9b10-aa7e2f8ea1bb/",
        "db_sequence": 0,
        "mode": 1,
        "sequence": 0,
        "sync_targets": {
          "127.0.0.1/3051:testdb1": 1
        }
      },
      "sequence": 0
    },
    "8d20765b-3510-4582-8e63-e9272e6d493e": {
      "alias": "testdb2",
      "dsn": "127.0.0.1/3050:testdb2",
      "generation": 1,
      "guid": "8d20765b-3510-4582-8e63-e9272e6d493e",
      "in_sync": true,
      "initializing": false,
      "master_guid": "991F93A9-FB00-4B4C-9D50-197D5AE09212",
      "mode": "master",
      "path": "/tmp/cook/sync_node0/database2.fdb",
      "progress": 0,
      "progress_total": 0,
      "replication_status": {
        "async_dir": "/tmp/cook/sync_node0/replication/6dbfcb0f-b9f7-4611-b987-5a2bea241f7a/logs/1/8d20765b-3510-4582-8e63-e9272e6d493e/",
        "db_sequence": 0,
        "mode": 1,
        "sequence": 0,
        "sync_targets": {
          "127.0.0.1/3051:testdb2": 1
        }
      },
      "sequence": 0
    }
  },
  "in_sync": true,
  "maintenance": false,
  "master": true,
  "mode": "master",
  "priority": 0,
  "rdb_aux_port": 3060,
  "rdb_endpoint": "127.0.0.1/3050",
  "rdb_host": "127.0.0.1",
  "rdb_pending_restart": false,
  "rdb_port": 3050,
  "rdb_version": "5.0.0.0",
  "restrict_master": [
    false,
    ""
  ],
  "sync_cluster": true,
  "sync_node": true,
  "sync_targets_nodes": [
    "node1.cook.red-soft.ru"
  ]
}

10.2. Внутреннее REST API

10.2.1. /archive/<GUID>/<generation>/<sequence>

Копирование существующего архива с любого узла.

  • GUID - GUID базы данных в кластере

  • generation - номер поколения архивов

  • sequence - порядковый номер архива

Если архив существует, возвращает бинарный поток с файлом архива репликации, иначе - 404

10.2.2. /database/<GUID>

Копирование базы данных с master.

  • GUID - GUID базы данных в кластере

Если база данных готова для копирования, возвращает бинарный поток с файлом базы данных, иначе - 503

10.2.3. /database/add

Добавление базы данных в кластер c текущего master узла.

В POST запросе должны быть передан json для создания новой базы данных:

{
  "alias": "database",
  "database": "/path/to/database",
  "properties": {
    "property": "value"
  },
  "replication_options": {
    "option": "value"
  }
}

10.2.4. /database/<GUID>/rm

Удаление базы данных из кластера c текущего master узла.