operator migrate
operator migrate
命令在存储后端之间复制数据,以切换 Vault 配置。它直接在存储级别运行,不涉及解密。目标存储后端中的键将被覆盖,并且在迁移操作完成之前不应初始化目标存储后端。除了迁移期间添加的用作同步锁的键之外,源数据不会被修改。
该操作为了确保数据一致性设计为离线操作,如果迁移正在进行,Vault 将不允许启动服务。
例子
迁移所有键:
$ vault operator migrate -config migrate.hcl
2018-09-20T14:23:23.656-0700 [INFO ] copied key: data/core/seal-config
2018-09-20T14:23:23.657-0700 [INFO ] copied key: data/core/wrapping/jwtkey
2018-09-20T14:23:23.658-0700 [INFO ] copied key: data/logical/fd1bed89-ffc4-d631-00dd-0696c9f930c6/31c8e6d9-2a17-d98f-bdf1-aa868afa1291/archive/metadata
2018-09-20T14:23:23.660-0700 [INFO ] copied key: data/logical/fd1bed89-ffc4-d631-00dd-0696c9f930c6/31c8e6d9-2a17-d98f-bdf1-aa868afa1291/metadata/5kKFZ4YnzgNfy9UcWOzxxzOMpqlp61rYuq6laqpLQDnB3RawKpqi7yBTrawj1P
...
迁移以一致的、有序的顺序完成。如果迁移在完成之前停止或退出(例如,由于与存储后端的连接故障),它可以从任意键前缀恢复:
$ vault operator migrate -config migrate.hcl -start "data/logical/fd"
配置文件
operator migrate
命令使用专用配置文件来指定源和目标存储后端。存储节的格式与用于配置 Vault 的格式相同,唯一的区别是需要两个节:storage_source
和 storage_destination
。
storage_source "mysql" {
username = "user1234"
password = "secret123!"
database = "vault"
}
storage_destination "consul" {
address = "127.0.0.1:8500"
path = "vault"
}
迁移到集成 Raft 存储
以下配置文件将从 Consul 存储迁移到集成 Raft 存储。Raft 数据将存储在服务器本地文件系统中定义的path
的位置上。node_id
来设置节点 ID。cluster_addr
必须设置为该节点的集群主机名。
如果原始后端存储配置的 ha_storage
为“raft”,则需要为 storage_destination
中的 path
和迁移后节点的新配置声明不同的 path
。
storage_source "consul" {
address = "127.0.0.1:8500"
path = "vault"
}
storage_destination "raft" {
path = "/path/to/raft/data"
node_id = "raft_node_1"
}
cluster_addr = "http://127.0.0.1:8201"
运行迁移
Vault 在迁移过程中需要处于离线状态。首先,停止 Vault 服务。然后,在希望设置为新 Vault 节点的服务器上运行迁移。
$ vault operator migrate -config migrate.hcl
2018-09-20T14:23:23.656-0700 [INFO ] copied key: data/core/seal-config
2018-09-20T14:23:23.657-0700 [INFO ] copied key: data/core/wrapping/jwtkey
2018-09-20T14:23:23.658-0700 [INFO ] copied key: data/logical/fd1bed89-ffc4-d631-00dd-0696c9f930c6/31c8e6d9-2a17-d98f-bdf1-aa868afa1291/archive/metadata
2018-09-20T14:23:23.660-0700 [INFO ] copied key: data/logical/fd1bed89-ffc4-d631-00dd-0696c9f930c6/31c8e6d9-2a17-d98f-bdf1-aa868afa1291/metadata/5kKFZ4YnzgNfy9UcWOzxxzOMpqlp61rYuq6laqpLQDnB3RawKpqi7yBTrawj1P
...
迁移完成后,数据将存储在本地文件系统上。要让 Vault 使用新的存储后端,请按照 Raft 存储配置文档中的说明更新 Vault 的配置文件。然后启动并解封 Vault 服务。
添加新节点
迁移后,Raft 集群将只有一个节点。其他节点需要一一加入此集群。
如果集群之前 ha_storage
配置为 "raft" 而启用了高可用,则节点必须在解封之前重新加入迁移后的节点。
可用标志
operator migrate
命令可以使用一下标志:
-config
(string: <required>)
- 迁移配置文件的路径-start
(string: "")
- 迁移的起始键前缀。只有拥有该前缀或是排序其后的键会被拷贝。-reset
- 重置迁移锁。迁移过程中会添加一个迁移锁文件防止在迁移过程中 Vault 服务被启动或是启用另一个迁移过程。如果设置-reset
标志会删除该锁文件(如果它还存在的话)。