Cha*_*aos 3 mysql database terraform
我刚刚学习 terraform,我对处理数据库服务器的可接受方式有疑问。
假设您有 1 台数据库服务器。在 terraform 中对其进行更改需要销毁并重新创建该服务器。
如何使用 terraform 将数据从以前的数据库服务器传输到新的数据库服务器?
谢谢你!
管理状态很困难。
根据我的经验,最好的办法是尽可能将该状态转移给托管服务,例如 Amazon 的 RDS。然后,RDS 允许您就地修改在典型使用模式中要做的大多数事情(增加实例的大小、移动到 HA 对、升级引擎版本),根据所执行的操作,几乎没有停机时间,甚至没有停机时间。
如果您必须管理实例/虚拟机上的状态,您将希望以与无状态、更短暂的实例非常不同的方式处理这些实例,这些实例可以很容易地定期丢弃并替换为另一个实例,假设您有一些自动化/服务,允许您维持正常运行时间目标,例如使用蓝/绿部署模式或滚动部署。
对于状态,您将需要安全地管理实际的有状态部分,该部分通常是某种形式的磁盘,希望以某种方式通过网络连接,并且可以重新连接到不同的实例。
一个非常基本的示例可能如下所示:
resource "aws_volume_attachment" "database_volume" {
device_name = "/dev/sdh"
volume_id = "${aws_ebs_volume.database.id}"
instance_id = "${aws_instance.database.id}"
}
resource "aws_instance" "database" {
ami = "ami-21f78e11"
availability_zone = "us-west-2a"
instance_type = "t1.micro"
tags {
Name = "Database Server"
}
}
resource "aws_ebs_volume" "database" {
availability_zone = "us-west-2a"
size = 1
lifecycle {
prevent_destroy
}
}
Run Code Online (Sandbox Code Playgroud)
这将创建一个 EC2 实例和一个单独的 EBS 卷,该卷将由 Terraform 附加到该实例。如果实例需要被 Terraform 替换,那么 Terraform 将在新实例出现时将卷附加到新实例。您还可以将其与create_before_destroy实例资源结合起来,使 Terraform 替换实例并在销毁旧卷之前重新附加卷。
如果您无法像上面那样使用网络附加存储,那么您基本上被迫让 Terraform 转储数据库,然后将其重新导入到新实例上。