fix(schema): Improve configuration of the internal DB

This commit is contained in:
k32 2021-10-27 09:27:25 +02:00
parent a074cf24d0
commit deccba3406
2 changed files with 68 additions and 28 deletions

View File

@ -306,14 +306,32 @@ cluster {
## Default: default
namespace = default
}
}
db_backend = mnesia
##==================================================================
## Internal database
##==================================================================
db {
## Database backend
##
## @doc db.backend
## ValueType: mnesia | rlog
## Default: mnesia
backend = mnesia
rlog {
# role: core
# core_nodes: []
}
## RLOG role
##
## @doc db.role
## ValueType: core | replicant
## Default: core
role = core
## Replicant core nodes
##
## @doc db.core_nodes
## ValueType: comma-separated node list
## Default: ""
core_nodes = ""
}
##==================================================================

View File

@ -72,8 +72,7 @@ roots() ->
sc(hoconsc:ref("cluster"),
#{ desc => "EMQ X nodes can form a cluster to scale up the total capacity.<br>"
"Here holds the configs to instruct how individual nodes "
"can discover each other, also the database replication "
"role of this node etc."
"can discover each other."
})}
, {"log",
sc(hoconsc:ref("log"),
@ -101,6 +100,10 @@ natively in the EMQ X node;<br>
'postgresql' etc. to look up clients or rules from external databases;<br>
"""
})}
, {"db",
sc(ref("db"),
#{ desc => "Settings of the embedded database."
})}
] ++
emqx_schema:roots(medium) ++
emqx_schema:roots(low) ++
@ -146,14 +149,6 @@ fields("cluster") ->
, {"k8s",
sc(ref(cluster_k8s),
#{})}
, {"db_backend",
sc(hoconsc:enum([mnesia, rlog]),
#{ mapping => "mria.db_backend"
, default => mnesia
})}
, {"rlog",
sc(ref("rlog"),
#{})}
];
fields(cluster_static) ->
@ -251,19 +246,6 @@ fields(cluster_k8s) ->
})}
];
fields("rlog") ->
[ {"role",
sc(hoconsc:enum([core, replicant]),
#{ mapping => "mria.node_role"
, default => core
})}
, {"core_nodes",
sc(emqx_schema:comma_separated_atoms(),
#{ mapping => "mria.core_nodes"
, default => []
})}
];
fields("node") ->
[ {"name",
sc(string(),
@ -328,6 +310,46 @@ fields("node") ->
)}
];
fields("db") ->
[ {"backend",
sc(hoconsc:enum([mnesia, rlog]),
#{ mapping => "mria.db_backend"
, default => mnesia
, desc => """
Select the backend for the embedded database.<br/>
<strong>Important!</strong> This setting should be the same on all nodes in the cluster.<br/>
<strong>Important!</strong> Changing this setting in the runtime is not allowed.<br/>
<code>mnesia</code> is the default backend, that offers decent performance in small clusters.<br/>
<code>rlog</code> is a new experimantal backend that is suitable for very large clusters.
"""
})}
, {"role",
sc(hoconsc:enum([core, replicant]),
#{ mapping => "mria.node_role"
, default => core
, desc => """
Select a node role.<br/>
<code>core</code> nodes provide durability of the data, and take care of writes.
It is recommended to place core nodes in different racks or different availability zones.<br/>
<code>replicant</code> nodes are ephemeral worker nodes. Removing them from the cluster
doesn't affect database redundancy<br/>
It is recommended to have more replicant nodes than core nodes.<br/>
Note: this parameter only takes effect when the <code>backend</code> is set
to <code>rlog</code>.
"""
})}
, {"core_nodes",
sc(emqx_schema:comma_separated_atoms(),
#{ mapping => "mria.core_nodes"
, default => []
, desc => """
List of core nodes that the replicant will connect to.<br/>
Note: this parameter only takes effect when the <code>backend</code> is set
to <code>rlog</code> and the <code>role</code> is set to <code>replicant</code>.
"""
})}
];
fields("cluster_call") ->
[ {"retry_interval",
sc(emqx_schema:duration(),