Explore Nacos 1.3.0: Embedded DB, New Raft Protocol, and High‑Availability
Nacos 1.3.0 introduces an embedded relational database, unified cluster management, an upgraded Raft consistency layer, security patches, Snowflake ID configuration, data migration guidance, new cluster addressing modes, and a set of Open‑API operations for Raft administration, all aimed at simplicity, performance, and high availability.
Nacos 1.3.0: Simplicity, Performance, High Availability
Embedded relational distributed database to simplify cluster deployment
Unified cluster management with a brand‑new UI
Consistency protocol abstraction upgrade for higher performance
Security upgrades fixing Fastjson and tenant privilege risks
Embedded Relational Distributed Database
Cluster deployment can run without MySQL, reducing operational cost for small‑scale users (large‑scale production still recommends MySQL for higher performance). Start the embedded mode with:
<code>./startup.sh -p embedded</code>Check the startup log for the message:
Nacos started successfully in cluster mode. use embedded storage
The configuration module now provides an Open‑API to query local data storage:
<code>GET /nacos/v1/cs/ops/derby?sql=select * from config_info</code>It is recommended to add pagination to avoid heavy queries; if omitted, Nacos automatically limits the result to the first 1k rows. Example paginated SQL:
<code>select * from config_info OFFSET 0 ROWS FETCH NEXT 1000 ROWS ONLY</code>Sample JSON response:
<code>{
"code":200,
"message":null,
"data":[
{
"ID":242149783664332800,
"DATA_ID":"application.properties",
"GROUP_ID":"DEFAULT_GROUP",
"TENANT_ID":"",
"APP_NAME":"",
"CONTENT":"this.is.test=liaochuntao",
"MD5":"bedbfd7069e999edf2adf9d8a1af3083",
"GMT_CREATE":"2020-06-03T05:30:47.345+0000",
"GMT_MODIFIED":"2020-06-03T05:30:47.345+0000",
"SRC_USER":null,
"SRC_IP":"127.0.0.1",
"TYPE":"properties"
}
]
}</code>Precautions
Distributed ID – Snowflake
Nacos 1.3.0 generates primary keys using the Snowflake algorithm, which requires a DataCenterId and a WorkerId. By default, WorkerId is derived from the local host address; it can be set manually in
application.properties:
<code># set the dataCenterID manually
nacos.core.snowflake.data-center=
# set the WorkerID manually
nacos.core.snowflake.worker-id=
</code>Data Migration
The new embedded storage mode is a brand‑new data model. When upgrading to Nacos 1.3.0 and enabling this mode, you must deploy a fresh Nacos 1.3.0 cluster and migrate data manually via export/import, as automatic one‑click migration from MySQL is not yet supported.
New Cluster Management
New Cluster Management UI
The cluster node management has been unified into the core module, improving the display of node metadata. The UI now shows:
Old Raft metadata from the service discovery module
New Raft metadata used by the configuration module
Metadata of the Nacos node itself
New Cluster Addressing Modes
Users can choose the addressing mode for cluster nodes:
File addressing (default):
nacos.core.member.lookup.type=fileAddress‑service addressing:
nacos.core.member.lookup.type=address-serverNew Consistency Protocol
Nacos 1.3.0 abstracts and sinks the existing consistency layer, integrating the Raft protocol with the configuration module. Adjustable Raft parameters include:
<code># Sets the Raft cluster election timeout, default 5 seconds
nacos.core.protocol.raft.data.election_timeout_ms=5000
# Sets the Raft snapshot interval, default 30 minutes
nacos.core.protocol.raft.data.snapshot_interval_secs=30
# Number of Raft internal worker threads
nacos.core.protocol.raft.data.core_thread_num=8
# Threads for processing Raft business requests
nacos.core.protocol.raft.data.cli_service_thread_num=4
# Raft linear read strategy, default ReadOnlySafe
nacos.core.protocol.raft.data.read_index_type=ReadOnlySafe
# RPC request timeout, default 5 seconds
nacos.core.protocol.raft.data.rpc_request_timeout_ms=5000
</code>The core module also exposes Open‑API endpoints for Raft operations:
Switch Leader of a Raft Group
<code>POST /nacos/v1/core/ops/raft
{
"groupId":"xxx",
"command":"transferLeader",
"value":"ip:{raft_port} or ip:{raft_port},ip:{raft_port},ip:{raft_port}"
}
</code>Reset Raft Group Members
<code>POST /nacos/v1/core/ops/raft
{
"groupId":"xxx",
"command":"resetRaftCluster",
"value":"ip:{raft_port},ip:{raft_port},ip:{raft_port},ip:{raft_port}"
}
</code>This high‑risk operation should only be used when a majority of nodes have crashed and the cluster cannot achieve quorum.
Trigger Snapshot for a Raft Group
<code>POST /nacos/v1/core/ops/raft
{
"groupId":"xxx",
"command":"doSnapshot",
"value":"ip:{raft_port}"
}
</code>Remove a Member from a Raft Group
<code>POST /nacos/v1/core/ops/raft
{
"groupId":"xxx",
"command":"removePeer",
"value":"ip:{raft_port}"
}
</code>Batch Remove Members from a Raft Group
<code>POST /nacos/v1/core/ops/raft
{
"groupId":"xxx",
"command":"removePeers",
"value":"ip:{raft_port},ip:{raft_port},ip:{raft_port},..."
}
</code>Security Upgrades
Fixed Fastjson security vulnerability
Fixed tenant privilege escalation vulnerability
For detailed release notes, visit the official documentation link.
Java Architecture Diary
Committed to sharing original, high‑quality technical articles; no fluff or promotional content.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.