如何使用terraform管理数据库服务器

eit6fx6z  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(395)

我只是在学习terraform,我有一个关于处理数据库服务器的公认方法的问题。
假设您有一个数据库服务器。在terraform中对其进行更改需要销毁并重新创建该服务器。
如何处理将数据从以前的数据库服务器传输到terraform的新服务器?
谢谢您!

sshcrbum

sshcrbum1#

管理国家很难。
根据我的经验,最好的办法是尽可能将这种状态转移到托管服务上,比如amazon的rds。rds允许您就地修改在典型使用模式下要做的大多数事情(增加示例的大小、移动到ha对、升级引擎版本),而根据所执行的操作几乎没有停机时间。
如果您必须管理示例/虚拟机上的状态,那么您将希望以与无状态状态非常不同的方式来处理它们,更短暂的示例,这些示例可以很容易地定期丢弃并替换为另一个示例,前提是您有一些自动化/a服务,允许您维护正常运行时间目标,例如使用蓝/绿部署模式或滚动部署。
使用state,您将需要安全地管理实际的有状态部分,该部分通常是某种形式的磁盘,希望以某种方式连接到网络,并且可以重新连接到不同的示例。
一个非常基本的例子可能如下:

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
  }
}

这将创建一个ec2示例和一个单独的ebs卷,该卷将通过terraform连接到该示例。如果示例需要被terraform替换,那么terraform将在卷出现时处理将卷附加到新示例的操作。你也可以把这个和 create_before_destroy 在示例资源上,使terraform替换示例并在销毁旧卷之前重新连接卷。
如果您不能像上面那样使用网络连接存储,那么您基本上被迫让terraform转储数据库,然后在新示例上重新导入它。

相关问题