こたつ&&みかん&&でーたべーす

DB 関連の話を中心に技術っぽい記事を書きます。

ScalarDB を使って Cassandra の Partition を跨いだ Tx を実行してみる

先日 NewSQL/分散SQLデータベース よろず勉強会 #1 にて「Cassandra で Partition を跨いだ Tx を実行できるようにする Accord というものが開発中である」というお話を聞いたのですが、「それって ScalarDB でもできるのでは?」ということでやってみました。

注意

このブログの内容は、あくまで個人の趣味の範囲で ScalarDB を使った検証を実施しているだけですので、あしからず。

また、サンプルとして記載しているコードではエラーハンドリング (エラー発生時の ROLLBACK 等) は考慮していません。実際に ScalarDB を使ってアプリを作る場合はそのあたりも考えないといけないので注意してください。ScalarDB でのエラーハンドリングについては Handle Exceptions に記載されているので、興味がある方はそちらもどうぞ。

環境

今回は以下の環境/バージョンで検証しています。

  • Ubuntu : 20.04 (WSL2)
  • OpenJDK : 17
  • Docker : 20.10.21
  • ScalarDB : 3.7.0

検証内容概要

以下のような感じで、ScalarDB を使って Cassandra 上の (複数パーティションを跨いだ) レコードを更新します。

+----------------------+
|       Java App       |
| +------------------+ |                                +-------------+
| |    Scalar DB     |--------------------------------->| Backend DB  |
| +------------------+ |                                | (Cassandra) |
+----------------------+                                +-------------+

検証

それでは早速検証してみます。

Cassandra 起動

Docker を使って Cassandra を起動します。localhost でアクセスするために -p 9042:9042 オプションを付けておきます。

$ docker run -d --name cassandra -p 9042:9042 cassandra:3.11.14
$ docker ps
CONTAINER ID   IMAGE               COMMAND                  CREATED          STATUS          PORTS                                                                          NAMES
196d8d087453   cassandra:3.11.14   "docker-entrypoint.s…"   23 seconds ago   Up 22 seconds   7000-7001/tcp, 7199/tcp, 9160/tcp, 0.0.0.0:9042->9042/tcp, :::9042->9042/tcp   cassandra

テーブル作成

今回は以下のようなテーブル foo をネームスペース ns 上に作成します。(実際に Cassandra 上に作成されるテーブルには ScalarDB 用のメタデータを格納するカラムも含まれます。)

+---------------------+------+
| columnName          | type |
+---------------------+------+
| pk (Partition Key)  | INT  |
| ck (Clustering Key) | INT  |
| v                   | INT  |
+---------------------+------+

上記のようなテーブルを、ScalarDB の Administrative API を使って作成します。具体的なコードは以下の通りです。

package com.example;

import java.util.Properties;

import com.scalar.db.api.DistributedTransactionAdmin;
import com.scalar.db.api.TableMetadata;
import com.scalar.db.io.DataType;
import com.scalar.db.service.TransactionFactory;
import com.scalar.db.api.Scan;

public class CreateSchemaOnCassandra {
    public static void main(String[] args) throws Exception {

        Properties properties = new Properties();
        properties.setProperty("scalar.db.contact_points", "localhost");
        properties.setProperty("scalar.db.contact_port", "9042");
        properties.setProperty("scalar.db.storage", "cassandra");
        properties.setProperty("scalar.db.username", "cassandra");
        properties.setProperty("scalar.db.password", "cassandra");

        TransactionFactory transactionFactory = TransactionFactory.create(properties);
        DistributedTransactionAdmin admin = transactionFactory.getTransactionAdmin();

        boolean ifNotExist = true;
        // Create coordinator tables for ScalarDB
        admin.createCoordinatorTables(ifNotExist);
        // Create namespace
        admin.createNamespace("ns", ifNotExist);

        // Define a table metadata
        TableMetadata tableMetadata =
            TableMetadata.newBuilder()
                .addColumn("pk", DataType.INT)
                .addColumn("ck", DataType.TEXT)
                .addColumn("v", DataType.BIGINT)
                .addPartitionKey("pk")
                .addClusteringKey("ck", Scan.Ordering.Order.ASC)
                .build();

        // Create table
        admin.createTable("ns", "foo", tableMetadata, ifNotExist);

        admin.close();
    }
}

Cassandra に cqlsh で接続し、作成されたテーブルの情報を直接参照すると以下のようになっています。ScalarDB 関連のメタデータを含むカラムも併せて定義されていますが、pk が Partition Key、ck が Clustering Key として定義されていることが確認できます。

$ docker exec -it cassandra cqlsh
Connected to Test Cluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 3.11.14 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
cqlsh>
cqlsh> DESCRIBE TABLE ns.foo;

CREATE TABLE ns.foo (
    pk int,
    ck int,
    before_tx_committed_at bigint,
    before_tx_id text,
    before_tx_prepared_at bigint,
    before_tx_state int,
    before_tx_version int,
    before_v int,
    tx_committed_at bigint,
    tx_id text,
    tx_prepared_at bigint,
    tx_state int,
    tx_version int,
    v int,
    PRIMARY KEY (pk, ck)
) WITH CLUSTERING ORDER BY (ck ASC)
    AND bloom_filter_fp_chance = 0.01
    AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
    AND comment = ''
    AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
    AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
    AND crc_check_chance = 1.0
    AND dclocal_read_repair_chance = 0.1
    AND default_time_to_live = 0
    AND gc_grace_seconds = 864000
    AND max_index_interval = 2048
    AND memtable_flush_period_in_ms = 0
    AND min_index_interval = 128
    AND read_repair_chance = 0.0
    AND speculative_retry = '99PERCENTILE';

cqlsh>

初期データの INSERT

検証用に以下のようなレコード (Partition Key が異なるレコード) を 2つ INSERT します。

+----+----+---+
| pk | ck | v |
+----+----+---+
| 1  | 1  | 1 |
| 2  | 2  | 2 |
+----+----+---+

上記のようなデータを、ScalarDB の Transactional API を使って INSERT します (ScalarDB の API としては Put を使います)。具体的なコードは以下の通りです。

package com.example;

import java.util.Properties;

import com.scalar.db.api.DistributedTransaction;
import com.scalar.db.api.DistributedTransactionManager;
import com.scalar.db.api.Put;
import com.scalar.db.io.Key;
import com.scalar.db.service.TransactionFactory;

public class InsertRecordOnCassandra {
    public static void main(String[] args) throws Exception {

        Properties properties = new Properties();
        properties.setProperty("scalar.db.contact_points", "localhost");
        properties.setProperty("scalar.db.contact_port", "9042");
        properties.setProperty("scalar.db.storage", "cassandra");
        properties.setProperty("scalar.db.username", "cassandra");
        properties.setProperty("scalar.db.password", "cassandra");

        TransactionFactory transactionFactory = TransactionFactory.create(properties);
        DistributedTransactionManager manager = transactionFactory.getTransactionManager();

        // Begin Tx
        DistributedTransaction transaction = manager.begin();

        // INSERT INTO ns.foo (pk, ck, v) VALUES (1, 1, 1)
        Key partitionKey1 = Key.ofInt("pk", 1);
        Key clusteringKey1 = Key.ofInt("ck", 1);

        Put put1 = 
            Put.newBuilder()
                .namespace("ns")
                .table("foo")
                .partitionKey(partitionKey1)
                .clusteringKey(clusteringKey1)
                .intValue("v", 1)
                .build();

        transaction.put(put1);

        // INSERT INTO ns.foo (pk, ck, v) VALUES (2, 2, 2)
        Key partitionKey2 = Key.ofInt("pk", 2);
        Key clusteringKey2 = Key.ofInt("ck", 2);

        Put put2 = 
            Put.newBuilder()
                .namespace("ns")
                .table("foo")
                .partitionKey(partitionKey2)
                .clusteringKey(clusteringKey2)
                .intValue("v", 2)
                .build();

        transaction.put(put2);

        // Commit Tx
        transaction.commit();

        manager.close();
    }
}

Cassandra に cqlsh で接続し、実際に格納されたレコードの内容を確認しておきます。Partition が異なる (Partition Key が異なる) レコードが 2つ INSERT されていることが確認できます。

cqlsh> SELECT pk, ck, v FROM ns.foo;

 pk | ck | v
----+----+---
  1 |  1 | 1
  2 |  2 | 2

(2 rows)

実は、この時点でこの 2つのレコード (Partition が異なるレコード) は ScalarDB の Tx (同一の Tx) で INSERT されています。ScalarDB は Tx 用のメタデータをレコード内に保持する仕組みになっているため、Tx ID の情報を合わせて確認すると、「同じ Tx ID で (同じ Tx で) 2つのレコードが INSERT されている」ことが確認できます。

cqlsh> SELECT pk, ck, v, tx_id FROM ns.foo;

 pk | ck | v | tx_id
----+----+---+--------------------------------------
  1 |  1 | 1 | 53da60ca-5879-4e85-88d2-a7580d68e820
  2 |  2 | 2 | 53da60ca-5879-4e85-88d2-a7580d68e820

(2 rows)

Partition を跨いだレコードの UPDATE

さて、INSERT の時点で ScalarDB を利用して「Cassandra の『Partition を跨いだ複数のレコード』を『同一 Tx』で更新」できることがほぼ確認できてしまいましたが、せっかくなので UPDATE も実行してみます。先ほど INSERT したレコードのカラム v の値を以下のように UPDATE します。

+----+----+-----+
| pk | ck |  v  |
+----+----+-----+
| 1  | 1  | 100 |
| 2  | 2  | 200 |
+----+----+-----+

上記のようなデータを、ScalarDB の Transactional API を使って UPDATE します (ScalarDB の API としては Put を使います)。具体的なコードは以下の通りです。

※ScalarDB で既存のレコードを更新 (Put) する場合は、一度対象となるレコードを参照 (Get) する必要があります。このあたりの動作については こちらのスライド に記載されているので、興味がある方はこのスライドも参照してみてください。

package com.example;

import java.util.Properties;

import com.scalar.db.api.DistributedTransaction;
import com.scalar.db.api.DistributedTransactionManager;
import com.scalar.db.api.Get;
import com.scalar.db.api.Put;
import com.scalar.db.io.Key;
import com.scalar.db.service.TransactionFactory;

public class UpdateOnCassandra {
    public static void main(String[] args) throws Exception {

        Properties properties = new Properties();
        properties.setProperty("scalar.db.contact_points", "localhost");
        properties.setProperty("scalar.db.contact_port", "9042");
        properties.setProperty("scalar.db.storage", "cassandra");
        properties.setProperty("scalar.db.username", "cassandra");
        properties.setProperty("scalar.db.password", "cassandra");

        TransactionFactory transactionFactory = TransactionFactory.create(properties);
        DistributedTransactionManager manager = transactionFactory.getTransactionManager();

        // Begin Tx
        DistributedTransaction transaction = manager.begin();

        // UPDATE foo SET v = 100 WHERE pk = 1 AND ck = 1
        Key partitionKey1 = Key.ofInt("pk", 1);
        Key clusteringKey1 = Key.ofInt("ck", 1);

        Get get1 = 
            Get.newBuilder()
                .namespace("ns")
                .table("foo")
                .partitionKey(partitionKey1)
                .clusteringKey(clusteringKey1)
                .build();
        transaction.get(get1);

        Put put1 = 
            Put.newBuilder()
                .namespace("ns")
                .table("foo")
                .partitionKey(partitionKey1)
                .clusteringKey(clusteringKey1)
                .intValue("v", 100)
                .build();
        transaction.put(put1);

        // UPDATE foo SET v = 200 WHERE pk = 2 AND ck = 2
        Key partitionKey2 = Key.ofInt("pk", 2);
        Key clusteringKey2 = Key.ofInt("ck", 2);
        Get get2 = 
            Get.newBuilder()
                .namespace("ns")
                .table("foo")
                .partitionKey(partitionKey2)
                .clusteringKey(clusteringKey2)
                .build();
        transaction.get(get2);

        Put put2 = 
            Put.newBuilder()
                .namespace("ns")
                .table("foo")
                .partitionKey(partitionKey2)
                .clusteringKey(clusteringKey2)
                .intValue("v", 200)
                .build();
        transaction.put(put2);

        // Commit Tx
        transaction.commit();

        manager.close();
    }
}

ScalarDB でレコードを UPDATE した後に、Cassandra に cqlsh で接続し、実際に格納されたレコードの内容を確認してみます。Tx ID の情報を合わせて確認すると、「同じ Tx ID で (同じ Tx で) Cassandra の Partition を跨いだ 2つのレコードが UPDATE されている」ことが確認できます。

cqlsh> SELECT pk, ck, v, tx_id FROM ns.foo;

 pk | ck | v   | tx_id
----+----+-----+--------------------------------------
  1 |  1 | 100 | 67e1ed69-8bee-478d-b9e5-7fb6774e36b3
  2 |  2 | 200 | 67e1ed69-8bee-478d-b9e5-7fb6774e36b3

(2 rows)

まとめ

ということで、ScalarDB を使うと「Cassandra 上の Partition が異なるレコードを 1つの Tx で UPDATE できる」ことが確認できました。このような感じで、ScalarDB を使うと NoSQL 上で ACID Transaction を実行できます。

なお、一貫性のある状態でレコードを参照 (SELECT) するためには ScalarDB を使って SELECT (ScalarDB の API としては Get) する必要があります。今回は、同一 Tx (ID) で更新されていることを確認するために、Cassandra に直接接続してメタデータを含むレコードの情報を参照しましたが、この方法では参照時のデータの一貫性が担保されないので、実際に ScalarDB を使ってアプリを作成する場合はご注意ください。

Scalar DB on CockroachDB を試してみた

分散 Tx マネージャーである Scalar DBStorage として複数の DB をサポート していますが、その中に PostgreSQL も含まれています。

PostgreSQL がサポートされているということは、Scalar DB と PostgreSQL が「PostgreSQLプロトコルを使って通信している」ということです (具体的には JDBC ドライバを使っています)。

そして、PostgreSQLプロトコルで通信しているということは、PostgreSQLプロトコル互換のある CockroachDB でもいける可能性があるということです!!!

ということで、Scalar DB on CockroachDB を試してみました。

注意

前述した通り、Scalar DB にて PostgreSQL はサポート されていますが、CockroachDB はサポートされていない DB です。今回の内容はあくまで趣味の範囲で検証したものなので、あしからず。

環境

今回は以下の環境で検証しています。

バージョン

Ubuntu : 20.04
OpenJDK : 11
Docker : 20.10.12
Scalar DB : 3.5.0
CockroachDB : 21.2.5
Container Image (CockroachDB) : cockroachdb/cockroach

Scalar DB の使い方

Scalar DB には「Java のライブラリとして使う方法」と「gRPC サーバーとして使う方法」の 2種類があります。

  • Pattern 1 (As a Java Library)
+----------------------+
|       Java App       |
| +------------------+ |                                +----------------------+
| |    Scalar DB     |--------------------------------->|      Backend DB      |
| +------------------+ |                                | (PostgreSQL etc...)  |
+----------------------+                                +----------------------+
  • Pattern 2 (As a gRPC Server)
+----------------------+
|         App          |
| +------------------+ |    +----------------------+    +----------------------+
| | Scalar DB Client |----->|   Scalar DB Server   |--->|      Backend DB      |
| +------------------+ |    |    (gRPC Server)     |    | (PostgreSQL etc...)  |
+----------------------+    +----------------------+    +----------------------+

今回は「Java のライブラリとして使う」方で検証します。

CockroachDB の準備

最初に、Scalar DB の Storage として利用する CockroachDB を準備します。

クラスタ構築 (3匹構成)

本題からそれてしまうので構築方法の詳細は割愛しますが、今回は以下のような 3匹構成の CockroachDB クラスタ (Docker を利用したローカルの Secure クラスタ) を使います。cockroach-1 が 127.0.0.1:26257 でクライアントからの接続を LISTEN しているので、Scalar DB からはこの 127.0.0.1:26257 に接続します。

  • コンテナ
$ docker ps
CONTAINER ID   IMAGE                           COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
f1726fd20c6d   cockroachdb/cockroach:v21.2.5   "/cockroach/cockroac…"   46 minutes ago   Up 46 minutes   26257/tcp, 127.0.0.1:8083->8080/tcp                    cockroach-3
be0584fde8e6   cockroachdb/cockroach:v21.2.5   "/cockroach/cockroac…"   46 minutes ago   Up 46 minutes   26257/tcp, 127.0.0.1:8082->8080/tcp                    cockroach-2
37d8c9c42790   cockroachdb/cockroach:v21.2.5   "/cockroach/cockroac…"   46 minutes ago   Up 46 minutes   127.0.0.1:26257->26257/tcp, 127.0.0.1:8081->8080/tcp   cockroach-1
7e918c6d4e29   cockroachdb/cockroach:v21.2.5   "tail -f /dev/null"      46 minutes ago   Up 46 minutes   8080/tcp, 26257/tcp                                    cockroach-client

※cockroach-client は sql shell を実行するためのクライアント用コンテナ。

  id |      address      |    sql_address    |  build  |         started_at         |         updated_at         |          locality           | is_available | is_live
-----+-------------------+-------------------+---------+----------------------------+----------------------------+-----------------------------+--------------+----------
   1 | cockroach-1:26257 | cockroach-1:26257 | v21.2.5 | 2022-02-23 00:53:26.41591  | 2022-02-23 00:53:26.483088 | region=region-1,zone=zone-a | true         | true
   2 | cockroach-2:26257 | cockroach-2:26257 | v21.2.5 | 2022-02-23 00:53:27.073393 | 2022-02-23 00:53:27.149113 | region=region-1,zone=zone-b | true         | true
   3 | cockroach-3:26257 | cockroach-3:26257 | v21.2.5 | 2022-02-23 00:53:27.527108 | 2022-02-23 00:53:27.602613 | region=region-1,zone=zone-c | true         | true

DB 作成

CockroachDB 側で Scalar DB が利用する DB (db0) を作成します。

  • DB 作成
$ docker exec -it cockroach-client ./cockroach sql --user=root --certs-dir=certs --host=cockroach-1:26257
#
# Welcome to the CockroachDB SQL shell.
# All statements must be terminated by a semicolon.
# To exit, type: \q.
#
# Server version: CockroachDB CCL v21.2.5 (x86_64-unknown-linux-gnu, built 2022/02/07 21:01:07, go1.16.6) (same version as client)
# Cluster ID: e3e484e2-8026-4bc5-8a6f-15ff7a764e9f
#
# Enter \? for a brief introduction.
#
root@cockroach-1:26257/defaultdb> 
root@cockroach-1:26257/defaultdb> CREATE DATABASE db0;
CREATE DATABASE  


Time: 37ms total (execution 37ms / network 0ms)  

root@cockroach-1:26257/defaultdb> 
root@cockroach-1:26257/defaultdb> SHOW DATABASES;
  database_name | owner | primary_region | regions | survival_goal
----------------+-------+----------------+---------+----------------
  db0           | root  | NULL           | {}      | NULL
  defaultdb     | root  | NULL           | {}      | NULL
  intro         | root  | NULL           | {}      | NULL
  postgres      | root  | NULL           | {}      | NULL
  system        | node  | NULL           | {}      | NULL
(5 rows)  


Time: 4ms total (execution 4ms / network 0ms)  

root@cockroach-1:26257/defaultdb>

ユーザー作成

Scalar DB が CockroachDB にアクセスする際のユーザー (scalar) を作成します。今回はパスワード認証でアクセスするため、パスワードも併せて設定しておきます。また、今回は scalar ユーザーに db0 に対するフルアクセスの権限をざっくりと付与しておきます。

  • ユーザー作成
root@cockroach-1:26257/defaultdb> CREATE USER scalar WITH PASSWORD 'xxxxxxxx';
CREATE ROLE


Time: 250ms total (execution 249ms / network 0ms)

root@cockroach-1:26257/defaultdb> 
root@cockroach-1:26257/defaultdb> GRANT ALL ON DATABASE db0 TO scalar;
GRANT


Time: 105ms total (execution 104ms / network 0ms)

root@cockroach-1:26257/defaultdb>
root@cockroach-1:26257/defaultdb> SHOW USERS;
  username  | options | member_of
------------+---------+------------
  admin     |         | {}
  cockroach |         | {}
  root      |         | {admin}
  scalar    |         | {}
(4 rows)


Time: 9ms total (execution 8ms / network 0ms)

root@cockroach-1:26257/defaultdb> 

これで、CockroachDB 側での準備は完了です。実際は TABLE 作成も必要ですが、Scalar DB で使う TABLE は Scalar DB 側のツールを使って作成します。

Scalar DB の準備

次に、Scalar DB 側の準備を行います。

設定ファイル作成

まずは、Scalar DB や Schema Loader から CockroachDB に接続するための設定ファイル (database.properties) を準備します。今回は、必要最低限の設定として「JDBC での接続情報」「ユーザー/パスワード」のみ設定します。

この設定ファイル内で、CockroachDB コンテナが LISTEN している 127.0.0.1:26257 と、CockroachDB 側で作成した DB (db0) を指定しています。

  • database.properties
# Use PostgreSQL (JDBC Database)
scalar.db.storage=jdbc

# JDBC URL
scalar.db.contact_points=jdbc:postgresql://127.0.0.1:26257/db0

# User and Password
scalar.db.username=scalar
scalar.db.password=xxxxxxxx

TABLE 作成

次に、テスト用の TABLE を作成します。(分散 Tx マネージャーである) Scalar DB では、クライアント側 (Scalar DB 側 ) で分散 Tx を実現するために Distributed WAL と呼ばれるメタデータをレコード (TABLE) 内に保持する仕組みになっています。

そのため、TABLE を作成する際は Distributed WAL を格納するためのカラムも一緒に定義する必要がありますが、Schema Loader というツールを使うといい感じに TABLE を作成してくれます。

まずは、GitHub Releases から Schema Loader をダウンロードします。

  • Schema Loader をダウンロード
$ curl -OL https://github.com/scalar-labs/scalardb/releases/download/v3.5.0/scalardb-schema-loader-3.5.0.jar

$ ls -l scalardb-schema-loader-3.5.0.jar 
-rw-rw-r-- 1 ubuntu ubuntu 60464284 Feb 23 11:33 scalardb-schema-loader-3.5.0.jar

そして、作成する TABLE の情報を JSON 形式で用意します。

{
  "s0.t0": {
    "transaction": true,
    "partition-key": [
      "id"
    ],
    "clustering-key": [],
    "columns": {
      "id": "INT",
      "c0": "INT"
    }
  }
}

今回は「"s0" スキーマ」内に「"t0" テーブル」を作成し、「id (int/primary key)」「c0 (int)」という 2つのカラムを定義します。要するに、通常の DDL だと以下のような感じの操作をしているイメージです。

  • DDL のイメージ
CREATE SCHEMA s0;
CREATE TABLE s0.t0 (id INT PRIMARY KEY, c0 INT);

用意した JSON ファイル (test-schema.json) を指定して Schema Loader を実行します。この時、事前に用意した database.properties ファイル (CockroachDB に JDBC で接続するための情報を記載した設定ファイル) も指定します。

  • Schema Loader 実行
$ java -jar ./scalardb-schema-loader-3.5.0.jar --config ./database.properties -f ./test-schema.json --coordinator
[main] INFO com.scalar.db.schemaloader.command.SchemaLoaderCommand - Config path: ./database.properties
[main] INFO com.scalar.db.schemaloader.command.SchemaLoaderCommand - Schema path: ./test-schema.json
[main] INFO com.scalar.db.schemaloader.SchemaOperator - Creating the table t0 in the namespace s0 succeeded.
[main] INFO com.scalar.db.schemaloader.SchemaOperator - Creating the coordinator table succeeded.

これで TABLE 作成は完了です。試しに、直接 CockroachDB に接続して確認してみると、以下のような TABLE が作成されていることが確認できます。

  • TABLE 定義
root@cockroach-1:26257/db0> SHOW COLUMNS FROM s0.t0;
       column_name       | data_type | is_nullable | column_default | generation_expression |  indices  | is_hidden
-------------------------+-----------+-------------+----------------+-----------------------+-----------+------------
  id                     | INT8      |    false    | NULL           |                       | {primary} |   false
  c0                     | INT8      |    true     | NULL           |                       | {primary} |   false
  tx_id                  | STRING    |    true     | NULL           |                       | {primary} |   false
  tx_state               | INT8      |    true     | NULL           |                       | {primary} |   false
  tx_version             | INT8      |    true     | NULL           |                       | {primary} |   false
  tx_prepared_at         | INT8      |    true     | NULL           |                       | {primary} |   false
  tx_committed_at        | INT8      |    true     | NULL           |                       | {primary} |   false
  before_tx_id           | STRING    |    true     | NULL           |                       | {primary} |   false
  before_tx_state        | INT8      |    true     | NULL           |                       | {primary} |   false
  before_tx_version      | INT8      |    true     | NULL           |                       | {primary} |   false
  before_tx_prepared_at  | INT8      |    true     | NULL           |                       | {primary} |   false
  before_tx_committed_at | INT8      |    true     | NULL           |                       | {primary} |   false
  before_c0              | INT8      |    true     | NULL           |                       | {primary} |   false
(13 rows)

また、実際には Scalar DB 側で分散 Tx 等を管理するために必要なメタデータを格納する TABLE (scalardb.metadata / coordinator.state) も作成されていることが確認できます。

  • 作成された TABLE 一覧
root@cockroach-1:26257/db0> SHOW TABLES;
  schema_name | table_name | type  | owner  | estimated_row_count | locality
--------------+------------+-------+--------+---------------------+-----------
  coordinator | state      | table | scalar |                   0 | NULL
  s0          | t0         | table | scalar |                   0 | NULL
  scalardb    | metadata   | table | scalar |                  18 | NULL
(3 rows)

これで、Scalar DB 側の事前準備も完了です。

Scalar DB を使った CRUD

ということで、Scalar DB を使った CRUD 操作を実施してみようと思います。

が、現状 Scalar DB に SQL クライアントのようなツールはなく、今回は前述した通り Scalar DB を Java のライブラリとして利用するので、まずは CRUD 操作を実行するための Java App を用意します。

Scalar DB のダウンロード

GitHub から clone してきて build する方法もあるのですが、Scalar DB は Maven Central で公開されているので、今回はそこからダウンロードしてきます。

Java App の作成

今回は以下の 3 のプログラムで CRUD 操作を実行します。各コード内で先ほど準備した database.properties を読み込んで CockroachDB に JDBC で接続しています。

  • Write.java (Create / Update)
package com.example;

import java.io.File;
import java.io.IOException;

import com.scalar.db.api.DistributedTransaction;
import com.scalar.db.api.DistributedTransactionManager;
import com.scalar.db.api.Get;
import com.scalar.db.api.Put;
import com.scalar.db.config.DatabaseConfig;
import com.scalar.db.exception.transaction.TransactionException;
import com.scalar.db.io.Key;
import com.scalar.db.service.TransactionFactory;

public class Write {
    public static void main(String[] args) throws TransactionException, IOException {

        TransactionFactory factory = new TransactionFactory(new DatabaseConfig(new File("./database.properties")));
        DistributedTransactionManager manager = factory.getTransactionManager();
        manager.with("s0", "t0");
        DistributedTransaction tx = manager.start();

        int id = Integer.parseInt(args[0]);
        int value = Integer.parseInt(args[1]);

        try {
            Get get = new Get(new Key("id", id));
            tx.get(get);
            Put put = new Put(new Key("id", id)).withValue("c0", value);
            tx.put(put);
            tx.commit();
        } catch (Exception e) {
            tx.abort();
            throw e;
        }
    }
}
package com.example;

import java.io.File;
import java.io.IOException;
import java.util.Optional;

import com.scalar.db.api.DistributedTransaction;
import com.scalar.db.api.DistributedTransactionManager;
import com.scalar.db.api.Get;
import com.scalar.db.api.Result;
import com.scalar.db.config.DatabaseConfig;
import com.scalar.db.exception.transaction.TransactionException;
import com.scalar.db.io.Key;
import com.scalar.db.service.TransactionFactory;

public class Read {
    public static void main(String[] args) throws TransactionException, IOException {

        TransactionFactory factory = new TransactionFactory(new DatabaseConfig(new File("./database.properties")));
        DistributedTransactionManager manager = factory.getTransactionManager();
        manager.with("s0", "t0");
        DistributedTransaction tx = manager.start();

        int id = Integer.parseInt(args[0]);

        try {
            Get get = new Get(new Key("id", id));
            Optional<Result> result = tx.get(get);
            tx.commit();
            if (result.isPresent()) {
                int value = result.get().getValue("c0").get().getAsInt();
                System.out.println("id: " + id);
                System.out.println("c0: " + value);
            } else {
                System.out.println("\"id = " + id + "\" does not exist");
            }
        } catch (Exception e) {
            tx.abort();
            throw e;
        }
    }
}
  • Remove.java (Delete)
package com.example;

import java.io.File;
import java.io.IOException;

import com.scalar.db.api.Delete;
import com.scalar.db.api.DistributedTransaction;
import com.scalar.db.api.DistributedTransactionManager;
import com.scalar.db.api.Get;
import com.scalar.db.config.DatabaseConfig;
import com.scalar.db.exception.transaction.TransactionException;
import com.scalar.db.io.Key;
import com.scalar.db.service.TransactionFactory;

public class Remove {
    public static void main(String[] args) throws TransactionException, IOException{

        TransactionFactory factory = new TransactionFactory(new DatabaseConfig((new File("./database.properties"))));
        DistributedTransactionManager manager = factory.getTransactionManager();
        manager.with("s0", "t0");
        DistributedTransaction tx = manager.start();

        int id = Integer.parseInt(args[0]);

        try {
            Get get = new Get(new Key("id", id));
            tx.get(get);
            Delete del = new Delete(new Key("id", id));
            tx.delete(del);
            tx.commit();
        } catch (Exception e) {
            tx.abort();
            throw e;
        }
    }
}

ちなみに、今回は例外処理をサボっていますが、「分散 Tx を実行する」だけあって、実際はいろんなパターンのエラーを想定した複数の例外処理を実施する必要があります。(検証用のコードでそこまでガッツリ例外処理する元気はありませんでした...)

興味がある方は A Guide on How to Handle ExceptionsTrouble-shooting Guilde を参照してみてください。

App を実行

では、用意した各 App を実行してみます。

Create

まずは Create です。t0 TABLE に対して id = 1 / c0 = 100 のレコードを INSERT します。

  • Create
$ java -cp ./lib/*: com.example.Write 1 100

App 実行後、CockroachDB 側で直接確認すると、以下のようにレコードが INSERT されていることが確認できます。

  • CockroachDB 側で確認
root@cockroach-1:26257/db0> SELECT id, c0 FROM s0.t0;
  id | c0
-----+------
   1 | 100
(1 row)

Read

次に Read です。先ほど書き込んだ id = 1 / c0 = 100 のレコードを Scalar DB 経由で SELECT してみます。

  • Read
$ java -cp ./lib/*: com.example.Read 1
id: 1
c0: 100

Update

次は Update です。先ほど書き込んだ id = 1 / c0 = 100 のレコードの c0 の値を 200 に UPDATE してみます。(※Create/INSERT と同じものを利用します。)

  • Update
$ java -cp ./lib/*: com.example.Write 1 200

App 実行後、Scalar DB 経由で SELECT してみると、値が更新されていることが確認できます。

  • Read (Update 後の確認)
$ java -cp ./lib/*: com.example.Read 1
id: 1
c0: 200

また、CockroachDB 側で直接 SELECT すると、値が UPDATE されていることが確認できます。

  • CockroachDB 側で UPDATE された値を確認
root@cockroach-1:26257/db0> SELECT id, c0 FROM s0.t0;
  id | c0
-----+------
   1 | 200
(1 row)

Delete

最後に Delete です。先ほど書き込んだ id = 1 のレコードを DELETE してみます。

  • Delete
$ java -cp ./lib/*: com.example.Remove 1

App 実行後、Scalar DB 経由で SELECT してみると、id = 1 のレコードが削除されていることが確認できます。

  • Read (Delete 後の確認)
$ java -cp ./lib/*: com.example.Read 1
"id = 1" does not exist

また、CockroachDB 側で直接 SELECT すると、レコードが DELETE されていることが確認できます。

  • CockroachDB 側で DELETE されたことを確認
root@cockroach-1:26257/db0> SELECT id, c0 FROM s0.t0;
  id | c0
-----+-----
(0 rows)

まとめ

ということで、とりあえず Scalar DB on CockroachDB でシンプルな CRUD 操作は実行できました。(繰り返しになりますが、公式にサポートされている訳ではないのであしからず...)

なお、CockroachDB にアクセスする云々の前に Java 周りで (サンプル App の作成で) しこたま躓いたのは内緒です。

Java なんもわからん... (´・ω・`)

CockroachDB に「禰󠄀」を INSERT

TL に「DB に『禰󠄀』を INSERT した際の異体字セレクタ」の話題が流れてきたので、CockroachDB で試してみました。

環境

今回は以下の環境 (Docker を利用したローカルの Secure クラスタ) で検証しています。

バージョン

Ubuntu : 20.04
Docker : 20.10.12
CockroachDB : 21.2.4
Container Image : cockroachdb/cockroach

クラスタ (3匹構成)

$ docker ps
CONTAINER ID   IMAGE                           COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
f3a847c27d48   cockroachdb/cockroach:v21.2.4   "/cockroach/cockroac…"   11 minutes ago   Up 11 minutes   26257/tcp, 127.0.0.1:8083->8080/tcp                    cockroach-3
7c6036d2172d   cockroachdb/cockroach:v21.2.4   "/cockroach/cockroac…"   11 minutes ago   Up 11 minutes   26257/tcp, 127.0.0.1:8082->8080/tcp                    cockroach-2
b8a80a6847e3   cockroachdb/cockroach:v21.2.4   "/cockroach/cockroac…"   11 minutes ago   Up 11 minutes   127.0.0.1:26257->26257/tcp, 127.0.0.1:8081->8080/tcp   cockroach-1
5f5ea7063316   cockroachdb/cockroach:v21.2.4   "tail -f /dev/null"      11 minutes ago   Up 11 minutes   8080/tcp, 26257/tcp                                    cockroach-client

※cockroach-client は sql shell を実行するためのクライアント用コンテナ。

$ docker exec -it cockroach-client bash
[root@cockroach-client cockroach]# 
[root@cockroach-client cockroach]# cockroach node status --certs-dir=certs --host=cockroach-1
  id |      address      |    sql_address    |  build  |         started_at         |         updated_at         |          locality           | is_available | is_live
-----+-------------------+-------------------+---------+----------------------------+----------------------------+-----------------------------+--------------+----------
   1 | cockroach-1:26257 | cockroach-1:26257 | v21.2.4 | 2022-02-06 11:01:14.758259 | 2022-02-06 11:13:37.299944 | region=region-1,zone=zone-a | true         | true
   2 | cockroach-2:26257 | cockroach-2:26257 | v21.2.4 | 2022-02-06 11:01:15.701614 | 2022-02-06 11:13:38.253956 | region=region-1,zone=zone-b | true         | true
   3 | cockroach-3:26257 | cockroach-3:26257 | v21.2.4 | 2022-02-06 11:01:16.204495 | 2022-02-06 11:13:38.742721 | region=region-1,zone=zone-c | true         | true
(3 rows)

「禰󠄀」を INSERT

root@cockroach-1:26257/defaultdb> CREATE TABLE t0 (c0 STRING);
CREATE TABLE


Time: 74ms total (execution 73ms / network 0ms)

root@cockroach-1:26257/defaultdb> 
root@cockroach-1:26257/defaultdb> INSERT INTO t0 VALUES ('竈門禰豆子');
INSERT 1


Time: 16ms total (execution 16ms / network 0ms)

root@cockroach-1:26257/defaultdb> 
root@cockroach-1:26257/defaultdb> SELECT * FROM t0;
      c0
---------------
  竈門禰󠄀豆子
(1 row)


Time: 2ms total (execution 1ms / network 0ms)

特に問題なく INSERT / SELECT できました。

CockroachDB の文字コード関連の設定

CREATE DATABASE のページを見ると、CockroachDB の encoding の設定は UTF-8 のみサポートされる旨の記載がありましたが、扱えるバイト数等の情報は確認できませんでした。

  • ドキュメント抜粋

    The CREATE DATABASE statement accepts an optional ENCODING clause for compatibility with PostgreSQL, but UTF-8 is the only supported encoding. The aliases UTF8 and UNICODE are also accepted. Values should be enclosed in single quotes and are case-insensitive.

また、SET (session variable) のページに server_encoding / client_encoding の設定の記載がありますが、ORM との互換性を保つために用意されている設定項目のようであり、CockroachDB 自体の文字 (文字コード) の扱いには影響しなさそうな雰囲気でした。

  • ドキュメント抜粋

    Variable name Description Initial value Modify with SET ?
    client_encoding (Reserved; exposed only for ORM compatibility.) UTF8 No
    server_encoding (Reserved; exposed only for ORM compatibility.) UTF8 Yes

まとめ

特に問題なく「禰󠄀」を INSERT できました。

ただ、ターミナルで「禰」と表示されたり「禰󠄀」と表示されたりする理由がよく分かりませんでした...

異体字セレクタ難しい (´・ω・`)

株式会社 Scalar に入社しました

2021/12/31 付けで約 9年弱勤めた前職を退職し、2022/01/01 から 株式会社 Scalar でお仕事をさせてもらうことになりました。大きな節目であり、せっかくなので、入社エントリを残しておこうと思います。

Scalar はどんな会社なのか

Scalar (Twitter: @Scalar_labs) は、「THE WORLD'S RELIABLE DATABASE」をビジョンとして掲げ、分散 DB (分散 Tx マネージャー) である Scalar DB と分散型台帳である Scalar DL という 2つのプロダクトを中心に、DB 関連のプロダクトの研究開発を行なっている会社です。

また、Scalar DB は OSS (Apache License 2.0) で公開されており、Scalar DL は商用ライセンスでのみ提供されています。

  • Scalar DB (Apache License 2.0)
  • Scalar DL (Commercial License only)
    • Docs
    • GitHub
      • ※商用ライセンスのみでの提供なので、GitHub 上でも基本的にはドキュメントのみが公開されています。

私も絶賛勉強中なので、各プロダクトの概要については以下のホームページをご覧ください。しばらくしたら (OSS である Scalar DB を中心に) プライベートでもアウトプットしていきたいなぁと思ったりしてます (思ってるだけ)

転職した経緯/理由

私の今までのキャリアとしては、いわゆる「サポートエンジニア」のキャリアが長い状況で、PostgreSQL / NGINX / Linux あたりを中心にした OSS のサポート (特に PostgreSQL のサポート経験が長い) やパブリッククラウドのサポートをやってきました。DB を好きになったのも、PostgreSQL のサポートをしていた部分が大きいと思います。

また、少しだけ SI プロジェクトにも参加したことがありましたが、上記の通りサポート歴が長く、「何かを作る」という経験が少なかったため、(特に転職活動はしていなかったのですが) 漠然と「エンジニアとして何か (サービスやプロダクト) を "作る" 仕事がしてみたい」と思っていました。

そのような状況で Scalar から声をかけていただいたのですが、上記の通りサポートの仕事が長く開発系の仕事はほとんど経験がなかったので、最初は「自分のスキルセットではマッチしないのでは」とかなり及び腰になっていました。

しかし、分散 DB である Scalar DB というプロダクト自体や、分散 DB の研究開発をしているという Scalar の業務内容にはかなり興味があったので、一度お話を聞かせていただくことにしました。

その中で、「私のスキルセットでは合わない気がするのですが...」という部分も正直に伝えた上で、会社のことやプロダクトのことについていろいろとお話させていただくことができました。スタートアップで働くことも初であり不安もあったのですが、最終的に 5回ほど面談の場を設けていただき、私が不安に思っている部分や疑問点について事前にしっかりお話させていただけたことが安心材料になりました。

また、技術的な部分としては、個人的に「DB が好き」ということもあるのですが、マイクロサービスにおける複数サービス (各サービスが使っている複数の DB) 間で一貫性のある更新を可能にする Scalar DB はとても興味深いものでした。当時 (今もですが) CockroachDB を通して「分散 Tx」等にも興味を持っていた私には、かなり「刺さる」プロダクトでした。

加えて、(正直に言うと当初は名前すら知らなかったのですが) 契約書等の様々な重要な書類 (従来紙だったもの等) の電子化が進み「電子データの信頼性」がより重要になってきている昨今の状況において、DB 自体に改ざん検知機能をもたせる (DB 自体にデータの信頼性を高める機能をもたせる) Scalar DL というプロダクトについても、とても興味深いものでした。

更に、両プロダクト共に「水平スケール (スケールアウト) できる」という部分もとても魅力的であり、それぞれのプロダクトが今後活躍できそう (需要がありそう) と思った部分も決め手の 1つでした。

正直なところ前職はとても居心地の良い会社だったため、転職するか否か最後まで悩んだのですが、「自分が好きな DB という技術分野で仕事ができる」「やってみたかった "作る" 仕事ができる」「プロダクトが魅力的」という部分が勝り、転職を決断した次第です。

Scalar でやること

Scalar での私の当面のミッションの 1つ目は「各プロダクトのサポート (主に技術面でのサポート)」です。前述した通り、サポートエンジニアとしてのキャリアが一番長いので、まずはそのあたりをスキルを活かして貢献していけるように頑張っていこうと思います。

そして、2つ目のミッションは「クラウド/Kubernetes 環境へのデプロイを容易にする」ことです。いわゆる「クラウドネイティブ化を推進する」という感じでしょうか。主に以下の 2つのリポジトリを中心に活動していく予定になっており、この部分が私が挑戦したかった「何かを作る」部分になってくると思います。

技術コミュニティのみなさまへ

実は、今回の転職は以前参加していた Database Internals 輪読会 での繋がりがきっかけでご縁をいただくことができた次第となっています。また、Cloud Native Database Meetup で私がアウトプットした内容も見ていただいた上で、面談でいろいろなお話をさせていただくことができました。

更に、上記のようなコミュニティでのアウトプットにおける私の「第一歩」は Cloud Native Developers JP での LT でした (めちゃくちゃ緊張してたので当時どんな感じでお話をしたか覚えてません...w)。技術コミュニティへの参加やアウトプットの機会が無ければ Scalar に巡り会うことはできなかったと思います。

上記コミュニティを含め、今まで参加させていただいた各コミュニティの運営/関係者/参加者のみなさま、本当にありがとうございました。これからも DB 界隈や Cloud Native 界隈を中心に技術コミュニティでわいわいしていきたいと思いますので、今後もよろしくお願いします!

まとめ

ということで、2022 年は心機一転、Scalar で新しいことにチャレンジしていきたいと思います。正直なところ、まだ不安な部分 (主に自分のスキルでどこまで貢献できるのかという部分) もあるのですが、自分が好きな DB や Kubernetes に関わる仕事ができるので、テンションは上がっています。

前職のみなさま、長い間ほんとうにお世話になりました。最後にご挨拶させていただいた際、みなさま明るく前向きに送り出していただいたこと、本当に感謝しています。ありがとうございました。

Scalar のみなさま、まだまだ未熟な部分もありますが、少しでもお役に立てるよう頑張っていきたいと思いますので、よろしくお願いします!

We are hiring!

入社エントリでよくあるやつです!(一度自分で書いてみたかった)

Scalar では、DB が好きなメンバーを絶賛募集中です!

  • DB が好きな SRE
  • DB が好きなフルスタックエンジニア
  • DB が好きなエンジニアリングマネージャ
  • DB が好きなプロダクトマネージャ

等々、一緒に働く仲間を全方位募集中ですので、興味がある方は是非以下のサイトをご覧ください!

CockroachDB に 1レコード INSERT した時にアクセスされるファイルのお話

最近話題 (?) の「DB に 1レコード INSERT した時にアクセスされるファイル」について、CockroachDB で検証してみました。

元ネタ

元ネタは以下の Blog です。
MySQLエキスパートyoku0825が目指す、DBAとしての未来像

「インストールされたばかりのMySQLがあるとして、特定テーブルに1件のレコードを最初にINSERTした場合、アクセスが発生するファイルとその理由をすべて教えてください」

カジュアルとはいえ、面談で急にこれを聞かれたらテンパる自信が有ります。

環境

今回は以下の環境 (Docker を利用したローカルの Secure クラスタ) で検証しています。

バージョン

Ubuntu : 20.04
Docker : 20.10.8
CockroachDB : 21.1.7
Container Image : cockroachdb/cockroach

クラスタ (3匹構成)

$ sudo docker ps
CONTAINER ID   IMAGE                           COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
605c2a704bbd   cockroachdb/cockroach:v21.1.7   "/cockroach/cockroac…"   15 seconds ago   Up 14 seconds   26257/tcp, 127.0.0.1:8083->8080/tcp                    cockroach-3
054a35a7586a   cockroachdb/cockroach:v21.1.7   "/cockroach/cockroac…"   18 seconds ago   Up 18 seconds   26257/tcp, 127.0.0.1:8082->8080/tcp                    cockroach-2
dc9c30a61132   cockroachdb/cockroach:v21.1.7   "/cockroach/cockroac…"   23 seconds ago   Up 23 seconds   127.0.0.1:26257->26257/tcp, 127.0.0.1:8081->8080/tcp   cockroach-1
d75bfcddf87c   cockroachdb/cockroach:v21.1.7   "tail -f /dev/null"      26 seconds ago   Up 25 seconds   8080/tcp, 26257/tcp                                    cockroach-client

※cockroach-client は sql shell を実行するためのクライアント用コンテナ。

$ sudo docker exec -it cockroach-client bash
[root@cockroach-client cockroach]# 
[root@cockroach-client cockroach]# cockroach node status --certs-dir=certs --host=cockroach-1
  id |      address      |    sql_address    |  build  |         started_at         |         updated_at         |          locality           | is_available | is_live
-----+-------------------+-------------------+---------+----------------------------+----------------------------+-----------------------------+--------------+----------
   1 | cockroach-1:26257 | cockroach-1:26257 | v21.1.7 | 2021-08-28 06:19:05.168392 | 2021-08-28 06:19:59.219781 | region=region-1,zone=zone-a | true         | true
   2 | cockroach-2:26257 | cockroach-2:26257 | v21.1.7 | 2021-08-28 06:19:08.95911  | 2021-08-28 06:19:58.486166 | region=region-1,zone=zone-b | true         | true
   3 | cockroach-3:26257 | cockroach-3:26257 | v21.1.7 | 2021-08-28 06:19:12.531782 | 2021-08-28 06:19:57.557849 | region=region-1,zone=zone-c | true         | true
(3 rows)

CockroachDB では、cockroach start コマンドでの起動時に "-s (--store)" オプションで指定したディレクトリの中に、DB や TABLE に関連するファイル (実データ) が格納されるため、このオプションに指定したディレクトリ配下のファイルアクセスを調べます。

また、コンテナ起動時に (docker の) "-v" オプションでホスト側のディレクトリをコンテナにマウントさせているので、ファイルアクセスについては Docker ホスト側から inotifywait コマンドを使って調べています。

TABLE 作成

最初に、検証に利用する TABLE を作成しておきます。

[root@cockroach-client cockroach]# cockroach sql --certs-dir=certs --host=cockroach-1
#
# Welcome to the CockroachDB SQL shell.
# All statements must be terminated by a semicolon.
# To exit, type: \q.
#
# Server version: CockroachDB CCL v21.1.7 (x86_64-unknown-linux-gnu, built 2021/08/09 17:55:28, go1.15.14) (same version as client)
# Cluster ID: e77ad798-d3bc-4bd3-91a8-960c3e7549ce
#
# Enter \? for a brief introduction.
#
root@cockroach-1:26257/defaultdb> 
root@cockroach-1:26257/defaultdb> CREATE TABLE t1 (c1 INT, c2 STRING);
CREATE TABLE

Time: 75ms total (execution 75ms / network 0ms)

root@cockroach-1:26257/defaultdb> 
root@cockroach-1:26257/defaultdb> SHOW COLUMNS FROM t1;
  column_name | data_type | is_nullable | column_default | generation_expression |  indices  | is_hidden
--------------+-----------+-------------+----------------+-----------------------+-----------+------------
  c1          | INT8      |    true     | NULL           |                       | {}        |   false
  c2          | STRING    |    true     | NULL           |                       | {}        |   false
  rowid       | INT8      |    false    | unique_rowid() |                       | {primary} |   true
(3 rows)

Time: 53ms total (execution 53ms / network 0ms)

root@cockroach-1:26257/defaultdb>

また、この TABLE の Leaseholder (Raft Leader) を確認しておきます。

root@cockroach-1:26257/defaultdb> SELECT database_name, table_name, replicas, lease_holder FROM crdb_internal.ranges WHERE table_name = 't1';
  database_name | table_name | replicas | lease_holder
----------------+------------+----------+---------------
  defaultdb     | t1         | {1,2,3}  |            1
(1 row)

Time: 14ms total (execution 13ms / network 0ms)

今回の場合、Node ID 1 (cockroach-1) が Leaseholder (Raft の Leader)、Node ID 2/Node ID 3 (cockroach-2/cockroach-3) が replica (Raft の follower) になっているようです。

本命の前に (定期的にアクセスされるファイル)

今回は「1レコード INSERT した時にアクセスされるファイル」を調べたいのですが、どうやら CockroachDB では「何もしなくても定期的にファイルアクセスが発生」しているようです (推測ですが、恐らく Raft 関連の処理や Web UI で確認できるメトリクスを保存する処理に起因してファイルアクセスが発生していると思われます)。

なので、まずは何もしてなくても定期的にアクセスされているファイルを確認しておきます (とりあえず 3分ほどファイルアクセスを確認します)。

Leaseholder (cockroach-1) で確認

# time inotifywait -mr --format '%w%f : %e' ./cockroach-1/ > file_access_cockroach-1
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
^C

real    3m14.764s
user    0m0.032s
sys     0m0.070s

cockroach-1 がアクセスしているファイル

# sort ./file_access_cockroach-1 | uniq -c
     53 ./cockroach-1/ : ACCESS,ISDIR
     41 ./cockroach-1/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-1/ : OPEN,ISDIR
   1704 ./cockroach-1/000011.log : MODIFY
     82 ./cockroach-1/auxiliary : ACCESS,ISDIR
     41 ./cockroach-1/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-1/auxiliary : OPEN,ISDIR
     82 ./cockroach-1/auxiliary/ : ACCESS,ISDIR
     41 ./cockroach-1/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-1/auxiliary/ : OPEN,ISDIR
     82 ./cockroach-1/cockroach-temp755268128 : ACCESS,ISDIR
     41 ./cockroach-1/cockroach-temp755268128 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-1/cockroach-temp755268128 : OPEN,ISDIR
     82 ./cockroach-1/cockroach-temp755268128/ : ACCESS,ISDIR
     41 ./cockroach-1/cockroach-temp755268128/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-1/cockroach-temp755268128/ : OPEN,ISDIR
     82 ./cockroach-1/cockroach-temp755268128/auxiliary : ACCESS,ISDIR
     41 ./cockroach-1/cockroach-temp755268128/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-1/cockroach-temp755268128/auxiliary : OPEN,ISDIR
     82 ./cockroach-1/cockroach-temp755268128/auxiliary/ : ACCESS,ISDIR
     41 ./cockroach-1/cockroach-temp755268128/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-1/cockroach-temp755268128/auxiliary/ : OPEN,ISDIR
     82 ./cockroach-1/logs : ACCESS,ISDIR
     41 ./cockroach-1/logs : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-1/logs : OPEN,ISDIR
     82 ./cockroach-1/logs/ : ACCESS,ISDIR
     41 ./cockroach-1/logs/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-1/logs/ : OPEN,ISDIR
     19 ./cockroach-1/logs/cockroach.cockroach-1.root.2021-08-28T06_19_03Z.000001.log : MODIFY
     82 ./cockroach-1/logs/goroutine_dump : ACCESS,ISDIR
     41 ./cockroach-1/logs/goroutine_dump : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-1/logs/goroutine_dump : OPEN,ISDIR
     82 ./cockroach-1/logs/goroutine_dump/ : ACCESS,ISDIR
     41 ./cockroach-1/logs/goroutine_dump/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-1/logs/goroutine_dump/ : OPEN,ISDIR
     82 ./cockroach-1/logs/heap_profiler : ACCESS,ISDIR
     41 ./cockroach-1/logs/heap_profiler : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-1/logs/heap_profiler : OPEN,ISDIR
     82 ./cockroach-1/logs/heap_profiler/ : ACCESS,ISDIR
     41 ./cockroach-1/logs/heap_profiler/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-1/logs/heap_profiler/ : OPEN,ISDIR

replica (cockroach-2) で確認

# time inotifywait -mr --format '%w%f : %e' ./cockroach-2/ > file_access_cockroach-2
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
^C

real    3m15.499s
user    0m0.073s
sys     0m0.092s

cockroach-2 がアクセスしているファイル

# sort ./file_access_cockroach-2 | uniq -c
     55 ./cockroach-2/ : ACCESS,ISDIR
     41 ./cockroach-2/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/ : OPEN,ISDIR
   1694 ./cockroach-2/000378.log : MODIFY
     82 ./cockroach-2/auxiliary : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/1 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/1 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/1 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/1/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/1/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/1/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/10 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/10 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/10 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/10/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/10/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/10/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/11 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/11 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/11 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/11/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/11/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/11/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/12 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/12 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/12 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/12/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/12/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/12/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/13 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/13 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/13 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/13/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/13/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/13/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/14 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/14 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/14 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/14/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/14/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/14/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/15 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/15 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/15 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/15/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/15/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/15/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/16 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/16 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/16 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/16/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/16/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/16/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/17 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/17 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/17 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/17/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/17/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/17/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/18 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/18 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/18 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/18/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/18/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/18/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/19 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/19 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/19 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/19/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/19/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/19/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/2 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/2 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/2 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/2/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/2/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/2/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/20 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/20 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/20 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/20/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/20/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/20/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/21 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/21 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/21 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/21/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/21/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/21/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/22 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/22 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/22 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/22/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/22/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/22/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/23 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/23 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/23 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/23/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/23/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/23/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/24 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/24 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/24 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/24/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/24/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/24/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/25 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/25 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/25 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/25/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/25/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/25/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/26 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/26 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/26 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/26/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/26/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/26/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/27 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/27 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/27 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/27/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/27/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/27/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/28 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/28 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/28 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/28/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/28/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/28/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/29 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/29 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/29 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/29/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/29/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/29/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/3 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/3 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/3 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/3/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/3/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/3/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/30 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/30 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/30 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/30/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/30/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/30/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/31 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/31 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/31 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/31/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/31/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/31/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/32 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/32 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/32 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/32/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/32/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/32/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/33 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/33 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/33 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/33/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/33/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/33/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/34 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/34 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/34 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/34/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/34/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/34/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/35 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/35 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/35 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/35/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/35/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/35/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/36 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/36 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/36 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/36/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/36/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/36/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/4 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/4 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/4 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/4/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/4/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/4/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/5 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/5 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/5 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/5/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/5/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/5/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/6 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/6 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/6 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/6/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/6/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/6/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/7 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/7 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/7 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/7/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/7/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/7/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/8 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/8 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/8 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/8/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/8/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/8/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/9 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/9 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/9 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/9/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/9/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/9/ : OPEN,ISDIR
     82 ./cockroach-2/cockroach-temp575432717 : ACCESS,ISDIR
     41 ./cockroach-2/cockroach-temp575432717 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/cockroach-temp575432717 : OPEN,ISDIR
     82 ./cockroach-2/cockroach-temp575432717/ : ACCESS,ISDIR
     41 ./cockroach-2/cockroach-temp575432717/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/cockroach-temp575432717/ : OPEN,ISDIR
     83 ./cockroach-2/cockroach-temp575432717/auxiliary : ACCESS,ISDIR
     41 ./cockroach-2/cockroach-temp575432717/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/cockroach-temp575432717/auxiliary : OPEN,ISDIR
     83 ./cockroach-2/cockroach-temp575432717/auxiliary/ : ACCESS,ISDIR
     41 ./cockroach-2/cockroach-temp575432717/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/cockroach-temp575432717/auxiliary/ : OPEN,ISDIR
     82 ./cockroach-2/logs : ACCESS,ISDIR
     41 ./cockroach-2/logs : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/logs : OPEN,ISDIR
     82 ./cockroach-2/logs/ : ACCESS,ISDIR
     41 ./cockroach-2/logs/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/logs/ : OPEN,ISDIR
     19 ./cockroach-2/logs/cockroach.cockroach-2.root.2021-08-28T06_19_08Z.000001.log : MODIFY
     82 ./cockroach-2/logs/goroutine_dump : ACCESS,ISDIR
     41 ./cockroach-2/logs/goroutine_dump : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/logs/goroutine_dump : OPEN,ISDIR
     82 ./cockroach-2/logs/goroutine_dump/ : ACCESS,ISDIR
     41 ./cockroach-2/logs/goroutine_dump/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/logs/goroutine_dump/ : OPEN,ISDIR
     82 ./cockroach-2/logs/heap_profiler : ACCESS,ISDIR
     41 ./cockroach-2/logs/heap_profiler : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/logs/heap_profiler : OPEN,ISDIR
     82 ./cockroach-2/logs/heap_profiler/ : ACCESS,ISDIR
     41 ./cockroach-2/logs/heap_profiler/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/logs/heap_profiler/ : OPEN,ISDIR

replica (cockroach-3) で確認

# time inotifywait -mr --format '%w%f : %e' ./cockroach-3/ > file_access_cockroach-3
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
^C

real    3m17.032s
user    0m0.052s
sys     0m0.116s

cockroach-3 がアクセスしているファイル

# sort ./file_access_cockroach-3 | uniq -c
     61 ./cockroach-3/ : ACCESS,ISDIR
     43 ./cockroach-3/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/ : OPEN,ISDIR
   1712 ./cockroach-3/000379.log : MODIFY
     86 ./cockroach-3/auxiliary : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/1 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/1 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/1 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/1/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/1/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/1/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/10 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/10 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/10 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/10/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/10/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/10/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/11 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/11 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/11 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/11/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/11/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/11/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/12 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/12 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/12 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/12/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/12/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/12/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/13 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/13 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/13 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/13/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/13/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/13/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/14 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/14 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/14 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/14/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/14/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/14/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/15 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/15 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/15 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/15/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/15/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/15/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/16 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/16 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/16 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/16/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/16/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/16/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/17 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/17 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/17 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/17/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/17/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/17/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/18 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/18 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/18 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/18/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/18/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/18/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/19 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/19 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/19 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/19/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/19/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/19/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/2 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/2 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/2 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/2/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/2/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/2/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/20 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/20 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/20 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/20/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/20/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/20/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/21 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/21 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/21 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/21/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/21/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/21/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/22 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/22 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/22 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/22/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/22/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/22/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/23 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/23 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/23 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/23/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/23/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/23/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/24 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/24 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/24 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/24/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/24/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/24/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/25 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/25 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/25 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/25/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/25/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/25/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/26 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/26 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/26 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/26/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/26/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/26/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/27 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/27 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/27 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/27/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/27/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/27/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/28 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/28 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/28 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/28/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/28/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/28/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/29 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/29 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/29 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/29/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/29/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/29/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/3 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/3 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/3 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/3/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/3/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/3/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/30 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/30 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/30 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/30/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/30/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/30/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/31 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/31 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/31 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/31/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/31/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/31/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/32 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/32 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/32 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/32/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/32/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/32/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/33 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/33 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/33 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/33/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/33/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/33/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/34 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/34 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/34 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/34/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/34/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/34/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/35 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/35 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/35 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/35/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/35/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/35/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/36 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/36 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/36 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/36/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/36/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/36/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/4 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/4 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/4 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/4/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/4/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/4/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/5 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/5 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/5 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/5/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/5/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/5/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/6 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/6 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/6 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/6/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/6/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/6/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/7 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/7 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/7 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/7/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/7/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/7/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/8 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/8 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/8 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/8/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/8/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/8/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/9 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/9 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/9 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/9/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/9/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/9/ : OPEN,ISDIR
     86 ./cockroach-3/cockroach-temp395666710 : ACCESS,ISDIR
     43 ./cockroach-3/cockroach-temp395666710 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/cockroach-temp395666710 : OPEN,ISDIR
     86 ./cockroach-3/cockroach-temp395666710/ : ACCESS,ISDIR
     43 ./cockroach-3/cockroach-temp395666710/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/cockroach-temp395666710/ : OPEN,ISDIR
     86 ./cockroach-3/cockroach-temp395666710/auxiliary : ACCESS,ISDIR
     43 ./cockroach-3/cockroach-temp395666710/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/cockroach-temp395666710/auxiliary : OPEN,ISDIR
     86 ./cockroach-3/cockroach-temp395666710/auxiliary/ : ACCESS,ISDIR
     43 ./cockroach-3/cockroach-temp395666710/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/cockroach-temp395666710/auxiliary/ : OPEN,ISDIR
     86 ./cockroach-3/logs : ACCESS,ISDIR
     43 ./cockroach-3/logs : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/logs : OPEN,ISDIR
     86 ./cockroach-3/logs/ : ACCESS,ISDIR
     43 ./cockroach-3/logs/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/logs/ : OPEN,ISDIR
     20 ./cockroach-3/logs/cockroach.cockroach-3.root.2021-08-28T06_19_12Z.000001.log : MODIFY
     84 ./cockroach-3/logs/goroutine_dump : ACCESS,ISDIR
     42 ./cockroach-3/logs/goroutine_dump : CLOSE_NOWRITE,CLOSE,ISDIR
     42 ./cockroach-3/logs/goroutine_dump : OPEN,ISDIR
     84 ./cockroach-3/logs/goroutine_dump/ : ACCESS,ISDIR
     42 ./cockroach-3/logs/goroutine_dump/ : CLOSE_NOWRITE,CLOSE,ISDIR
     42 ./cockroach-3/logs/goroutine_dump/ : OPEN,ISDIR
     88 ./cockroach-3/logs/heap_profiler : ACCESS,ISDIR
     44 ./cockroach-3/logs/heap_profiler : CLOSE_NOWRITE,CLOSE,ISDIR
     44 ./cockroach-3/logs/heap_profiler : OPEN,ISDIR
     88 ./cockroach-3/logs/heap_profiler/ : ACCESS,ISDIR
     44 ./cockroach-3/logs/heap_profiler/ : CLOSE_NOWRITE,CLOSE,ISDIR
     44 ./cockroach-3/logs/heap_profiler/ : OPEN,ISDIR
      1 ./cockroach-3/logs/heap_profiler/memprof.2021-08-28T06_20_32.541.47427880.pprof : DELETE
      1 ./cockroach-3/logs/heap_profiler/memprof.2021-08-28T06_33_22.550.56282280.pprof : CLOSE_WRITE,CLOSE
      1 ./cockroach-3/logs/heap_profiler/memprof.2021-08-28T06_33_22.550.56282280.pprof : CREATE
    309 ./cockroach-3/logs/heap_profiler/memprof.2021-08-28T06_33_22.550.56282280.pprof : MODIFY
      1 ./cockroach-3/logs/heap_profiler/memprof.2021-08-28T06_33_22.550.56282280.pprof : OPEN

cockroach-1 (Leaseholder) と比べて、cockroach-2/cockroach-3 (Replica) の方がアクセスされているファイルが多いように見えます。この差分も気になるところですが、今回の本題からはそれるので一旦気にしないでおきます。

本命 (INSERT 時にアクセスしているファイル)

それでは、本命について調べてみます。先程と同じように、ホスト側で inotfywait を実行した上で、INSERT を実行します。

INSERT 文

root@cockroach-1:26257/defaultdb> BEGIN;
BEGIN

Time: 0ms total (execution 1ms / network 0ms)

root@cockroach-1:26257/defaultdb  OPEN> 
root@cockroach-1:26257/defaultdb  OPEN> INSERT INTO t1 VALUES (111, 'aaa');
INSERT 1

Time: 2ms total (execution 2ms / network 0ms)

root@cockroach-1:26257/defaultdb  OPEN> 
root@cockroach-1:26257/defaultdb  OPEN> COMMIT;
COMMIT

Time: 14ms total (execution 14ms / network 0ms)

root@cockroach-1:26257/defaultdb>

Leaseholder (cockroach-1)

# time inotifywait -mr --format '%w%f : %e' ./cockroach-1/ > INSERT_file_access_cockroach-1
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
^C

real    3m59.656s
user    0m0.040s
sys     0m0.105s

INSERT 時に cockroach-1 がアクセスしているファイル

# sort ./INSERT_file_access_cockroach-1 | uniq -c
     67 ./cockroach-1/ : ACCESS,ISDIR
     52 ./cockroach-1/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-1/ : OPEN,ISDIR
      1 ./cockroach-1/000002.log : MOVED_FROM
      1 ./cockroach-1/000011.log : CLOSE_WRITE,CLOSE
    163 ./cockroach-1/000011.log : MODIFY
     84 ./cockroach-1/000013.sst : ACCESS
      3 ./cockroach-1/000013.sst : CLOSE_NOWRITE,CLOSE
      1 ./cockroach-1/000013.sst : DELETE
      2 ./cockroach-1/000013.sst : OPEN
   1966 ./cockroach-1/000014.log : MODIFY
      1 ./cockroach-1/000014.log : MOVED_TO
      1 ./cockroach-1/000014.log : OPEN
     77 ./cockroach-1/000015.sst : ACCESS
      2 ./cockroach-1/000015.sst : CLOSE_NOWRITE,CLOSE
      1 ./cockroach-1/000015.sst : CLOSE_WRITE,CLOSE
      1 ./cockroach-1/000015.sst : CREATE
      1 ./cockroach-1/000015.sst : DELETE
     65 ./cockroach-1/000015.sst : MODIFY
      3 ./cockroach-1/000015.sst : OPEN
     20 ./cockroach-1/000016.sst : ACCESS
      1 ./cockroach-1/000016.sst : CLOSE_WRITE,CLOSE
      1 ./cockroach-1/000016.sst : CREATE
    134 ./cockroach-1/000016.sst : MODIFY
      2 ./cockroach-1/000016.sst : OPEN
      2 ./cockroach-1/MANIFEST-000001 : MODIFY
    104 ./cockroach-1/auxiliary : ACCESS,ISDIR
     52 ./cockroach-1/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-1/auxiliary : OPEN,ISDIR
    104 ./cockroach-1/auxiliary/ : ACCESS,ISDIR
     52 ./cockroach-1/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-1/auxiliary/ : OPEN,ISDIR
    105 ./cockroach-1/cockroach-temp755268128 : ACCESS,ISDIR
     52 ./cockroach-1/cockroach-temp755268128 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-1/cockroach-temp755268128 : OPEN,ISDIR
    105 ./cockroach-1/cockroach-temp755268128/ : ACCESS,ISDIR
     52 ./cockroach-1/cockroach-temp755268128/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-1/cockroach-temp755268128/ : OPEN,ISDIR
    104 ./cockroach-1/cockroach-temp755268128/auxiliary : ACCESS,ISDIR
     52 ./cockroach-1/cockroach-temp755268128/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-1/cockroach-temp755268128/auxiliary : OPEN,ISDIR
    104 ./cockroach-1/cockroach-temp755268128/auxiliary/ : ACCESS,ISDIR
     52 ./cockroach-1/cockroach-temp755268128/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-1/cockroach-temp755268128/auxiliary/ : OPEN,ISDIR
    104 ./cockroach-1/logs : ACCESS,ISDIR
     52 ./cockroach-1/logs : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-1/logs : OPEN,ISDIR
    104 ./cockroach-1/logs/ : ACCESS,ISDIR
     52 ./cockroach-1/logs/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-1/logs/ : OPEN,ISDIR
      1 ./cockroach-1/logs/cockroach-pebble.cockroach-1.root.2021-08-28T06_19_03Z.000001.log : MODIFY
     24 ./cockroach-1/logs/cockroach.cockroach-1.root.2021-08-28T06_19_03Z.000001.log : MODIFY
    104 ./cockroach-1/logs/goroutine_dump : ACCESS,ISDIR
     52 ./cockroach-1/logs/goroutine_dump : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-1/logs/goroutine_dump : OPEN,ISDIR
    104 ./cockroach-1/logs/goroutine_dump/ : ACCESS,ISDIR
     52 ./cockroach-1/logs/goroutine_dump/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-1/logs/goroutine_dump/ : OPEN,ISDIR
    114 ./cockroach-1/logs/heap_profiler : ACCESS,ISDIR
     57 ./cockroach-1/logs/heap_profiler : CLOSE_NOWRITE,CLOSE,ISDIR
     57 ./cockroach-1/logs/heap_profiler : OPEN,ISDIR
    114 ./cockroach-1/logs/heap_profiler/ : ACCESS,ISDIR
     57 ./cockroach-1/logs/heap_profiler/ : CLOSE_NOWRITE,CLOSE,ISDIR
     57 ./cockroach-1/logs/heap_profiler/ : OPEN,ISDIR
      1 ./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_39_15.201.253542400.txt : DELETE
      1 ./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_39_25.201.254353408.txt : DELETE
      1 ./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_05.202.259219456.txt : CLOSE_WRITE,CLOSE
      1 ./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_05.202.259219456.txt : CREATE
      1 ./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_05.202.259219456.txt : MODIFY
      1 ./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_05.202.259219456.txt : OPEN
      1 ./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_15.202.260571136.txt : CLOSE_WRITE,CLOSE
      1 ./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_15.202.260571136.txt : CREATE
      1 ./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_15.202.260571136.txt : MODIFY
      1 ./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_15.202.260571136.txt : OPEN

cockroach-1 での INSERT 時と平常時の差分

# diff -u <(sort ./file_access_cockroach-1 | uniq) <(sort ./INSERT_file_access_cockroach-1 | uniq)
--- /dev/fd/63    2021-08-28 15:46:27.767770309 +0900
+++ /dev/fd/62    2021-08-28 15:46:27.771772598 +0900
@@ -1,7 +1,29 @@
 ./cockroach-1/ : ACCESS,ISDIR
 ./cockroach-1/ : CLOSE_NOWRITE,CLOSE,ISDIR
 ./cockroach-1/ : OPEN,ISDIR
+./cockroach-1/000002.log : MOVED_FROM
+./cockroach-1/000011.log : CLOSE_WRITE,CLOSE
 ./cockroach-1/000011.log : MODIFY
+./cockroach-1/000013.sst : ACCESS
+./cockroach-1/000013.sst : CLOSE_NOWRITE,CLOSE
+./cockroach-1/000013.sst : DELETE
+./cockroach-1/000013.sst : OPEN
+./cockroach-1/000014.log : MODIFY
+./cockroach-1/000014.log : MOVED_TO
+./cockroach-1/000014.log : OPEN
+./cockroach-1/000015.sst : ACCESS
+./cockroach-1/000015.sst : CLOSE_NOWRITE,CLOSE
+./cockroach-1/000015.sst : CLOSE_WRITE,CLOSE
+./cockroach-1/000015.sst : CREATE
+./cockroach-1/000015.sst : DELETE
+./cockroach-1/000015.sst : MODIFY
+./cockroach-1/000015.sst : OPEN
+./cockroach-1/000016.sst : ACCESS
+./cockroach-1/000016.sst : CLOSE_WRITE,CLOSE
+./cockroach-1/000016.sst : CREATE
+./cockroach-1/000016.sst : MODIFY
+./cockroach-1/000016.sst : OPEN
+./cockroach-1/MANIFEST-000001 : MODIFY
 ./cockroach-1/auxiliary : ACCESS,ISDIR
 ./cockroach-1/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR
 ./cockroach-1/auxiliary : OPEN,ISDIR
@@ -26,6 +48,7 @@
 ./cockroach-1/logs/ : ACCESS,ISDIR
 ./cockroach-1/logs/ : CLOSE_NOWRITE,CLOSE,ISDIR
 ./cockroach-1/logs/ : OPEN,ISDIR
+./cockroach-1/logs/cockroach-pebble.cockroach-1.root.2021-08-28T06_19_03Z.000001.log : MODIFY
 ./cockroach-1/logs/cockroach.cockroach-1.root.2021-08-28T06_19_03Z.000001.log : MODIFY
 ./cockroach-1/logs/goroutine_dump : ACCESS,ISDIR
 ./cockroach-1/logs/goroutine_dump : CLOSE_NOWRITE,CLOSE,ISDIR
@@ -39,3 +62,13 @@
 ./cockroach-1/logs/heap_profiler/ : ACCESS,ISDIR
 ./cockroach-1/logs/heap_profiler/ : CLOSE_NOWRITE,CLOSE,ISDIR
 ./cockroach-1/logs/heap_profiler/ : OPEN,ISDIR
+./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_39_15.201.253542400.txt : DELETE
+./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_39_25.201.254353408.txt : DELETE
+./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_05.202.259219456.txt : CLOSE_WRITE,CLOSE
+./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_05.202.259219456.txt : CREATE
+./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_05.202.259219456.txt : MODIFY
+./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_05.202.259219456.txt : OPEN
+./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_15.202.260571136.txt : CLOSE_WRITE,CLOSE
+./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_15.202.260571136.txt : CREATE
+./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_15.202.260571136.txt : MODIFY
+./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_15.202.260571136.txt : OPEN

replica (cockroach-2)

# time inotifywait -mr --format '%w%f : %e' ./cockroach-2/ > INSERT_file_access_cockroach-2
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
^C

real    3m58.508s
user    0m0.092s
sys     0m0.123s

INSERT 時に cockroach-2 がアクセスしているファイル

# sort ./INSERT_file_access_cockroach-2 | uniq -c
     74 ./cockroach-2/ : ACCESS,ISDIR
     52 ./cockroach-2/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/ : OPEN,ISDIR
      1 ./cockroach-2/000367.log : MOVED_FROM
      1 ./cockroach-2/000378.log : CLOSE_WRITE,CLOSE
    591 ./cockroach-2/000378.log : MODIFY
     88 ./cockroach-2/000380.sst : ACCESS
      3 ./cockroach-2/000380.sst : CLOSE_NOWRITE,CLOSE
      1 ./cockroach-2/000380.sst : DELETE
      2 ./cockroach-2/000380.sst : OPEN
   1504 ./cockroach-2/000381.log : MODIFY
      1 ./cockroach-2/000381.log : MOVED_TO
      1 ./cockroach-2/000381.log : OPEN
     78 ./cockroach-2/000382.sst : ACCESS
      2 ./cockroach-2/000382.sst : CLOSE_NOWRITE,CLOSE
      1 ./cockroach-2/000382.sst : CLOSE_WRITE,CLOSE
      1 ./cockroach-2/000382.sst : CREATE
      1 ./cockroach-2/000382.sst : DELETE
     68 ./cockroach-2/000382.sst : MODIFY
      3 ./cockroach-2/000382.sst : OPEN
     13 ./cockroach-2/000383.sst : ACCESS
      1 ./cockroach-2/000383.sst : CLOSE_WRITE,CLOSE
      1 ./cockroach-2/000383.sst : CREATE
    130 ./cockroach-2/000383.sst : MODIFY
      2 ./cockroach-2/000383.sst : OPEN
      2 ./cockroach-2/MANIFEST-000001 : MODIFY
    104 ./cockroach-2/auxiliary : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/1 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/1 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/1 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/1/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/1/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/1/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/10 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/10 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/10 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/10/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/10/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/10/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/11 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/11 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/11 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/11/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/11/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/11/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/12 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/12 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/12 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/12/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/12/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/12/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/13 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/13 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/13 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/13/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/13/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/13/ : OPEN,ISDIR
    103 ./cockroach-2/auxiliary/sstsnapshot/14 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/14 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/14 : OPEN,ISDIR
    103 ./cockroach-2/auxiliary/sstsnapshot/14/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/14/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/14/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/15 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/15 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/15 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/15/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/15/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/15/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/16 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/16 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/16 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/16/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/16/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/16/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/17 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/17 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/17 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/17/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/17/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/17/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/18 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/18 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/18 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/18/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/18/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/18/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/19 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/19 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/19 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/19/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/19/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/19/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/2 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/2 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/2 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/2/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/2/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/2/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/20 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/20 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/20 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/20/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/20/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/20/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/21 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/21 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/21 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/21/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/21/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/21/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/22 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/22 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/22 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/22/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/22/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/22/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/23 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/23 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/23 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/23/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/23/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/23/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/24 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/24 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/24 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/24/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/24/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/24/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/25 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/25 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/25 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/25/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/25/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/25/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/26 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/26 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/26 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/26/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/26/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/26/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/27 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/27 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/27 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/27/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/27/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/27/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/28 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/28 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/28 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/28/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/28/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/28/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/29 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/29 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/29 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/29/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/29/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/29/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/3 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/3 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/3 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/3/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/3/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/3/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/30 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/30 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/30 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/30/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/30/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/30/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/31 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/31 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/31 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/31/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/31/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/31/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/32 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/32 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/32 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/32/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/32/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/32/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/33 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/33 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/33 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/33/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/33/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/33/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/34 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/34 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/34 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/34/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/34/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/34/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/35 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/35 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/35 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/35/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/35/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/35/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/36 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/36 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/36 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/36/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/36/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/36/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/4 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/4 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/4 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/4/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/4/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/4/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/5 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/5 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/5 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/5/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/5/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/5/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/6 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/6 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/6 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/6/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/6/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/6/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/7 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/7 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/7 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/7/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/7/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/7/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/8 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/8 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/8 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/8/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/8/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/8/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/9 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/9 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/9 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/9/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/9/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/9/ : OPEN,ISDIR
    104 ./cockroach-2/cockroach-temp575432717 : ACCESS,ISDIR
     52 ./cockroach-2/cockroach-temp575432717 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/cockroach-temp575432717 : OPEN,ISDIR
    104 ./cockroach-2/cockroach-temp575432717/ : ACCESS,ISDIR
     52 ./cockroach-2/cockroach-temp575432717/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/cockroach-temp575432717/ : OPEN,ISDIR
    104 ./cockroach-2/cockroach-temp575432717/auxiliary : ACCESS,ISDIR
     52 ./cockroach-2/cockroach-temp575432717/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/cockroach-temp575432717/auxiliary : OPEN,ISDIR
    104 ./cockroach-2/cockroach-temp575432717/auxiliary/ : ACCESS,ISDIR
     52 ./cockroach-2/cockroach-temp575432717/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/cockroach-temp575432717/auxiliary/ : OPEN,ISDIR
    104 ./cockroach-2/logs : ACCESS,ISDIR
     52 ./cockroach-2/logs : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/logs : OPEN,ISDIR
    104 ./cockroach-2/logs/ : ACCESS,ISDIR
     52 ./cockroach-2/logs/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/logs/ : OPEN,ISDIR
      1 ./cockroach-2/logs/cockroach-pebble.cockroach-2.root.2021-08-28T06_19_08Z.000001.log : MODIFY
     24 ./cockroach-2/logs/cockroach.cockroach-2.root.2021-08-28T06_19_08Z.000001.log : MODIFY
    104 ./cockroach-2/logs/goroutine_dump : ACCESS,ISDIR
     52 ./cockroach-2/logs/goroutine_dump : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/logs/goroutine_dump : OPEN,ISDIR
    104 ./cockroach-2/logs/goroutine_dump/ : ACCESS,ISDIR
     52 ./cockroach-2/logs/goroutine_dump/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/logs/goroutine_dump/ : OPEN,ISDIR
    120 ./cockroach-2/logs/heap_profiler : ACCESS,ISDIR
     60 ./cockroach-2/logs/heap_profiler : CLOSE_NOWRITE,CLOSE,ISDIR
     60 ./cockroach-2/logs/heap_profiler : OPEN,ISDIR
    120 ./cockroach-2/logs/heap_profiler/ : ACCESS,ISDIR
     60 ./cockroach-2/logs/heap_profiler/ : CLOSE_NOWRITE,CLOSE,ISDIR
     60 ./cockroach-2/logs/heap_profiler/ : OPEN,ISDIR
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_30_08.976.244809728.txt : DELETE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_30_18.976.246157312.txt : DELETE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_39_38.983.246288384.txt : DELETE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_39_48.984.247365632.txt : DELETE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_39_58.984.248446976.txt : DELETE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_08.984.249528320.txt : CLOSE_WRITE,CLOSE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_08.984.249528320.txt : CREATE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_08.984.249528320.txt : DELETE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_08.984.249528320.txt : MODIFY
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_08.984.249528320.txt : OPEN
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_18.985.250609664.txt : CLOSE_WRITE,CLOSE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_18.985.250609664.txt : CREATE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_18.985.250609664.txt : DELETE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_18.985.250609664.txt : MODIFY
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_18.985.250609664.txt : OPEN
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_28.985.251420672.txt : CLOSE_WRITE,CLOSE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_28.985.251420672.txt : CREATE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_28.985.251420672.txt : MODIFY
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_28.985.251420672.txt : OPEN
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_38.985.252772352.txt : CLOSE_WRITE,CLOSE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_38.985.252772352.txt : CREATE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_38.985.252772352.txt : MODIFY
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_38.985.252772352.txt : OPEN
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_48.985.253313024.txt : CLOSE_WRITE,CLOSE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_48.985.253313024.txt : CREATE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_48.985.253313024.txt : MODIFY
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_48.985.253313024.txt : OPEN
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_58.985.254394368.txt : CLOSE_WRITE,CLOSE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_58.985.254394368.txt : CREATE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_58.985.254394368.txt : MODIFY
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_58.985.254394368.txt : OPEN
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_41_08.985.255471616.txt : CLOSE_WRITE,CLOSE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_41_08.985.255471616.txt : CREATE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_41_08.985.255471616.txt : MODIFY
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_41_08.985.255471616.txt : OPEN

cockroach-2 での INSERT 時と平常時の差分

# diff -u <(sort ./file_access_cockroach-2 | uniq) <(sort ./INSERT_file_access_cockroach-2 | uniq)
--- /dev/fd/63    2021-08-28 15:49:21.260992890 +0900
+++ /dev/fd/62    2021-08-28 15:49:21.264996153 +0900
@@ -1,7 +1,29 @@
 ./cockroach-2/ : ACCESS,ISDIR
 ./cockroach-2/ : CLOSE_NOWRITE,CLOSE,ISDIR
 ./cockroach-2/ : OPEN,ISDIR
+./cockroach-2/000367.log : MOVED_FROM
+./cockroach-2/000378.log : CLOSE_WRITE,CLOSE
 ./cockroach-2/000378.log : MODIFY
+./cockroach-2/000380.sst : ACCESS
+./cockroach-2/000380.sst : CLOSE_NOWRITE,CLOSE
+./cockroach-2/000380.sst : DELETE
+./cockroach-2/000380.sst : OPEN
+./cockroach-2/000381.log : MODIFY
+./cockroach-2/000381.log : MOVED_TO
+./cockroach-2/000381.log : OPEN
+./cockroach-2/000382.sst : ACCESS
+./cockroach-2/000382.sst : CLOSE_NOWRITE,CLOSE
+./cockroach-2/000382.sst : CLOSE_WRITE,CLOSE
+./cockroach-2/000382.sst : CREATE
+./cockroach-2/000382.sst : DELETE
+./cockroach-2/000382.sst : MODIFY
+./cockroach-2/000382.sst : OPEN
+./cockroach-2/000383.sst : ACCESS
+./cockroach-2/000383.sst : CLOSE_WRITE,CLOSE
+./cockroach-2/000383.sst : CREATE
+./cockroach-2/000383.sst : MODIFY
+./cockroach-2/000383.sst : OPEN
+./cockroach-2/MANIFEST-000001 : MODIFY
 ./cockroach-2/auxiliary : ACCESS,ISDIR
 ./cockroach-2/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR
 ./cockroach-2/auxiliary : OPEN,ISDIR
@@ -248,6 +270,7 @@
 ./cockroach-2/logs/ : ACCESS,ISDIR
 ./cockroach-2/logs/ : CLOSE_NOWRITE,CLOSE,ISDIR
 ./cockroach-2/logs/ : OPEN,ISDIR
+./cockroach-2/logs/cockroach-pebble.cockroach-2.root.2021-08-28T06_19_08Z.000001.log : MODIFY
 ./cockroach-2/logs/cockroach.cockroach-2.root.2021-08-28T06_19_08Z.000001.log : MODIFY
 ./cockroach-2/logs/goroutine_dump : ACCESS,ISDIR
 ./cockroach-2/logs/goroutine_dump : CLOSE_NOWRITE,CLOSE,ISDIR
@@ -261,3 +284,38 @@
 ./cockroach-2/logs/heap_profiler/ : ACCESS,ISDIR
 ./cockroach-2/logs/heap_profiler/ : CLOSE_NOWRITE,CLOSE,ISDIR
 ./cockroach-2/logs/heap_profiler/ : OPEN,ISDIR
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_30_08.976.244809728.txt : DELETE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_30_18.976.246157312.txt : DELETE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_39_38.983.246288384.txt : DELETE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_39_48.984.247365632.txt : DELETE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_39_58.984.248446976.txt : DELETE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_08.984.249528320.txt : CLOSE_WRITE,CLOSE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_08.984.249528320.txt : CREATE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_08.984.249528320.txt : DELETE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_08.984.249528320.txt : MODIFY
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_08.984.249528320.txt : OPEN
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_18.985.250609664.txt : CLOSE_WRITE,CLOSE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_18.985.250609664.txt : CREATE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_18.985.250609664.txt : DELETE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_18.985.250609664.txt : MODIFY
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_18.985.250609664.txt : OPEN
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_28.985.251420672.txt : CLOSE_WRITE,CLOSE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_28.985.251420672.txt : CREATE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_28.985.251420672.txt : MODIFY
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_28.985.251420672.txt : OPEN
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_38.985.252772352.txt : CLOSE_WRITE,CLOSE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_38.985.252772352.txt : CREATE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_38.985.252772352.txt : MODIFY
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_38.985.252772352.txt : OPEN
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_48.985.253313024.txt : CLOSE_WRITE,CLOSE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_48.985.253313024.txt : CREATE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_48.985.253313024.txt : MODIFY
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_48.985.253313024.txt : OPEN
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_58.985.254394368.txt : CLOSE_WRITE,CLOSE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_58.985.254394368.txt : CREATE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_58.985.254394368.txt : MODIFY
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_58.985.254394368.txt : OPEN
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_41_08.985.255471616.txt : CLOSE_WRITE,CLOSE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_41_08.985.255471616.txt : CREATE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_41_08.985.255471616.txt : MODIFY
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_41_08.985.255471616.txt : OPEN

replica (cockroach-3)

# time inotifywait -mr --format '%w%f : %e' ./cockroach-3/ > INSERT_file_access_cockroach-3
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
^C

real    3m58.410s
user    0m0.068s
sys     0m0.148s

INSERT 時に cockroach-3 がアクセスしているファイル

# sort ./INSERT_file_access_cockroach-3 | uniq -c
     68 ./cockroach-3/ : ACCESS,ISDIR
     52 ./cockroach-3/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/ : OPEN,ISDIR
      1 ./cockroach-3/000368.log : MOVED_FROM
      1 ./cockroach-3/000379.log : CLOSE_WRITE,CLOSE
    567 ./cockroach-3/000379.log : MODIFY
    116 ./cockroach-3/000381.sst : ACCESS
      3 ./cockroach-3/000381.sst : CLOSE_NOWRITE,CLOSE
      1 ./cockroach-3/000381.sst : DELETE
      2 ./cockroach-3/000381.sst : OPEN
   1506 ./cockroach-3/000382.log : MODIFY
      1 ./cockroach-3/000382.log : MOVED_TO
      1 ./cockroach-3/000382.log : OPEN
     80 ./cockroach-3/000383.sst : ACCESS
      2 ./cockroach-3/000383.sst : CLOSE_NOWRITE,CLOSE
      1 ./cockroach-3/000383.sst : CLOSE_WRITE,CLOSE
      1 ./cockroach-3/000383.sst : CREATE
      1 ./cockroach-3/000383.sst : DELETE
     66 ./cockroach-3/000383.sst : MODIFY
      3 ./cockroach-3/000383.sst : OPEN
     15 ./cockroach-3/000384.sst : ACCESS
      1 ./cockroach-3/000384.sst : CLOSE_WRITE,CLOSE
      1 ./cockroach-3/000384.sst : CREATE
    126 ./cockroach-3/000384.sst : MODIFY
      2 ./cockroach-3/000384.sst : OPEN
      2 ./cockroach-3/MANIFEST-000001 : MODIFY
    104 ./cockroach-3/auxiliary : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/1 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/1 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/1 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/1/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/1/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/1/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/10 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/10 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/10 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/10/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/10/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/10/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/11 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/11 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/11 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/11/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/11/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/11/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/12 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/12 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/12 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/12/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/12/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/12/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/13 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/13 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/13 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/13/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/13/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/13/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/14 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/14 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/14 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/14/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/14/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/14/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/15 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/15 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/15 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/15/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/15/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/15/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/16 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/16 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/16 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/16/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/16/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/16/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/17 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/17 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/17 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/17/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/17/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/17/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/18 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/18 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/18 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/18/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/18/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/18/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/19 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/19 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/19 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/19/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/19/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/19/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/2 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/2 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/2 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/2/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/2/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/2/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/20 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/20 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/20 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/20/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/20/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/20/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/21 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/21 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/21 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/21/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/21/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/21/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/22 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/22 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/22 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/22/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/22/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/22/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/23 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/23 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/23 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/23/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/23/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/23/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/24 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/24 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/24 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/24/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/24/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/24/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/25 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/25 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/25 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/25/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/25/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/25/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/26 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/26 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/26 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/26/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/26/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/26/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/27 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/27 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/27 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/27/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/27/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/27/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/28 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/28 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/28 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/28/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/28/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/28/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/29 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/29 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/29 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/29/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/29/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/29/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/3 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/3 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/3 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/3/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/3/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/3/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/30 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/30 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/30 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/30/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/30/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/30/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/31 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/31 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/31 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/31/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/31/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/31/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/32 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/32 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/32 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/32/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/32/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/32/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/33 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/33 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/33 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/33/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/33/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/33/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/34 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/34 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/34 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/34/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/34/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/34/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/35 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/35 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/35 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/35/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/35/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/35/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/36 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/36 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/36 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/36/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/36/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/36/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/4 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/4 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/4 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/4/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/4/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/4/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/5 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/5 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/5 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/5/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/5/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/5/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/6 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/6 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/6 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/6/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/6/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/6/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/7 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/7 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/7 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/7/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/7/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/7/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/8 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/8 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/8 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/8/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/8/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/8/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/9 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/9 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/9 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/9/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/9/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/9/ : OPEN,ISDIR
    104 ./cockroach-3/cockroach-temp395666710 : ACCESS,ISDIR
     52 ./cockroach-3/cockroach-temp395666710 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/cockroach-temp395666710 : OPEN,ISDIR
    104 ./cockroach-3/cockroach-temp395666710/ : ACCESS,ISDIR
     52 ./cockroach-3/cockroach-temp395666710/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/cockroach-temp395666710/ : OPEN,ISDIR
    104 ./cockroach-3/cockroach-temp395666710/auxiliary : ACCESS,ISDIR
     52 ./cockroach-3/cockroach-temp395666710/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/cockroach-temp395666710/auxiliary : OPEN,ISDIR
    104 ./cockroach-3/cockroach-temp395666710/auxiliary/ : ACCESS,ISDIR
     52 ./cockroach-3/cockroach-temp395666710/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/cockroach-temp395666710/auxiliary/ : OPEN,ISDIR
    104 ./cockroach-3/logs : ACCESS,ISDIR
     52 ./cockroach-3/logs : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/logs : OPEN,ISDIR
    104 ./cockroach-3/logs/ : ACCESS,ISDIR
     52 ./cockroach-3/logs/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/logs/ : OPEN,ISDIR
      2 ./cockroach-3/logs/cockroach-pebble.cockroach-3.root.2021-08-28T06_19_12Z.000001.log : MODIFY
     24 ./cockroach-3/logs/cockroach.cockroach-3.root.2021-08-28T06_19_12Z.000001.log : MODIFY
    104 ./cockroach-3/logs/goroutine_dump : ACCESS,ISDIR
     52 ./cockroach-3/logs/goroutine_dump : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/logs/goroutine_dump : OPEN,ISDIR
    104 ./cockroach-3/logs/goroutine_dump/ : ACCESS,ISDIR
     52 ./cockroach-3/logs/goroutine_dump/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/logs/goroutine_dump/ : OPEN,ISDIR
    118 ./cockroach-3/logs/heap_profiler : ACCESS,ISDIR
     59 ./cockroach-3/logs/heap_profiler : CLOSE_NOWRITE,CLOSE,ISDIR
     59 ./cockroach-3/logs/heap_profiler : OPEN,ISDIR
    118 ./cockroach-3/logs/heap_profiler/ : ACCESS,ISDIR
     59 ./cockroach-3/logs/heap_profiler/ : CLOSE_NOWRITE,CLOSE,ISDIR
     59 ./cockroach-3/logs/heap_profiler/ : OPEN,ISDIR
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_30_12.564.245551104.txt : DELETE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_39_32.557.246333440.txt : DELETE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_39_42.557.247955456.txt : DELETE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_39_52.557.248496128.txt : DELETE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_02.558.249307136.txt : DELETE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_12.558.250114048.txt : CLOSE_WRITE,CLOSE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_12.558.250114048.txt : CREATE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_12.558.250114048.txt : DELETE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_12.558.250114048.txt : MODIFY
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_12.558.250114048.txt : OPEN
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_22.558.251195392.txt : CLOSE_WRITE,CLOSE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_22.558.251195392.txt : CREATE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_22.558.251195392.txt : MODIFY
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_22.558.251195392.txt : OPEN
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_32.559.252276736.txt : CLOSE_WRITE,CLOSE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_32.559.252276736.txt : CREATE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_32.559.252276736.txt : MODIFY
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_32.559.252276736.txt : OPEN
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_42.559.253898752.txt : CLOSE_WRITE,CLOSE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_42.559.253898752.txt : CREATE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_42.559.253898752.txt : MODIFY
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_42.559.253898752.txt : OPEN
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_52.558.254980096.txt : CLOSE_WRITE,CLOSE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_52.558.254980096.txt : CREATE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_52.558.254980096.txt : MODIFY
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_52.558.254980096.txt : OPEN
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_41_02.559.255791104.txt : CLOSE_WRITE,CLOSE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_41_02.559.255791104.txt : CREATE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_41_02.559.255791104.txt : MODIFY
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_41_02.559.255791104.txt : OPEN

cockroach-3 での INSERT 時と平常時の差分

# diff -u <(sort ./file_access_cockroach-3 | uniq) <(sort ./INSERT_file_access_cockroach-3 | uniq)
--- /dev/fd/63    2021-08-28 15:49:43.289889149 +0900
+++ /dev/fd/62    2021-08-28 15:49:43.289889149 +0900
@@ -1,7 +1,29 @@
 ./cockroach-3/ : ACCESS,ISDIR
 ./cockroach-3/ : CLOSE_NOWRITE,CLOSE,ISDIR
 ./cockroach-3/ : OPEN,ISDIR
+./cockroach-3/000368.log : MOVED_FROM
+./cockroach-3/000379.log : CLOSE_WRITE,CLOSE
 ./cockroach-3/000379.log : MODIFY
+./cockroach-3/000381.sst : ACCESS
+./cockroach-3/000381.sst : CLOSE_NOWRITE,CLOSE
+./cockroach-3/000381.sst : DELETE
+./cockroach-3/000381.sst : OPEN
+./cockroach-3/000382.log : MODIFY
+./cockroach-3/000382.log : MOVED_TO
+./cockroach-3/000382.log : OPEN
+./cockroach-3/000383.sst : ACCESS
+./cockroach-3/000383.sst : CLOSE_NOWRITE,CLOSE
+./cockroach-3/000383.sst : CLOSE_WRITE,CLOSE
+./cockroach-3/000383.sst : CREATE
+./cockroach-3/000383.sst : DELETE
+./cockroach-3/000383.sst : MODIFY
+./cockroach-3/000383.sst : OPEN
+./cockroach-3/000384.sst : ACCESS
+./cockroach-3/000384.sst : CLOSE_WRITE,CLOSE
+./cockroach-3/000384.sst : CREATE
+./cockroach-3/000384.sst : MODIFY
+./cockroach-3/000384.sst : OPEN
+./cockroach-3/MANIFEST-000001 : MODIFY
 ./cockroach-3/auxiliary : ACCESS,ISDIR
 ./cockroach-3/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR
 ./cockroach-3/auxiliary : OPEN,ISDIR
@@ -248,6 +270,7 @@
 ./cockroach-3/logs/ : ACCESS,ISDIR
 ./cockroach-3/logs/ : CLOSE_NOWRITE,CLOSE,ISDIR
 ./cockroach-3/logs/ : OPEN,ISDIR
+./cockroach-3/logs/cockroach-pebble.cockroach-3.root.2021-08-28T06_19_12Z.000001.log : MODIFY
 ./cockroach-3/logs/cockroach.cockroach-3.root.2021-08-28T06_19_12Z.000001.log : MODIFY
 ./cockroach-3/logs/goroutine_dump : ACCESS,ISDIR
 ./cockroach-3/logs/goroutine_dump : CLOSE_NOWRITE,CLOSE,ISDIR
@@ -261,8 +284,33 @@
 ./cockroach-3/logs/heap_profiler/ : ACCESS,ISDIR
 ./cockroach-3/logs/heap_profiler/ : CLOSE_NOWRITE,CLOSE,ISDIR
 ./cockroach-3/logs/heap_profiler/ : OPEN,ISDIR
-./cockroach-3/logs/heap_profiler/memprof.2021-08-28T06_20_32.541.47427880.pprof : DELETE
-./cockroach-3/logs/heap_profiler/memprof.2021-08-28T06_33_22.550.56282280.pprof : CLOSE_WRITE,CLOSE
-./cockroach-3/logs/heap_profiler/memprof.2021-08-28T06_33_22.550.56282280.pprof : CREATE
-./cockroach-3/logs/heap_profiler/memprof.2021-08-28T06_33_22.550.56282280.pprof : MODIFY
-./cockroach-3/logs/heap_profiler/memprof.2021-08-28T06_33_22.550.56282280.pprof : OPEN
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_30_12.564.245551104.txt : DELETE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_39_32.557.246333440.txt : DELETE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_39_42.557.247955456.txt : DELETE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_39_52.557.248496128.txt : DELETE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_02.558.249307136.txt : DELETE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_12.558.250114048.txt : CLOSE_WRITE,CLOSE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_12.558.250114048.txt : CREATE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_12.558.250114048.txt : DELETE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_12.558.250114048.txt : MODIFY
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_12.558.250114048.txt : OPEN
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_22.558.251195392.txt : CLOSE_WRITE,CLOSE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_22.558.251195392.txt : CREATE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_22.558.251195392.txt : MODIFY
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_22.558.251195392.txt : OPEN
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_32.559.252276736.txt : CLOSE_WRITE,CLOSE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_32.559.252276736.txt : CREATE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_32.559.252276736.txt : MODIFY
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_32.559.252276736.txt : OPEN
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_42.559.253898752.txt : CLOSE_WRITE,CLOSE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_42.559.253898752.txt : CREATE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_42.559.253898752.txt : MODIFY
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_42.559.253898752.txt : OPEN
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_52.558.254980096.txt : CLOSE_WRITE,CLOSE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_52.558.254980096.txt : CREATE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_52.558.254980096.txt : MODIFY
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_52.558.254980096.txt : OPEN
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_41_02.559.255791104.txt : CLOSE_WRITE,CLOSE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_41_02.559.255791104.txt : CREATE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_41_02.559.255791104.txt : MODIFY
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_41_02.559.255791104.txt : OPEN

差分確認

定期的にアクセスされていたファイルと INSERT 時にアクセスされていたファイルを比較し、INSERT 時にのみアクセスされていたファイルを確認してみようと思います。

XXXXXX.log ファイル

拡張子が ".log" になっているファイルは、エラーメッセージ等を保存する「ログファイル」ではなく、 WAL (Write Ahead Log) です。この WAL は、CockroachDB の Storage Engine として利用されている Pebble が出力しているファイルです。

こちらについては起動直後 (INSERT していないタイミング) でも定期的にアクセスが発生していることが確認できていますが、CockroachDB では Raft 関連のデータ (Raft Log) や Web UI (DB Console) で参照できるクラスタのメトリクスの情報も他の TABLE と同じように KV 形式のデータとして Pebble に保存されます。

そのため、ユーザが INSERT/UPDATE/DELETE 等を実行していなくても定期的に WAL への書き込みが発生している状況であり、INSERT の瞬間にアクセスされたことを明確に観測できている訳では無いのですが、CockroachDB は ACID (今回の場合は特に Durability の部分) 準拠の DB であるため、仕組み上 INSERT 時に WAL (XXXXXX.log) ファイルへのアクセス (Write) が発生することは間違いないと思われます。

※strace でも確認してみましたが、どこかのタイミング (他のレコードを INSERT したタイミング?) で openat(2) して掴みっぱなしにしているのか、INSERT 時に WAL を openat(2) している形跡が確認できませんでした...

XXXXXX.sst ファイル

拡張子が ".sst" になっているファイルは、SSTable (Sorted String Table) と呼ばれるファイルです。こちらも、CockroachDB の Storage Engine である Pebble が出力しているものであり、TABLE の実データが含まれている LSM Tree 実装のファイルです。

しかし、何度か検証してみたところ「INSERT の瞬間に SSTable (XXXXXX.sst) にアクセスしている訳ではない」という感じのようです。

Pebble は LSM Tree 実装の KVS であるため、INSERT されたデータは前述した WAL (XXXXXX.log) に書き込まれた上で、メモリ上の memtable に格納されます。そして、memtable が一定のサイズ以上になった場合や、定期的に実行される memtable のフラッシュ処理時に、memtable の内容が SSTable (XXXXXX.sst) にフラッシュされます。

そのため、厳密に言うと SSTable (XXXXXX.sst) は INSERT 時にアクセスされるファイルではありませんが、INSERT した際に memtable のサイズが上限値に達した場合は、SSTable (XXXXXX.sst) へのアクセス (Write) が発生する動作になると思われます。

MANIFEST-000001 ファイル

こいつについては正体がわかりませんでした...

Pebble のログに以下のような出力が有るので、こいつも Pebble 関連のファイルだと思うのですが、INSERT の処理に関連しているのか否かは分かりませんでした...

# grep MANIFEST cockroach-pebble.log
I210828 06:19:03.852876 82 3@vendor/github.com/cockroachdb/pebble/version_set.go:156 ⋮ [n?,pebble,s?] 1  [JOB 1] MANIFEST created 000001
I210828 06:19:03.884580 82 3@vendor/github.com/cockroachdb/pebble/version_set.go:156 ⋮ [n?,pebble,s?] 4  [JOB 1] MANIFEST created 000001

また、このファイルはバイナリデータなのですが、strings や hexdump で中身を覗いてみたところ cockroach_comparator という単語が見えたので、そのあたりをヒントにして別の機会に調べてみようと思います。

# file cockroach-1/MANIFEST-000001 
cockroach-1/MANIFEST-000001: data

# strings MANIFEST-000001 | head -n 1
cockroach_comparator

# hexdump -C MANIFEST-000001 | head -n 2
00000000  bf 13 d7 16 1a 00 01 01  14 63 6f 63 6b 72 6f 61  |.........cockroa|
00000010  63 68 5f 63 6f 6d 70 61  72 61 74 6f 72 03 02 04  |ch_comparator...|

logs/ ディレクトリ配下のファイル

以下の形式で出力されているファイルは TEXT 形式のファイルであり、いわゆる「ログファイル」です。そのため、これらは定常的にアクセスされており、INSERT に直接関連したアクセスではないと思われます。

./cockroach-1/logs/cockroach-pebble.cockroach-1.root.2021-08-28T06_19_03Z.000001.log
./cockroach-1/logs/cockroach.cockroach-1.root.2021-08-28T06_19_03Z.000001.log

ただし、INSERT に伴い memtable のフラッシュや WAL の recycle が発生すると、それらの処理を実行した旨のメッセージがログファイルに出力されるため、INSERT 時にファイルアクセスが発生する可能性もあります。

  • memtable のフラッシュ (SSTable 作成)
I210828 07:56:15.365857 381443 3@vendor/github.com/cockroachdb/pebble/compaction.go:1985 ⋮ [n1,pebble,s1] 92  [JOB 44] flushing: sstable created 000036
I210828 07:56:15.670978 381475 3@vendor/github.com/cockroachdb/pebble/compaction.go:1985 ⋮ [n1,pebble,s1] 95  [JOB 46] compacting: sstable created 000037
  • WAL の作成 (recycled)
I210828 07:56:15.365219 253 3@vendor/github.com/cockroachdb/pebble/db.go:1449 ⋮ [n1,pebble,s1] 90  [JOB 43] WAL created 000035 (recycled 000017)

また、logs/heap_profiler/ 配下のファイルについて詳細は調べられていないのですが、ファイル名にタイムスタンプの情報を含んでいることから、定期的にアクセス (更新) されているファイルのようであり、INSERT の処理には直接関連していなさそうです。

ちなみに、.txt になっているファイルの中身を見ると以下のようになっており、メモリ関連の統計情報を扱っているファイルであるようです。

# head -n 30 memstats.2021-08-28T07_34_25.259.282726400.txt
Go memory stats:
{
  "Alloc": 58207552,
  "TotalAlloc": 8454525400,
  "Sys": 147476488,
  "Lookups": 0,
  "Mallocs": 42250539,
  "Frees": 42004715,
  "HeapAlloc": 58207552,
  "HeapSys": 128581632,
  "HeapIdle": 65052672,
  "HeapInuse": 63528960,
  "HeapReleased": 58875904,
  "HeapObjects": 245824,
  "StackInuse": 5636096,
  "StackSys": 5636096,
  "MSpanInuse": 653616,
  "MSpanSys": 1015808,
  "MCacheInuse": 13888,
  "MCacheSys": 16384,
  "BuckHashSys": 2235814,
  "GCSys": 8726760,
  "OtherSys": 1263994,
  "NextGC": 65079600,
  "LastGC": 1630136045376634882,
  "PauseTotalNs": 39247543,
  "PauseNs": [
    59176,
    88149,
    182033,

おまけ

CockroachDB 起動 (DB 初期化) 直後に作成されているファイルは以下のようになっていました。SSTable (XXXXXX.sst ファイル) は初期状態では存在していないようです。

CockroachDB 起動 (DB 初期化) 直後に作成されているファイル

$ sudo ls -laFR cockroach-1
cockroach-1:
total 360516
drwxr-xr-x 5 root root    4096 Aug 29 10:51 ./
drwxr-xr-x 5 root root    4096 Aug 29 10:50 ../
-rw-r----- 1 root root  147639 Aug 29 10:50 000002.log
-rw-r----- 1 root root  456550 Aug 29 10:50 000004.log
-rw-r----- 1 root root  800183 Aug 29 10:50 000005.log
-rw-r----- 1 root root 1761113 Aug 29 10:51 000006.log
-rw-r----- 1 root root  286878 Aug 29 10:51 000007.log
-rw-r----- 1 root root      16 Aug 29 10:50 CURRENT
-rw-r----- 1 root root       0 Aug 29 10:50 LOCK
-rw-r----- 1 root root      44 Aug 29 10:50 MANIFEST-000001
-rw-r----- 1 root root    2224 Aug 29 10:50 OPTIONS-000003
drwxr-x--- 2 root root    4096 Aug 29 10:50 auxiliary/
drwxr-xr-x 3 root root    4096 Aug 29 10:50 cockroach-temp096599273/
-rw-r----- 1 root root      17 Aug 29 10:50 cockroach.advertise-addr
-rw-r----- 1 root root      17 Aug 29 10:50 cockroach.advertise-sql-addr
-rw-r----- 1 root root      16 Aug 29 10:50 cockroach.http-addr
-rw-r----- 1 root root      10 Aug 29 10:50 cockroach.listen-addr
-rw-r----- 1 root root      10 Aug 29 10:50 cockroach.sql-addr
drwxr-x--- 4 root root    4096 Aug 29 10:50 logs/
-rw-r----- 1 root root      50 Aug 29 10:50 temp-dirs-record.txt

cockroach-1/auxiliary:
total 8
drwxr-x--- 2 root root 4096 Aug 29 10:50 ./
drwxr-xr-x 5 root root 4096 Aug 29 10:51 ../

cockroach-1/cockroach-temp096599273:
total 24
drwxr-xr-x 3 root root 4096 Aug 29 10:50 ./
drwxr-xr-x 5 root root 4096 Aug 29 10:51 ../
-rw-r----- 1 root root    0 Aug 29 10:50 000002.log
-rw-r----- 1 root root   16 Aug 29 10:50 CURRENT
-rw-r----- 1 root root    0 Aug 29 10:50 LOCK
-rw-r----- 1 root root   50 Aug 29 10:50 MANIFEST-000001
-rw-r----- 1 root root 2159 Aug 29 10:50 OPTIONS-000003
-rw-r----- 1 root root    0 Aug 29 10:50 TEMP_DIR.LOCK
drwxr-x--- 2 root root 4096 Aug 29 10:50 auxiliary/

cockroach-1/cockroach-temp096599273/auxiliary:
total 8
drwxr-x--- 2 root root 4096 Aug 29 10:50 ./
drwxr-xr-x 3 root root 4096 Aug 29 10:50 ../

cockroach-1/logs:
total 136
drwxr-x--- 4 root root   4096 Aug 29 10:50 ./
drwxr-xr-x 5 root root   4096 Aug 29 10:51 ../
-rw-r----- 1 root root   2242 Aug 29 10:51 cockroach-pebble.cockroach-1.root.2021-08-29T01_50_45Z.000001.log
lrwxrwxrwx 1 root root     65 Aug 29 10:50 cockroach-pebble.log -> cockroach-pebble.cockroach-1.root.2021-08-29T01_50_45Z.000001.log
-rw-r----- 1 root root    973 Aug 29 10:50 cockroach-stderr.cockroach-1.root.2021-08-29T01_50_45Z.000001.log
lrwxrwxrwx 1 root root     65 Aug 29 10:50 cockroach-stderr.log -> cockroach-stderr.cockroach-1.root.2021-08-29T01_50_45Z.000001.log
-rw-r----- 1 root root 105762 Aug 29 10:51 cockroach.cockroach-1.root.2021-08-29T01_50_45Z.000001.log
lrwxrwxrwx 1 root root     58 Aug 29 10:50 cockroach.log -> cockroach.cockroach-1.root.2021-08-29T01_50_45Z.000001.log
drwxr-x--- 2 root root   4096 Aug 29 10:50 goroutine_dump/
drwxr-x--- 2 root root   4096 Aug 29 10:51 heap_profiler/

cockroach-1/logs/goroutine_dump:
total 8
drwxr-x--- 2 root root 4096 Aug 29 10:50 ./
drwxr-x--- 4 root root 4096 Aug 29 10:50 ../

cockroach-1/logs/heap_profiler:
total 72
drwxr-x--- 2 root root  4096 Aug 29 10:51 ./
drwxr-x--- 4 root root  4096 Aug 29 10:50 ../
-rw-r----- 1 root root 37375 Aug 29 10:50 memprof.2021-08-29T01_50_57.174.37237424.pprof
-rw-r----- 1 root root  9186 Aug 29 10:50 memstats.2021-08-29T01_50_57.184.150753280.txt
-rw-r----- 1 root root  9312 Aug 29 10:51 memstats.2021-08-29T01_51_07.174.175755264.txt

まとめ

CockroachDB に 1レコード INSERT すると...

  • データの永続化のために WAL (XXXXXX.log ファイル) にアクセスする。
  • (INSERT で memtable のサイズが上限を超えると) memtable を永続化するために SSTable (XXXXXX.sst ファイル) にアクセスすると思われる。
  • (詳細は不明だが) MANIFEST-000001 というファイルにアクセスしてるっぽい...?

という感じになってました。

Pebble なんもわからん (´・ω・`)

CockroachDB をスケールインするお話

今回は CockroachDB クラスタをスケールインする方法についてのお話です。スケールイン (クラスタからのノード削除) の方法については、公式ドキュメントの Decommission Nodes にも記載されています。

環境

今回は以下の環境 (Docker を利用したローカルの Insecure クラスタ) で検証しています。

Ubuntu : 19.10
Docker : 19.03.5
CockroachDB : 19.2.5
Container Image : cockroachdb/cockroach

クラスタ構築 (スケールイン前)

まずは以下のような 7匹構成のクラスタ (Insecure クラスタ) を構築します。

$ sudo docker ps
CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS              PORTS                                                  NAMES
a5f098cb2d3c        cockroachdb/cockroach:v19.2.5   "/cockroach/cockroac…"   2 minutes ago       Up 2 minutes        26257/tcp, 127.0.0.1:8087->8080/tcp                    cockroach-7
c59078822378        cockroachdb/cockroach:v19.2.5   "/cockroach/cockroac…"   2 minutes ago       Up 2 minutes        26257/tcp, 127.0.0.1:8086->8080/tcp                    cockroach-6
2b297fe4fe30        cockroachdb/cockroach:v19.2.5   "/cockroach/cockroac…"   3 minutes ago       Up 3 minutes        26257/tcp, 127.0.0.1:8085->8080/tcp                    cockroach-5
41402f232d68        cockroachdb/cockroach:v19.2.5   "/cockroach/cockroac…"   3 minutes ago       Up 3 minutes        26257/tcp, 127.0.0.1:8084->8080/tcp                    cockroach-4
def2c5f6f733        cockroachdb/cockroach:v19.2.5   "/cockroach/cockroac…"   3 minutes ago       Up 3 minutes        26257/tcp, 127.0.0.1:8083->8080/tcp                    cockroach-3
0427c72146e7        cockroachdb/cockroach:v19.2.5   "/cockroach/cockroac…"   3 minutes ago       Up 3 minutes        26257/tcp, 127.0.0.1:8082->8080/tcp                    cockroach-2
dc317ca40cd7        cockroachdb/cockroach:v19.2.5   "/cockroach/cockroac…"   3 minutes ago       Up 3 minutes        127.0.0.1:26257->26257/tcp, 127.0.0.1:8081->8080/tcp   cockroach-1
$ cockroach node status --insecure
  id |      address      |    sql_address    |  build  |            started_at            |            updated_at            | locality | is_available | is_live  
+----+-------------------+-------------------+---------+----------------------------------+----------------------------------+----------+--------------+---------+
   1 | cockroach-1:26257 | cockroach-1:26257 | v19.2.5 | 2020-04-08 01:32:31.00667+00:00  | 2020-04-08 01:36:25.063551+00:00 |          | true         | true     
   2 | cockroach-2:26257 | cockroach-2:26257 | v19.2.5 | 2020-04-08 01:32:37.648252+00:00 | 2020-04-08 01:36:22.680406+00:00 |          | true         | true     
   3 | cockroach-3:26257 | cockroach-3:26257 | v19.2.5 | 2020-04-08 01:32:41.144215+00:00 | 2020-04-08 01:36:21.69463+00:00  |          | true         | true     
   4 | cockroach-4:26257 | cockroach-4:26257 | v19.2.5 | 2020-04-08 01:32:45.0741+00:00   | 2020-04-08 01:36:25.622117+00:00 |          | true         | true     
   5 | cockroach-5:26257 | cockroach-5:26257 | v19.2.5 | 2020-04-08 01:32:48.51479+00:00  | 2020-04-08 01:36:24.568432+00:00 |          | true         | true     
   6 | cockroach-6:26257 | cockroach-6:26257 | v19.2.5 | 2020-04-08 01:32:52.145479+00:00 | 2020-04-08 01:36:23.726916+00:00 |          | true         | true     
   7 | cockroach-7:26257 | cockroach-7:26257 | v19.2.5 | 2020-04-08 01:32:55.55426+00:00  | 2020-04-08 01:36:22.604514+00:00 |          | true         | true     
(7 rows)

クラスタ構築方法の詳細は割愛しますが、Docker を利用したローカルクラスタの構築方法についてはこちらの記事や、こちらのメモをご覧ください。

テストデータ作成

スケールインした際の動作 (データの動き) を確認するために、root ユーザで DB に接続し、テスト用のテーブル (t0, t1, t2) の作成と適当なデータの INSERT を実施しておきます。

$ sudo docker exec -it cockroach-1 ./cockroach sql --host=cockroach-1 --insecure
#
# Welcome to the CockroachDB SQL shell.
# All statements must be terminated by a semicolon.
# To exit, type: \q.
#
# Server version: CockroachDB CCL v19.2.5 (x86_64-unknown-linux-gnu, built 2020/03/16 18:27:12, go1.12.12) (same version as client)
# Cluster ID: 31f31234-d7aa-4ff3-9a40-51498a17bab8
#
# Enter \? for a brief introduction.
#
root@cockroach-1:26257/defaultdb>
root@cockroach-1:26257/defaultdb> CREATE TABLE t0 (id INT PRIMARY KEY, c1 INT, c2 INT, c3 INT);
CREATE TABLE

Time: 69.435726ms

root@cockroach-1:26257/defaultdb>
root@cockroach-1:26257/defaultdb> CREATE TABLE t1 (id INT PRIMARY KEY, c1 INT, c2 INT, c3 INT);
CREATE TABLE

Time: 62.660318ms

root@cockroach-1:26257/defaultdb>
root@cockroach-1:26257/defaultdb> CREATE TABLE t2 (id INT PRIMARY KEY, c1 INT, c2 INT, c3 INT);
CREATE TABLE

Time: 70.644974ms

root@cockroach-1:26257/defaultdb>
root@cockroach-1:26257/defaultdb> INSERT INTO t0 SELECT num, (random() * 100)::int, (random() * 100)::int, (random() * 100)::int FROM generate_series(1,1000000) AS num;
INSERT 1000000

Time: 15.746965716s

root@cockroach-1:26257/defaultdb>
root@cockroach-1:26257/defaultdb> INSERT INTO t1 SELECT num, (random() * 100)::int, (random() * 100)::int, (random() * 100)::int FROM generate_series(1,1000000) AS num;
INSERT 1000000

Time: 20.899031416s

root@cockroach-1:26257/defaultdb>
root@cockroach-1:26257/defaultdb> INSERT INTO t2 SELECT num, (random() * 100)::int, (random() * 100)::int, (random() * 100)::int FROM generate_series(1,1000000) AS num;
INSERT 1000000

Time: 16.953153829s

root@cockroach-1:26257/defaultdb>

テーブル作成後、各テーブル (t0, t1, t2) の Range (Replica) がどのノードに配置されているかを確認します。

root@cockroach-1:26257/defaultdb> SELECT table_name, range_id, replicas FROM crdb_internal.ranges WHERE database_name = 'defaultdb';
  table_name | range_id | replicas  
+------------+----------+----------+
  t0         |       26 | {1,5,6}   
  t0         |       29 | {5,6,7}   
  t0         |       45 | {5,6,7}   
  t1         |       27 | {5,6,7}   
  t1         |       30 | {2,5,7}   
  t1         |       31 | {2,5,7}   
  t2         |       28 | {5,6,7}   
  t2         |       32 | {5,6,7}   
  t2         |       33 | {5,6,7}   
(9 rows)

Time: 4.404418ms

crdb_internal.ranges.replicas の数字は各ノードの ID です。ノード ID は cockroach node status コマンドで確認できます。

$ cockroach node status --insecure
  id |      address      |    sql_address    |  build  |            started_at            |            updated_at            | locality | is_available | is_live  
+----+-------------------+-------------------+---------+----------------------------------+----------------------------------+----------+--------------+---------+
   1 | cockroach-1:26257 | cockroach-1:26257 | v19.2.5 | 2020-04-08 01:32:31.00667+00:00  | 2020-04-08 01:48:16.051763+00:00 |          | true         | true     
   2 | cockroach-2:26257 | cockroach-2:26257 | v19.2.5 | 2020-04-08 01:32:37.648252+00:00 | 2020-04-08 01:48:13.68015+00:00  |          | true         | true     
   3 | cockroach-3:26257 | cockroach-3:26257 | v19.2.5 | 2020-04-08 01:32:41.144215+00:00 | 2020-04-08 01:48:17.201878+00:00 |          | true         | true     
   4 | cockroach-4:26257 | cockroach-4:26257 | v19.2.5 | 2020-04-08 01:32:45.0741+00:00   | 2020-04-08 01:48:16.630182+00:00 |          | true         | true     
   5 | cockroach-5:26257 | cockroach-5:26257 | v19.2.5 | 2020-04-08 01:32:48.51479+00:00  | 2020-04-08 01:48:15.571834+00:00 |          | true         | true     
   6 | cockroach-6:26257 | cockroach-6:26257 | v19.2.5 | 2020-04-08 01:32:52.145479+00:00 | 2020-04-08 01:48:14.726143+00:00 |          | true         | true     
   7 | cockroach-7:26257 | cockroach-7:26257 | v19.2.5 | 2020-04-08 01:32:55.55426+00:00  | 2020-04-08 01:48:13.615297+00:00 |          | true         | true     
(7 rows)

上記結果の場合、各テーブル (t0, t1, t2) のデータは 3つの Range に分割されており、各 Range の Replica (デフォルトだと Range 毎に 3つの Replica が作成される) は以下のように分散されて配置されています。

[t0 のデータ]

Range ID: 26 -> cockroach-1, cockroach-5, cockroach-6
Range ID: 29 -> cockroach-5, cockroach-6, cockroach-7
Range ID: 45 -> cockroach-5, cockroach-6, cockroach-7

[t1 のデータ]

Range ID: 27 -> cockroach-5, cockroach-6, cockroach-7
Range ID: 30 -> cockroach-2, cockroach-5, cockroach-7
Range ID: 31 -> cockroach-2, cockroach-5, cockroach-7

[t2 のデータ]

Range ID: 28 -> cockroach-5, cockroach-6, cockroach-7
Range ID: 32 -> cockroach-5, cockroach-6, cockroach-7
Range ID: 33 -> cockroach-5, cockroach-6, cockroach-7

スケールイン (7匹 -> 6匹)

それでは、CockroachDB をスケールインしてみます。CockroachDB をスケールインする場合は、cockroach quit コマンドに --decommission オプションを付け、--host オプションにスケールイン対象のノードを指定して実行します。

今回は、以下のようなコマンドで cockroach-7 をクラスタから除外してみます。

$ sudo docker exec -it cockroach-1 ./cockroach quit --decommission --host=cockroach-7 --insecure

実際にコマンドを実行すると、指定したノード (cockroach-7) の残り Replica 数が表示され、最終的に replicas 欄の数字が "0" になります。

$ sudo docker exec -it cockroach-1 ./cockroach quit --decommission --host=cockroach-7 --insecure

  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   7 |  true   |       24 |        true        |    false     
(1 row)
.......
  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   7 |  true   |       23 |        true        |    false     
(1 row)
.......
  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   7 |  true   |       22 |        true        |    false     
(1 row)
........
  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   7 |  true   |       20 |        true        |    false     
(1 row)
........
  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   7 |  true   |       19 |        true        |    false     
(1 row)
.....
  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   7 |  true   |       18 |        true        |    false     
(1 row)
..........
  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   7 |  true   |       13 |        true        |    false     
(1 row)
.......
  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   7 |  true   |       12 |        true        |    false     
(1 row)
........
  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   7 |  true   |       11 |        true        |    false     
(1 row)
......
  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   7 |  true   |       10 |        true        |    false     
(1 row)
.........
  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   7 |  true   |        8 |        true        |    false     
(1 row)
.........
  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   7 |  true   |        7 |        true        |    false     
(1 row)
.....
  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   7 |  true   |        6 |        true        |    false     
(1 row)
.........
  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   7 |  true   |        5 |        true        |    false     
(1 row)
........
  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   7 |  true   |        4 |        true        |    false     
(1 row)
........
  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   7 |  true   |        3 |        true        |    false     
(1 row)
..........
  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   7 |  true   |        2 |        true        |    false     
(1 row)
..........
  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   7 |  true   |        1 |        true        |    false     
(1 row)
............
  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   7 |  true   |        0 |        true        |    false     
(1 row)

No more data reported on target nodes. Please verify cluster health before removing the nodes.
ok

最後に "ok" が出力されればスケールイン完了です。cockroach node status コマンドで確認すると、cockroach-7 がクラスタから除外されている (表示されない) ことが確認できます。

$ cockroach node status --insecure
  id |      address      |    sql_address    |  build  |            started_at            |            updated_at            | locality | is_available | is_live  
+----+-------------------+-------------------+---------+----------------------------------+----------------------------------+----------+--------------+---------+
   1 | cockroach-1:26257 | cockroach-1:26257 | v19.2.5 | 2020-04-08 01:32:31.00667+00:00  | 2020-04-08 01:50:22.049631+00:00 |          | true         | true     
   2 | cockroach-2:26257 | cockroach-2:26257 | v19.2.5 | 2020-04-08 01:32:37.648252+00:00 | 2020-04-08 01:50:24.195174+00:00 |          | true         | true     
   3 | cockroach-3:26257 | cockroach-3:26257 | v19.2.5 | 2020-04-08 01:32:41.144215+00:00 | 2020-04-08 01:50:23.201134+00:00 |          | true         | true     
   4 | cockroach-4:26257 | cockroach-4:26257 | v19.2.5 | 2020-04-08 01:32:45.0741+00:00   | 2020-04-08 01:50:22.622891+00:00 |          | true         | true     
   5 | cockroach-5:26257 | cockroach-5:26257 | v19.2.5 | 2020-04-08 01:32:48.51479+00:00  | 2020-04-08 01:50:21.568323+00:00 |          | true         | true     
   6 | cockroach-6:26257 | cockroach-6:26257 | v19.2.5 | 2020-04-08 01:32:52.145479+00:00 | 2020-04-08 01:50:25.221+00:00    |          | true         | true     
(6 rows)

また、Admin (Web) UI から見ると、最初は SUSPECT NODES として cockroach-7 が扱われている (カウントされている) ことが確認できます。

[SUSPECT NODES] 00_after_scale_in

5分ほどすると SUSPECT NODES の数が 1 から 0 になり、ノード一覧で cockroach-7 が "Decommissioned Nodes" 欄に表示されます。

[Decommissioned Nodes] 01_after_5_minutes

スケールイン完了 (6匹構成になっていること) を確認後、改めて先程作成した各テーブルの Rnage (Replica) がどのノードに配置されているかを確認します。

root@cockroach-1:26257/defaultdb> SELECT table_name, range_id, replicas FROM crdb_internal.ranges WHERE database_name = 'defaultdb';
  table_name | range_id | replicas  
+------------+----------+----------+
  t0         |       26 | {1,5,6}   
  t0         |       29 | {4,5,6}   
  t0         |       45 | {3,5,6}   
  t1         |       27 | {3,5,6}   
  t1         |       30 | {2,4,5}   
  t1         |       31 | {2,3,5}   
  t2         |       28 | {1,5,6}   
  t2         |       32 | {1,5,6}   
  t2         |       33 | {4,5,6}   
(9 rows)

Time: 4.471505ms

すると、先程とは Range (Replica) の配置が変わっていることが確認できます。上記結果の場合、各 Range の Replica は以下のように配置されています。スケールイン前と比べて、クラスタから除外した cockroach-7 に格納されていた Replica が他のノードに移動していることが確認できます。

[t0 のデータ]

Range ID: 26 -> cockroach-1, cockroach-5, cockroach-6
Range ID: 29 -> cockroach-4, cockroach-5, cockroach-6
Range ID: 45 -> cockroach-3, cockroach-5, cockroach-6

[t1 のデータ]

Range ID: 27 -> cockroach-3, cockroach-5, cockroach-6
Range ID: 30 -> cockroach-2, cockroach-4, cockroach-5
Range ID: 31 -> cockroach-2, cockroach-3, cockroach-5

[t2 のデータ]

Range ID: 28 -> cockroach-1, cockroach-5, cockroach-6
Range ID: 32 -> cockroach-1, cockroach-5, cockroach-6
Range ID: 33 -> cockroach-4, cockroach-5, cockroach-6

また、Admin UI (Web UI) の Metrics タブ (http://localhost:8081/#/metrics/overview/cluster) を開くと、"Replicas per Node" の項目で各ノードが保持している Replica 数の推移をグラフで見ることができます。

今回のようにスケールインすると、以下のように各ノードが保持している Replica 数が変化していること (cockroach-7 が保持していた replica が他のノードに移動していること) が確認できます。

[Replicas per Node] 02_admin_ui_replicas_per_node

また、表示されているグラフをマウスオーバーすると、各ノードが保持している Replica 数が表示されます。各タイミング (7匹構成, 6匹構成) における各ノードが保持している Replica 数は以下のようになっています。

[7匹構成 (スケールイン前)] 03_before_scale_in

[6匹構成 (スケールイン後)] 04_remove_7th_node

スケールイン前 (7匹構成) は各ノードが 19 ~ 24 の Replica を保持していますが、6匹構成時 (スケールイン後) は各ノードが 24 ~ 26 の Replica を保持しており、1ノードあたりの Replica 数が増加していることが確認できます。

スケールイン (6匹 -> 5匹)

同じように cockroach-6 もクラスタから除外してみます。

$ sudo docker exec -it cockroach-1 ./cockroach quit --decommission --host=cockroach-6 --insecure
$ sudo docker exec -it cockroach-1 ./cockroach quit --decommission --host=cockroach-6 --insecure

  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   6 |  true   |       25 |        true        |    false     
(1 row)
.........
  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   6 |  true   |       23 |        true        |    false     
(1 row)
.......
  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   6 |  true   |       22 |        true        |    false     
(1 row)
....
  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   6 |  true   |       21 |        true        |    false     
(1 row)
...
  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   6 |  true   |       20 |        true        |    false     
(1 row)
........
  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   6 |  true   |       19 |        true        |    false     
(1 row)
.......
  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   6 |  true   |       18 |        true        |    false     
(1 row)
.......
  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   6 |  true   |       17 |        true        |    false     
(1 row)
....
  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   6 |  true   |       15 |        true        |    false     
(1 row)
....
  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   6 |  true   |       14 |        true        |    false     
(1 row)
.........
  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   6 |  true   |       12 |        true        |    false     
(1 row)
..........
  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   6 |  true   |       10 |        true        |    false     
(1 row)
.........
  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   6 |  true   |        6 |        true        |    false     
(1 row)
........
  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   6 |  true   |        5 |        true        |    false     
(1 row)
.........
  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   6 |  true   |        3 |        true        |    false     
(1 row)
......
  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   6 |  true   |        2 |        true        |    false     
(1 row)
......
  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   6 |  true   |        1 |        true        |    false     
(1 row)
...........
  id | is_live | replicas | is_decommissioning | is_draining  
+----+---------+----------+--------------------+-------------+
   6 |  true   |        0 |        true        |    false     
(1 row)

No more data reported on target nodes. Please verify cluster health before removing the nodes.
ok
$ sudo docker exec -it cockroach-1 ./cockroach node status --insecure
  id |      address      |    sql_address    |  build  |            started_at            |            updated_at            | locality | is_available | is_live  
+----+-------------------+-------------------+---------+----------------------------------+----------------------------------+----------+--------------+---------+
   1 | cockroach-1:26257 | cockroach-1:26257 | v19.2.5 | 2020-04-08 01:32:31.00667+00:00  | 2020-04-08 02:00:52.046273+00:00 |          | true         | true     
   2 | cockroach-2:26257 | cockroach-2:26257 | v19.2.5 | 2020-04-08 01:32:37.648252+00:00 | 2020-04-08 02:00:49.703439+00:00 |          | true         | true     
   3 | cockroach-3:26257 | cockroach-3:26257 | v19.2.5 | 2020-04-08 01:32:41.144215+00:00 | 2020-04-08 02:00:53.19274+00:00  |          | true         | true     
   4 | cockroach-4:26257 | cockroach-4:26257 | v19.2.5 | 2020-04-08 01:32:45.0741+00:00   | 2020-04-08 02:00:52.624689+00:00 |          | true         | true     
   5 | cockroach-5:26257 | cockroach-5:26257 | v19.2.5 | 2020-04-08 01:32:48.51479+00:00  | 2020-04-08 02:00:51.564729+00:00 |          | true         | true     
(5 rows)
root@cockroach-1:26257/defaultdb> SELECT table_name, range_id, replicas FROM crdb_internal.ranges WHERE database_name = 'defaultdb';
  table_name | range_id | replicas  
+------------+----------+----------+
  t0         |       26 | {1,2,5}   
  t0         |       29 | {3,4,5}   
  t0         |       45 | {2,3,5}   
  t1         |       27 | {1,3,5}   
  t1         |       30 | {2,4,5}   
  t1         |       31 | {2,3,5}   
  t2         |       28 | {1,3,5}   
  t2         |       32 | {1,4,5}   
  t2         |       33 | {2,4,5}   
(9 rows)

Time: 4.367832ms

[Decommissioned Nodes] 05_after_5_minutes

[Replicas per Node] 06_admin_ui_replicas_per_node

[6匹構成 (スケールイン前)] 07_before_scale_in

[5匹構成 (スケールイン後)] 08_remove_6th_node

上記の通り、6匹目もクラスタから除外することができました。

まとめ

CockroachDB はとてもシンプルな手順でスケールインすることができます。

ただし、以前の記事で紹介したスケールアウトの時と同じように、クラスタから除外するノードが保持していた Replica が他のノードに移動することになるので、スケールイン実施時におけるクラスタ内のネットワーク帯域や各ノードのディスク I/O には注意が必要な雰囲気 (一時的に負荷が上がる可能性がありそう) です。

(メモ) CockroachDB のローカルクラスタを起動するコマンド

CockroachDB のローカルクラスタを構築するコマンドめも。

Insecure クラスタ (Docker 使用)

Docker Network 作成

$ sudo docker network create cockroach-net

ノード (コンテナ) 起動

$ sudo docker run -d \
--name=cockroach-1 \
--hostname=cockroach-1 \
--net=cockroach-net \
-p 26257:26257 -p 8081:8080 \
-v "${PWD}/cockroach-cluster/cockroach-data/cockroach-1:/cockroach/cockroach-data" \
cockroachdb/cockroach:v19.2.5 start \
--insecure \
--join=cockroach-1,cockroach-2,cockroach-3
$ sudo docker run -d \
--name=cockroach-2 \
--hostname=cockroach-2 \
--net=cockroach-net \
-p 8082:8080 \
-v "${PWD}/cockroach-cluster/cockroach-data/cockroach-2:/cockroach/cockroach-data" \
cockroachdb/cockroach:v19.2.5 start \
--insecure \
--join=cockroach-1,cockroach-2,cockroach-3
$ sudo docker run -d \
--name=cockroach-3 \
--hostname=cockroach-3 \
--net=cockroach-net \
-p 8083:8080 \
-v "${PWD}/cockroach-cluster/cockroach-data/cockroach-3:/cockroach/cockroach-data" \
cockroachdb/cockroach:v19.2.5 start \
--insecure \
--join=cockroach-1,cockroach-2,cockroach-3
$ sudo docker run -d \
--name=cockroach-4 \
--hostname=cockroach-4 \
--net=cockroach-net \
-p 8084:8080 \
-v "${PWD}/cockroach-cluster/cockroach-data/cockroach-4:/cockroach/cockroach-data" \
cockroachdb/cockroach:v19.2.5 start \
--insecure \
--join=cockroach-1,cockroach-2,cockroach-3
$ sudo docker run -d \
--name=cockroach-5 \
--hostname=cockroach-5 \
--net=cockroach-net \
-p 8085:8080 \
-v "${PWD}/cockroach-cluster/cockroach-data/cockroach-5:/cockroach/cockroach-data" \
cockroachdb/cockroach:v19.2.5 start \
--insecure \
--join=cockroach-1,cockroach-2,cockroach-3
$ sudo docker run -d \
--name=cockroach-6 \
--hostname=cockroach-6 \
--net=cockroach-net \
-p 8086:8080 \
-v "${PWD}/cockroach-cluster/cockroach-data/cockroach-6:/cockroach/cockroach-data" \
cockroachdb/cockroach:v19.2.5 start \
--insecure \
--join=cockroach-1,cockroach-2,cockroach-3
$ sudo docker run -d \
--name=cockroach-7 \
--hostname=cockroach-7 \
--net=cockroach-net \
-p 8087:8080 \
-v "${PWD}/cockroach-cluster/cockroach-data/cockroach-7:/cockroach/cockroach-data" \
cockroachdb/cockroach:v19.2.5 start \
--insecure \
--join=cockroach-1,cockroach-2,cockroach-3
$ sudo docker run -d \
--name=cockroach-8 \
--hostname=cockroach-8 \
--net=cockroach-net \
-p 8088:8080 \
-v "${PWD}/cockroach-cluster/cockroach-data/cockroach-8:/cockroach/cockroach-data" \
cockroachdb/cockroach:v19.2.5 start \
--insecure \
--join=cockroach-1,cockroach-2,cockroach-3
$ sudo docker run -d \
--name=cockroach-9 \
--hostname=cockroach-9 \
--net=cockroach-net \
-p 8089:8080 \
-v "${PWD}/cockroach-cluster/cockroach-data/cockroach-9:/cockroach/cockroach-data" \
cockroachdb/cockroach:v19.2.5 start \
--insecure \
--join=cockroach-1,cockroach-2,cockroach-3

DB 初期化

$ sudo docker exec -it cockroach-1 ./cockroach init --host=cockroach-1 --insecure

DB アクセス (Built-in SQL Shell)

$ sudo docker exec -it cockroach-1 ./cockroach sql --host=cockroach-1 --insecure

Admin UI (Web UI) アクセス

http://localhost:8081/

Insecure クラスタ削除

$ sudo docker rm $(sudo docker kill cockroach-1 cockroach-2 cockroach-3 cockroach-4 cockroach-5 cockroach-6 cockroach-7 cockroach-8 cockroach-9)
$ sudo docker network rm cockroach-net
$ sudo rm -rf ${PWD}/cockroach-cluster/

Secure クラスタ (Docker 使用)

証明書作成

$ mkdir -p ${PWD}/cockroach-cluster/cockroach-certs
$ mkdir -p ${PWD}/cockroach-cluster/cockroach-certs/certs
$ mkdir -p ${PWD}/cockroach-cluster/cockroach-certs/my-safe-directory
$ for i in `seq 1 9`; do mkdir -p ${PWD}/cockroach-cluster/cockroach-certs/cockroach-${i}; done
$ mkdir -p ${PWD}/cockroach-cluster/cockroach-certs/client-root
$ sudo docker run -it --rm \
--name cockroach-tmp \
--hostname cockroach-tmp \
-v "${PWD}/cockroach-cluster/cockroach-certs:/cockroach/cockroach-certs" \
cockroachdb/cockroach:v19.2.5 \
cert create-ca \
--certs-dir=/cockroach/cockroach-certs/certs \
--ca-key=/cockroach/cockroach-certs/my-safe-directory/ca.key
$ sudo docker run -it --rm \
--name cockroach-tmp \
--hostname cockroach-tmp \
-v "${PWD}/cockroach-cluster/cockroach-certs:/cockroach/cockroach-certs" \
cockroachdb/cockroach:v19.2.5 \
cert create-node \
localhost \
cockroach-1 \
cockroach-2 \
cockroach-3 \
cockroach-4 \
cockroach-5 \
cockroach-6 \
cockroach-7 \
cockroach-8 \
cockroach-9 \
--certs-dir=/cockroach/cockroach-certs/certs \
--ca-key=/cockroach/cockroach-certs/my-safe-directory/ca.key
$ sudo docker run -it --rm \
--name cockroach-tmp \
--hostname cockroach-tmp \
-v "${PWD}/cockroach-cluster/cockroach-certs:/cockroach/cockroach-certs" \
cockroachdb/cockroach:v19.2.5 \
cert create-client \
root \
--certs-dir=/cockroach/cockroach-certs/certs \
--ca-key=/cockroach/cockroach-certs/my-safe-directory/ca.key
$ for i in `seq 1 9`; do sudo cp ${PWD}/cockroach-cluster/cockroach-certs/certs/* ${PWD}/cockroach-cluster/cockroach-certs/cockroach-${i}/; done
$ sudo cp ${PWD}/cockroach-cluster/cockroach-certs/certs/* ${PWD}/cockroach-cluster/cockroach-certs/client-root/

Docker Network 作成

$ sudo docker network create cockroach-net

ノード (コンテナ) 起動

$ sudo docker run -d \
--name=cockroach-1 \
--hostname=cockroach-1 \
--net=cockroach-net \
-p 26257:26257 -p 8081:8080 \
-v "${PWD}/cockroach-cluster/cockroach-data/cockroach-1:/cockroach/cockroach-data" \
-v "${PWD}/cockroach-cluster/cockroach-certs/cockroach-1:/cockroach/certs" \
-v "${PWD}/cockroach-cluster/cockroach-certs/client-root:/cockroach/client-certs" \
cockroachdb/cockroach:v19.2.5 start \
--certs-dir=certs \
--join=cockroach-1,cockroach-2,cockroach-3
$ sudo docker run -d \
--name=cockroach-2 \
--hostname=cockroach-2 \
--net=cockroach-net \
-p 8082:8080 \
-v "${PWD}/cockroach-cluster/cockroach-data/cockroach-2:/cockroach/cockroach-data" \
-v "${PWD}/cockroach-cluster/cockroach-certs/cockroach-2:/cockroach/certs" \
-v "${PWD}/cockroach-cluster/cockroach-certs/client-root:/cockroach/client-certs" \
cockroachdb/cockroach:v19.2.5 start \
--certs-dir=certs \
--join=cockroach-1,cockroach-2,cockroach-3
$ sudo docker run -d \
--name=cockroach-3 \
--hostname=cockroach-3 \
--net=cockroach-net \
-p 8083:8080 \
-v "${PWD}/cockroach-cluster/cockroach-data/cockroach-3:/cockroach/cockroach-data" \
-v "${PWD}/cockroach-cluster/cockroach-certs/cockroach-3:/cockroach/certs" \
-v "${PWD}/cockroach-cluster/cockroach-certs/client-root:/cockroach/client-certs" \
cockroachdb/cockroach:v19.2.5 start \
--certs-dir=certs \
--join=cockroach-1,cockroach-2,cockroach-3
$ sudo docker run -d \
--name=cockroach-4 \
--hostname=cockroach-4 \
--net=cockroach-net \
-p 8084:8080 \
-v "${PWD}/cockroach-cluster/cockroach-data/cockroach-4:/cockroach/cockroach-data" \
-v "${PWD}/cockroach-cluster/cockroach-certs/cockroach-4:/cockroach/certs" \
-v "${PWD}/cockroach-cluster/cockroach-certs/client-root:/cockroach/client-certs" \
cockroachdb/cockroach:v19.2.5 start \
--certs-dir=certs \
--join=cockroach-1,cockroach-2,cockroach-3
$ sudo docker run -d \
--name=cockroach-5 \
--hostname=cockroach-5 \
--net=cockroach-net \
-p 8085:8080 \
-v "${PWD}/cockroach-cluster/cockroach-data/cockroach-5:/cockroach/cockroach-data" \
-v "${PWD}/cockroach-cluster/cockroach-certs/cockroach-5:/cockroach/certs" \
-v "${PWD}/cockroach-cluster/cockroach-certs/client-root:/cockroach/client-certs" \
cockroachdb/cockroach:v19.2.5 start \
--certs-dir=certs \
--join=cockroach-1,cockroach-2,cockroach-3
$ sudo docker run -d \
--name=cockroach-6 \
--hostname=cockroach-6 \
--net=cockroach-net \
-p 8086:8080 \
-v "${PWD}/cockroach-cluster/cockroach-data/cockroach-6:/cockroach/cockroach-data" \
-v "${PWD}/cockroach-cluster/cockroach-certs/cockroach-6:/cockroach/certs" \
-v "${PWD}/cockroach-cluster/cockroach-certs/client-root:/cockroach/client-certs" \
cockroachdb/cockroach:v19.2.5 start \
--certs-dir=certs \
--join=cockroach-1,cockroach-2,cockroach-3
$ sudo docker run -d \
--name=cockroach-7 \
--hostname=cockroach-7 \
--net=cockroach-net \
-p 8087:8080 \
-v "${PWD}/cockroach-cluster/cockroach-data/cockroach-7:/cockroach/cockroach-data" \
-v "${PWD}/cockroach-cluster/cockroach-certs/cockroach-7:/cockroach/certs" \
-v "${PWD}/cockroach-cluster/cockroach-certs/client-root:/cockroach/client-certs" \
cockroachdb/cockroach:v19.2.5 start \
--certs-dir=certs \
--join=cockroach-1,cockroach-2,cockroach-3
$ sudo docker run -d \
--name=cockroach-8 \
--hostname=cockroach-8 \
--net=cockroach-net \
-p 8088:8080 \
-v "${PWD}/cockroach-cluster/cockroach-data/cockroach-8:/cockroach/cockroach-data" \
-v "${PWD}/cockroach-cluster/cockroach-certs/cockroach-8:/cockroach/certs" \
-v "${PWD}/cockroach-cluster/cockroach-certs/client-root:/cockroach/client-certs" \
cockroachdb/cockroach:v19.2.5 start \
--certs-dir=certs \
--join=cockroach-1,cockroach-2,cockroach-3
$ sudo docker run -d \
--name=cockroach-9 \
--hostname=cockroach-9 \
--net=cockroach-net \
-p 8089:8080 \
-v "${PWD}/cockroach-cluster/cockroach-data/cockroach-9:/cockroach/cockroach-data" \
-v "${PWD}/cockroach-cluster/cockroach-certs/cockroach-9:/cockroach/certs" \
-v "${PWD}/cockroach-cluster/cockroach-certs/client-root:/cockroach/client-certs" \
cockroachdb/cockroach:v19.2.5 start \
--certs-dir=certs \
--join=cockroach-1,cockroach-2,cockroach-3

DB 初期化

$ sudo docker exec -it cockroach-1 ./cockroach init --host=cockroach-1 --certs-dir=client-certs

DB アクセス (Built-in SQL Shell)

$ sudo docker exec -it cockroach-1 ./cockroach sql --host=cockroach-1 --certs-dir=client-certs

Admin UI (Web UI) アクセス

$ sudo docker exec -it cockroach-1 ./cockroach sql --host=cockroach-1 --certs-dir=client-certs -e "CREATE USER cockroach PASSWORD 'cockroach'"
https://localhost:8081/

Secure クラスタ削除

$ sudo docker rm $(sudo docker kill cockroach-1 cockroach-2 cockroach-3 cockroach-4 cockroach-5 cockroach-6 cockroach-7 cockroach-8 cockroach-9)
$ sudo docker network rm cockroach-net
$ sudo rm -rf ${PWD}/cockroach-cluster/

小ネタ

cockroach-1 起動 -> cockroach-2 起動 -> cockroach-3 起動 -> ... -> cockroach-N 起動 -> クラスタ初期化 (cockroach init) の順で実行すると、以下のように "ノード名の数字 (cockroach-N)" と "CockroachDB 内部で各ノードに割り当てられる ID" が バラバラ になる (一致しない)。

  id |      address      |    sql_address    |  build  |            started_at            |            updated_at            | locality | is_available | is_live  
+----+-------------------+-------------------+---------+----------------------------------+----------------------------------+----------+--------------+---------+
   1 | cockroach-1:26257 | cockroach-1:26257 | v19.2.5 | 2020-03-12 11:30:57.023256+00:00 | 2020-03-12 11:31:10.625955+00:00 |          | true         | true     
   2 | cockroach-8:26257 | cockroach-8:26257 | v19.2.5 | 2020-03-12 11:30:57.342416+00:00 | 2020-03-12 11:31:10.973333+00:00 |          | true         | true     
   3 | cockroach-9:26257 | cockroach-9:26257 | v19.2.5 | 2020-03-12 11:30:57.612006+00:00 | 2020-03-12 11:31:11.206786+00:00 |          | true         | true     
   4 | cockroach-7:26257 | cockroach-7:26257 | v19.2.5 | 2020-03-12 11:30:57.778118+00:00 | 2020-03-12 11:31:11.400892+00:00 |          | true         | true     
   5 | cockroach-6:26257 | cockroach-6:26257 | v19.2.5 | 2020-03-12 11:30:57.875776+00:00 | 2020-03-12 11:31:11.509177+00:00 |          | true         | true     
   6 | cockroach-3:26257 | cockroach-3:26257 | v19.2.5 | 2020-03-12 11:30:57.908572+00:00 | 2020-03-12 11:31:11.529298+00:00 |          | true         | true     
   7 | cockroach-2:26257 | cockroach-2:26257 | v19.2.5 | 2020-03-12 11:30:58.39514+00:00  | 2020-03-12 11:31:12.033717+00:00 |          | true         | true     
   8 | cockroach-4:26257 | cockroach-4:26257 | v19.2.5 | 2020-03-12 11:30:58.674961+00:00 | 2020-03-12 11:31:12.299762+00:00 |          | true         | true     
   9 | cockroach-5:26257 | cockroach-5:26257 | v19.2.5 | 2020-03-12 11:30:58.84338+00:00  | 2020-03-12 11:31:12.4652+00:00   |          | true         | true     
(9 rows)

cockroach-1 起動 -> クラスタ初期化 (cockroach init) -> cockroach-2 起動 -> cockroach-3 起動 -> ... -> cockroach-N 起動 の順で実行すると、以下のように "ノード名の数字 (cockroach-N)" と "CockroachDB 内部で各ノードに割り当てられる ID" が 一致する

  id |      address      |    sql_address    |  build  |            started_at            |            updated_at            | locality | is_available | is_live  
+----+-------------------+-------------------+---------+----------------------------------+----------------------------------+----------+--------------+---------+
   1 | cockroach-1:26257 | cockroach-1:26257 | v19.2.5 | 2020-03-12 12:04:19.949289+00:00 | 2020-03-12 12:06:39.498269+00:00 |          | true         | true     
   2 | cockroach-2:26257 | cockroach-2:26257 | v19.2.5 | 2020-03-12 12:05:25.179127+00:00 | 2020-03-12 12:06:41.736312+00:00 |          | true         | true     
   3 | cockroach-3:26257 | cockroach-3:26257 | v19.2.5 | 2020-03-12 12:05:32.196454+00:00 | 2020-03-12 12:06:39.756711+00:00 |          | true         | true     
   4 | cockroach-4:26257 | cockroach-4:26257 | v19.2.5 | 2020-03-12 12:05:45.115173+00:00 | 2020-03-12 12:06:39.176477+00:00 |          | true         | true     
   5 | cockroach-5:26257 | cockroach-5:26257 | v19.2.5 | 2020-03-12 12:05:55.636434+00:00 | 2020-03-12 12:06:40.683675+00:00 |          | true         | true     
   6 | cockroach-6:26257 | cockroach-6:26257 | v19.2.5 | 2020-03-12 12:06:03.864341+00:00 | 2020-03-12 12:06:39.948482+00:00 |          | true         | true     
   7 | cockroach-7:26257 | cockroach-7:26257 | v19.2.5 | 2020-03-12 12:06:13.726423+00:00 | 2020-03-12 12:06:40.789314+00:00 |          | true         | true     
   8 | cockroach-8:26257 | cockroach-8:26257 | v19.2.5 | 2020-03-12 12:06:21.316927+00:00 | 2020-03-12 12:06:39.391539+00:00 |          | true         | true     
   9 | cockroach-9:26257 | cockroach-9:26257 | v19.2.5 | 2020-03-12 12:06:29.451055+00:00 | 2020-03-12 12:06:38.502739+00:00 |          | true         | true     
(9 rows)