我只是在学习terraform,我有一个关于处理数据库服务器的公认方法的问题。假设您有一个数据库服务器。在terraform中对其进行更改需要销毁并重新创建该服务器。如何处理将数据从以前的数据库服务器传输到terraform的新服务器?谢谢您!
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转储数据库,然后在新示例上重新导入它。
create_before_destroy
1条答案
按热度按时间sshcrbum1#
管理国家很难。
根据我的经验,最好的办法是尽可能将这种状态转移到托管服务上,比如amazon的rds。rds允许您就地修改在典型使用模式下要做的大多数事情(增加示例的大小、移动到ha对、升级引擎版本),而根据所执行的操作几乎没有停机时间。
如果您必须管理示例/虚拟机上的状态,那么您将希望以与无状态状态非常不同的方式来处理它们,更短暂的示例,这些示例可以很容易地定期丢弃并替换为另一个示例,前提是您有一些自动化/a服务,允许您维护正常运行时间目标,例如使用蓝/绿部署模式或滚动部署。
使用state,您将需要安全地管理实际的有状态部分,该部分通常是某种形式的磁盘,希望以某种方式连接到网络,并且可以重新连接到不同的示例。
一个非常基本的例子可能如下:
这将创建一个ec2示例和一个单独的ebs卷,该卷将通过terraform连接到该示例。如果示例需要被terraform替换,那么terraform将在卷出现时处理将卷附加到新示例的操作。你也可以把这个和
create_before_destroy
在示例资源上,使terraform替换示例并在销毁旧卷之前重新连接卷。如果您不能像上面那样使用网络连接存储,那么您基本上被迫让terraform转储数据库,然后在新示例上重新导入它。