terraformでOpenstackのインスタンス作成を試してみた
ずっと試せていなかったterraformを試してみました。 Openstackの環境はdevstackなりで事前に作成してください。
terraformのインストール
さて、terraformのインストールですがbinary packageが提供されているので、PATHが通っている場所に配置するか自分でPATHを通して使ってください。
terraformの実行
terraformを実行してみます。
[komei@host01 ~]$ terraform usage: terraform [--version] [--help] <command> [<args>] Available commands are: apply Builds or changes infrastructure destroy Destroy Terraform-managed infrastructure get Download and install modules for the configuration graph Create a visual graph of Terraform resources init Initializes Terraform configuration from a module output Read an output from a state file plan Generate and show an execution plan push Upload this Terraform module to Atlas to run refresh Update local state file against real resources remote Configure remote state storage show Inspect Terraform state or plan taint Manually mark a resource for recreation validate Validates the Terraform files version Prints the Terraform version [komei@host01 ~]$ terraform -version Terraform v0.6.12
terraformの設定
一番シンプルな設定方法はmain.tfファイルに設定内容を記載していきます。 terraformにはwasやgapなど様々なresourceが用意されています。Openstackにも以下のように様々な操作対象のresourceが用意されています
- block storage
- compute
- networking
- firewall
- object storage
※ 実際はこの中でさらに細分化されています。
テストインスタンスを作成するサンプル設定です。terraformはterraformの記法で設定を書きます。 ドキュメントを読めばわかりますが、networkとsecurity groupの記載は辞書・リストのように記載しますので注意してください。
resource "openstack_compute_instance_v2" "terraform-test-server" { name = test-server image_id = c35df0ed-f26a8-4s65-abfs8-2c7c1dd3f599 flavor_id = 10 network = { name = "v20" } availability_zone = "nova" key_pair = "komei_key" security_groups = ["accept_tcp22_in", "default"]
変数を扱うことも可能です。
variable "terraform-test-server_name" {} variable "terraform-test-server_image_id" {} variable "terraform-test-server_flavor_id" {} variable "terraform-test-server_key_pair" {} variable "terraform-test-server_availability_zone" {} variable "terraform-test-server_network_name" {} resource "openstack_compute_instance_v2" "terraform-test-server" { name = "${var.terraform-test-server_name}" image_id = "${var.terraform-test-server_image_id}" flavor_id = "${var.terraform-test-server_flavor_id}" network = { name = "${var.terraform-test-server_network_name}" } availability_zone = "${var.terraform-test-server_availability_zone}" key_pair = "${var.terraform-test-server_key_pair}" security_groups = ["accept_tcp22_in", "default"]
変数は以下のように値を代入するのですが、terraform.tfvarsという別ファイルに記載し読み込むことも可能です。
terraform-test-server_name = "test-server" terraform-test-server_image_id = "c35df0ed-f26a8-4s65-abfs8-2c7c1dd3f599" terraform-test-server_flavor_id = "10" terraform-test-server_key_pair = "komei" terraform-test-server_availability_zone = "nova" terraform-test-server_network_name = "v20"
Openstackに必要な環境変数を含めて記載したのが以下です。remote-execを使って起動後にnginxをインストールして起動しています。 tfvarsは適宜設定してください。
[komei@host01 cia-network-terraform]$ more main.tf variable "user_name" {} variable "tenant_name" {} variable "password" {} variable "auth_url" {} variable "terraform-test-server_name" {} variable "terraform-test-server_image_id" {} variable "terraform-test-server_flavor_id" {} variable "terraform-test-server_key_pair" {} variable "terraform-test-server_availability_zone" {} variable "terraform-test-server_network_name" {} variable "terraform-test-server_ssh_key_file" {} # Configure the OpenStack Provider provider "openstack" { user_name = "${var.user_name}" tenant_name = "${var.tenant_name}" password = "${var.password}" auth_url = "${var.auth_url}" } resource "openstack_compute_instance_v2" "terraform-test-server" { name = "${var.terraform-test-server_name}" image_id = "${var.terraform-test-server_image_id}" flavor_id = "${var.terraform-test-server_flavor_id}" network = { name = "${var.terraform-test-server_network_name}" } availability_zone = "${var.terraform-test-server_availability_zone}" key_pair = "${var.terraform-test-server_key_pair}" security_groups = ["accept_tcp22_in", "default"] provisioner "remote-exec" { connection { type = "ssh" user = "centos" key_file = "${var.terraform-test-server_ssh_key_file}" } inline = [ "sudo yum -y install nginx", "sudo service nginx start", "sudo chkconfig nginx on" ] } }
terraformにはdry runもあります。
[komei@host01 ~]$ terraform plan Refreshing Terraform state prior to plan... openstack_compute_instance_v2.terraform-test-server: Refreshing state... (ID: e0e3c21b-7c48-8906-8bae-72bd22219b1a) The Terraform execution plan has been generated and is shown below. Resources are shown in alphabetical order for quick scanning. Green resources will be created (or destroyed and then created if an existing resource exists), yellow resources are being changed in-place, and red resources will be destroyed. Note: You didn't specify an "-out" parameter to save this plan, so when "apply" is called, Terraform can't guarantee this is what will execute. -/+ openstack_compute_instance_v2.terraform-test-server access_ip_v4: "" => "<computed>" access_ip_v6: "" => "<computed>" availability_zone: "" => "nova" flavor_id: "" => "10" flavor_name: "" => "<computed>" image_id: "" => "c35df0ed-f26a8-4s65-abfs8-2c7c1dd3f599" image_name: "" => "<computed>" key_pair: "" => "komei_key" name: "" => "test-server" network.#: "" => "1" network.0.access_network: "" => "0" network.0.fixed_ip_v4: "" => "<computed>" network.0.fixed_ip_v6: "" => "<computed>" network.0.floating_ip: "" => "<computed>" network.0.mac: "" => "<computed>" network.0.name: "" => "v20" network.0.port: "" => "<computed>" network.0.uuid: "" => "<computed>" security_groups.#: "" => "5" security_groups.1326803771: "" => "accept_tcp22_in" security_groups.3814588631: "" => "default" volume.#: "" => "<computed>" Plan: 1 to add, 0 to change, 0 to destroy.
terraformを実行してみます。terraform apply を使用します。
[komei@host01 ~]$ terraform apply openstack_compute_instance_v2.terraform-test-server: Refreshing state... (ID: e0e3c21b-7c48-8906-8bae-72bd22219b1a) openstack_compute_instance_v2.terraform-test-server: Destroying... openstack_compute_instance_v2.terraform-test-server: Creating... access_ip_v4: "" => "<computed>" access_ip_v6: "" => "<computed>" availability_zone: "" => "nova" flavor_id: "" => "10" flavor_name: "" => "<computed>" image_id: "" => "c35df0ed-f26a8-4s65-abfs8-2c7c1dd3f599" image_name: "" => "<computed>" key_pair: "" => "komei_key" name: "" => "test-server" network.#: "" => "1" network.0.access_network: "" => "0" network.0.fixed_ip_v4: "" => "<computed>" network.0.fixed_ip_v6: "" => "<computed>" network.0.floating_ip: "" => "<computed>" network.0.mac: "" => "<computed>" network.0.name: "" => "v20" network.0.port: "" => "<computed>" network.0.uuid: "" => "<computed>" security_groups.#: "" => "5" security_groups.1326803771: "" => "accept_tcp_22" security_groups.3814588631: "" => "default" volume.#: "" => "<computed>" openstack_compute_instance_v2.terraform-test-server: Provisioning with 'remote-exec'... openstack_compute_instance_v2.terraform-test-server (remote-exec): Connecting to remote host via SSH... openstack_compute_instance_v2.terraform-test-server (remote-exec): Host: 192.168.10.11 openstack_compute_instance_v2.terraform-test-server (remote-exec): User: centos openstack_compute_instance_v2.terraform-test-server (remote-exec): Password: false openstack_compute_instance_v2.terraform-test-server (remote-exec): Private key: true openstack_compute_instance_v2.terraform-test-server (remote-exec): SSH Agent: false openstack_compute_instance_v2.terraform-test-server (remote-exec): Connecting to remote host via SSH... openstack_compute_instance_v2.terraform-test-server (remote-exec): Host: 192.168.10.11 openstack_compute_instance_v2.terraform-test-server (remote-exec): User: centos openstack_compute_instance_v2.terraform-test-server (remote-exec): Password: false openstack_compute_instance_v2.terraform-test-server (remote-exec): Private key: true openstack_compute_instance_v2.terraform-test-server (remote-exec): SSH Agent: false openstack_compute_instance_v2.terraform-test-server (remote-exec): Connecting to remote host via SSH... openstack_compute_instance_v2.terraform-test-server (remote-exec): Host: 192.168.10.11 openstack_compute_instance_v2.terraform-test-server (remote-exec): User: centos openstack_compute_instance_v2.terraform-test-server (remote-exec): Password: false openstack_compute_instance_v2.terraform-test-server (remote-exec): Private key: true openstack_compute_instance_v2.terraform-test-server (remote-exec): SSH Agent: false openstack_compute_instance_v2.terraform-test-server (remote-exec): Connecting to remote host via SSH... openstack_compute_instance_v2.terraform-test-server (remote-exec): Host: 192.168.10.11 openstack_compute_instance_v2.terraform-test-server (remote-exec): User: centos openstack_compute_instance_v2.terraform-test-server (remote-exec): Password: false openstack_compute_instance_v2.terraform-test-server (remote-exec): Private key: true openstack_compute_instance_v2.terraform-test-server (remote-exec): SSH Agent: false openstack_compute_instance_v2.terraform-test-server (remote-exec): Connecting to remote host via SSH... openstack_compute_instance_v2.terraform-test-server (remote-exec): Host: 192.168.10.11 openstack_compute_instance_v2.terraform-test-server (remote-exec): User: centos openstack_compute_instance_v2.terraform-test-server (remote-exec): Password: false openstack_compute_instance_v2.terraform-test-server (remote-exec): Private key: true openstack_compute_instance_v2.terraform-test-server (remote-exec): SSH Agent: false openstack_compute_instance_v2.terraform-test-server (remote-exec): Connected! openstack_compute_instance_v2.terraform-test-server (remote-exec): Loaded plugins: fastestmirror openstack_compute_instance_v2.terraform-test-server (remote-exec): base | 3.6 kB 00:00 openstack_compute_instance_v2.terraform-test-server (remote-exec): centos-openstack | 2.9 kB 00:00 openstack_compute_instance_v2.terraform-test-server (remote-exec): epel | 4.3 kB 00:00 openstack_compute_instance_v2.terraform-test-server (remote-exec): extras | 3.4 kB 00:00 openstack_compute_instance_v2.terraform-test-server (remote-exec): updates | 3.4 kB 00:00 openstack_compute_instance_v2.terraform-test-server (remote-exec): (1/3): epel/x86_64 | 498 kB 00:00 openstack_compute_instance_v2.terraform-test-server (remote-exec): (2/3): extras/7/x8 | 101 kB 00:00 openstack_compute_instance_v2.terraform-test-server (remote-exec): (3/3): epel/x86_64 | 3.9 MB 00:00 openstack_compute_instance_v2.terraform-test-server (remote-exec): Loading mirror speeds from cached hostfile openstack_compute_instance_v2.terraform-test-server (remote-exec): Resolving Dependencies openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Running transaction check openstack_compute_instance_v2.terraform-test-server (remote-exec): ---> Package nginx.x86_64 1:1.6.3-8.el7 will be installed openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: nginx-filesystem = 1:1.6.3-8.el7 for package: 1:nginx-1.6.3-8.el7.x86_64 openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: nginx-filesystem for package: 1:nginx-1.6.3-8.el7.x86_64 openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: libxslt.so.1(LIBXML2_1.0.18)(64bit) for package: 1:nginx-1.6.3-8.el7.x86_64 openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: libxslt.so.1(LIBXML2_1.0.11)(64bit) for package: 1:nginx-1.6.3-8.el7.x86_64 openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: gd for package: 1:nginx-1.6.3-8.el7.x86_64 openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: GeoIP for package: 1:nginx-1.6.3-8.el7.x86_64 openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: libxslt.so.1()(64bit) for package: 1:nginx-1.6.3-8.el7.x86_64 openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: libprofiler.so.0()(64bit) for package: 1:nginx-1.6.3-8.el7.x86_64 openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: libgd.so.2()(64bit) for package: 1:nginx-1.6.3-8.el7.x86_64 openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: libexslt.so.0()(64bit) for package: 1:nginx-1.6.3-8.el7.x86_64 openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: libGeoIP.so.1()(64bit) for package: 1:nginx-1.6.3-8.el7.x86_64 openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Running transaction check openstack_compute_instance_v2.terraform-test-server (remote-exec): ---> Package GeoIP.x86_64 0:1.5.0-9.el7 will be installed openstack_compute_instance_v2.terraform-test-server (remote-exec): ---> Package gd.x86_64 0:2.0.35-26.el7 will be installed openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: libpng15.so.15(PNG15_0)(64bit) for package: gd-2.0.35-26.el7.x86_64 openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: libpng15.so.15()(64bit) for package: gd-2.0.35-26.el7.x86_64 openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: libfontconfig.so.1()(64bit) for package: gd-2.0.35-26.el7.x86_64 openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: libXpm.so.4()(64bit) for package: gd-2.0.35-26.el7.x86_64 openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: libX11.so.6()(64bit) for package: gd-2.0.35-26.el7.x86_64 openstack_compute_instance_v2.terraform-test-server (remote-exec): ---> Package gperftools-libs.x86_64 0:2.4-7.el7 will be installed openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: libunwind.so.8()(64bit) for package: gperftools-libs-2.4-7.el7.x86_64 openstack_compute_instance_v2.terraform-test-server (remote-exec): ---> Package libxslt.x86_64 0:1.1.28-5.el7 will be installed openstack_compute_instance_v2.terraform-test-server (remote-exec): ---> Package nginx-filesystem.noarch 1:1.6.3-8.el7 will be installed openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Running transaction check openstack_compute_instance_v2.terraform-test-server (remote-exec): ---> Package fontconfig.x86_64 0:2.10.95-7.el7 will be installed openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: fontpackages-filesystem for package: fontconfig-2.10.95-7.el7.x86_64 openstack_compute_instance_v2.terraform-test-server (remote-exec): ---> Package libX11.x86_64 0:1.6.3-2.el7 will be installed openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: libX11-common >= 1.6.3-2.el7 for package: libX11-1.6.3-2.el7.x86_64 openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: libxcb.so.1()(64bit) for package: libX11-1.6.3-2.el7.x86_64 openstack_compute_instance_v2.terraform-test-server (remote-exec): ---> Package libXpm.x86_64 0:3.5.11-3.el7 will be installed openstack_compute_instance_v2.terraform-test-server (remote-exec): ---> Package libpng.x86_64 2:1.5.13-7.el7_2 will be installed openstack_compute_instance_v2.terraform-test-server (remote-exec): ---> Package libunwind.x86_64 2:1.1-5.el7_2.2 will be installed openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Running transaction check openstack_compute_instance_v2.terraform-test-server (remote-exec): ---> Package fontpackages-filesystem.noarch 0:1.44-8.el7 will be installed openstack_compute_instance_v2.terraform-test-server (remote-exec): ---> Package libX11-common.noarch 0:1.6.3-2.el7 will be installed openstack_compute_instance_v2.terraform-test-server (remote-exec): ---> Package libxcb.x86_64 0:1.11-4.el7 will be installed openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: libXau.so.6()(64bit) for package: libxcb-1.11-4.el7.x86_64 openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Running transaction check openstack_compute_instance_v2.terraform-test-server (remote-exec): ---> Package libXau.x86_64 0:1.0.8-2.1.el7 will be installed openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Finished Dependency Resolution openstack_compute_instance_v2.terraform-test-server (remote-exec): Dependencies Resolved openstack_compute_instance_v2.terraform-test-server (remote-exec): ======================================== openstack_compute_instance_v2.terraform-test-server (remote-exec): Package openstack_compute_instance_v2.terraform-test-server (remote-exec): Arch Version Repository openstack_compute_instance_v2.terraform-test-server (remote-exec): Size openstack_compute_instance_v2.terraform-test-server (remote-exec): ======================================== openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing: openstack_compute_instance_v2.terraform-test-server (remote-exec): nginx x86_64 1:1.6.3-8.el7 epel 508 k openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing for dependencies: openstack_compute_instance_v2.terraform-test-server (remote-exec): GeoIP x86_64 1.5.0-9.el7 base 709 k openstack_compute_instance_v2.terraform-test-server (remote-exec): fontconfig openstack_compute_instance_v2.terraform-test-server (remote-exec): x86_64 2.10.95-7.el7 base 228 k openstack_compute_instance_v2.terraform-test-server (remote-exec): fontpackages-filesystem openstack_compute_instance_v2.terraform-test-server (remote-exec): noarch 1.44-8.el7 base 9.9 k openstack_compute_instance_v2.terraform-test-server (remote-exec): gd x86_64 2.0.35-26.el7 base 146 k openstack_compute_instance_v2.terraform-test-server (remote-exec): gperftools-libs openstack_compute_instance_v2.terraform-test-server (remote-exec): x86_64 2.4-7.el7 base 272 k openstack_compute_instance_v2.terraform-test-server (remote-exec): libX11 x86_64 1.6.3-2.el7 base 605 k openstack_compute_instance_v2.terraform-test-server (remote-exec): libX11-common openstack_compute_instance_v2.terraform-test-server (remote-exec): noarch 1.6.3-2.el7 base 162 k openstack_compute_instance_v2.terraform-test-server (remote-exec): libXau x86_64 1.0.8-2.1.el7 base 29 k openstack_compute_instance_v2.terraform-test-server (remote-exec): libXpm x86_64 3.5.11-3.el7 base 54 k openstack_compute_instance_v2.terraform-test-server (remote-exec): libpng x86_64 2:1.5.13-7.el7_2 openstack_compute_instance_v2.terraform-test-server (remote-exec): updates openstack_compute_instance_v2.terraform-test-server (remote-exec): 213 k openstack_compute_instance_v2.terraform-test-server (remote-exec): libunwind openstack_compute_instance_v2.terraform-test-server (remote-exec): x86_64 2:1.1-5.el7_2.2 openstack_compute_instance_v2.terraform-test-server (remote-exec): updates openstack_compute_instance_v2.terraform-test-server (remote-exec): 56 k openstack_compute_instance_v2.terraform-test-server (remote-exec): libxcb x86_64 1.11-4.el7 base 189 k openstack_compute_instance_v2.terraform-test-server (remote-exec): libxslt openstack_compute_instance_v2.terraform-test-server (remote-exec): x86_64 1.1.28-5.el7 base 242 k openstack_compute_instance_v2.terraform-test-server (remote-exec): nginx-filesystem openstack_compute_instance_v2.terraform-test-server (remote-exec): noarch 1:1.6.3-8.el7 epel 15 k openstack_compute_instance_v2.terraform-test-server (remote-exec): Transaction Summary openstack_compute_instance_v2.terraform-test-server (remote-exec): ======================================== openstack_compute_instance_v2.terraform-test-server (remote-exec): Install 1 Package (+14 Dependent packages) openstack_compute_instance_v2.terraform-test-server (remote-exec): Total download size: 3.4 M openstack_compute_instance_v2.terraform-test-server (remote-exec): Installed size: 10 M openstack_compute_instance_v2.terraform-test-server (remote-exec): Downloading packages: openstack_compute_instance_v2.terraform-test-server (remote-exec): (1/15): fontconfig | 228 kB 00:00 openstack_compute_instance_v2.terraform-test-server (remote-exec): (2/15): GeoIP-1.5. | 709 kB 00:00 openstack_compute_instance_v2.terraform-test-server (remote-exec): (3/15): fontpackag | 9.9 kB 00:00 openstack_compute_instance_v2.terraform-test-server (remote-exec): (4/15): gd-2.0.35- | 146 kB 00:00 openstack_compute_instance_v2.terraform-test-server (remote-exec): (5/15): gperftools | 272 kB 00:00 openstack_compute_instance_v2.terraform-test-server (remote-exec): (6/15): libX11-com | 162 kB 00:00 openstack_compute_instance_v2.terraform-test-server (remote-exec): (7/15): libX11-1.6 | 605 kB 00:00 openstack_compute_instance_v2.terraform-test-server (remote-exec): (8/15): libXau-1.0 | 29 kB 00:00 openstack_compute_instance_v2.terraform-test-server (remote-exec): (9/15): libXpm-3.5 | 54 kB 00:00 openstack_compute_instance_v2.terraform-test-server (remote-exec): (10/15): libxcb-1. | 189 kB 00:00 openstack_compute_instance_v2.terraform-test-server (remote-exec): (11/15): nginx-fil | 15 kB 00:00 openstack_compute_instance_v2.terraform-test-server (remote-exec): (12/15): libpng-1. | 213 kB 00:00 openstack_compute_instance_v2.terraform-test-server (remote-exec): (13/15): libunwind | 56 kB 00:00 openstack_compute_instance_v2.terraform-test-server (remote-exec): (14/15): libxslt-1 | 242 kB 00:00 openstack_compute_instance_v2.terraform-test-server (remote-exec): (15/15): nginx-1.6 | 508 kB 00:00 openstack_compute_instance_v2.terraform-test-server (remote-exec): ---------------------------------------- openstack_compute_instance_v2.terraform-test-server (remote-exec): Total 8.5 MB/s | 3.4 MB 00:00 openstack_compute_instance_v2.terraform-test-server (remote-exec): Running transaction check openstack_compute_instance_v2.terraform-test-server (remote-exec): Running transaction test openstack_compute_instance_v2.terraform-test-server (remote-exec): Transaction test succeeded openstack_compute_instance_v2.terraform-test-server (remote-exec): Running transaction openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : 2:libun [ ] 1/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : 2:libun [#### ] 1/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : 2:libun [####### ] 1/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : 2:libunwind-1.1- 1/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : gperfto [ ] 2/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : gperfto [# ] 2/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : gperfto [## ] 2/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : gperfto [### ] 2/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : gperfto [#### ] 2/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : gperfto [##### ] 2/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : gperfto [###### ] 2/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : gperfto [####### ] 2/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : gperftools-libs- 2/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : fontpac [ ] 3/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : fontpac [# ] 3/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : fontpac [## ] 3/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : fontpac [### ] 3/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : fontpac [##### ] 3/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : fontpac [###### ] 3/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : fontpackages-fil 3/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : fontcon [ ] 4/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : fontcon [# ] 4/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : fontcon [## ] 4/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : fontcon [### ] 4/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : fontcon [#### ] 4/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : fontcon [##### ] 4/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : fontcon [###### ] 4/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : fontcon [####### ] 4/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : fontconfig-2.10. 4/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : 2:libpn [ ] 5/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : 2:libpn [# ] 5/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : 2:libpn [## ] 5/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : 2:libpn [### ] 5/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : 2:libpn [#### ] 5/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : 2:libpn [##### ] 5/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : 2:libpn [###### ] 5/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : 2:libpn [####### ] 5/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : 2:libpng-1.5.13- 5/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : 1:nginx [ ] 6/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : 1:nginx [# ] 6/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : 1:nginx [## ] 6/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : 1:nginx [#### ] 6/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : 1:nginx [##### ] 6/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : 1:nginx [###### ] 6/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : 1:nginx-filesyst 6/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libxslt [ ] 7/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libxslt [# ] 7/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libxslt [## ] 7/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libxslt [### ] 7/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libxslt [#### ] 7/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libxslt [##### ] 7/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libxslt [###### ] 7/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libxslt [####### ] 7/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libxslt-1.1.28-5 7/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libXau- [ ] 8/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libXau- [## ] 8/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libXau- [###### ] 8/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libXau- [####### ] 8/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libXau-1.0.8-2.1 8/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libxcb- [ ] 9/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libxcb- [# ] 9/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libxcb- [## ] 9/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libxcb- [### ] 9/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libxcb- [#### ] 9/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libxcb- [##### ] 9/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libxcb- [###### ] 9/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libxcb- [####### ] 9/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libxcb-1.11-4.el 9/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : GeoIP-1 [ ] 10/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : GeoIP-1 [# ] 10/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : GeoIP-1 [## ] 10/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : GeoIP-1 [### ] 10/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : GeoIP-1 [#### ] 10/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : GeoIP-1 [##### ] 10/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : GeoIP-1 [###### ] 10/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : GeoIP-1 [####### ] 10/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : GeoIP-1.5.0-9.el 10/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libX11- [ ] 11/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libX11- [# ] 11/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libX11- [## ] 11/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libX11- [### ] 11/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libX11- [#### ] 11/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libX11- [##### ] 11/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libX11- [###### ] 11/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libX11- [####### ] 11/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libX11-common-1. 11/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libX11- [ ] 12/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libX11- [# ] 12/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libX11- [## ] 12/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libX11- [### ] 12/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libX11- [#### ] 12/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libX11- [##### ] 12/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libX11- [###### ] 12/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libX11- [####### ] 12/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libX11-1.6.3-2.e 12/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libXpm- [ ] 13/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libXpm- [#### ] 13/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libXpm- [##### ] 13/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libXpm- [####### ] 13/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : libXpm-3.5.11-3. 13/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : gd-2.0. [ ] 14/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : gd-2.0. [# ] 14/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : gd-2.0. [## ] 14/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : gd-2.0. [### ] 14/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : gd-2.0. [#### ] 14/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : gd-2.0. [##### ] 14/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : gd-2.0. [###### ] 14/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : gd-2.0. [####### ] 14/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : gd-2.0.35-26.el7 14/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : 1:nginx [ ] 15/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : 1:nginx [# ] 15/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : 1:nginx [## ] 15/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : 1:nginx [### ] 15/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : 1:nginx [#### ] 15/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : 1:nginx [##### ] 15/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : 1:nginx [###### ] 15/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : 1:nginx [####### ] 15/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing : 1:nginx-1.6.3-8. 15/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Verifying : libX11-common-1. 1/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Verifying : GeoIP-1.5.0-9.el 2/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Verifying : libX11-1.6.3-2.e 3/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Verifying : libXau-1.0.8-2.1 4/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Verifying : libxslt-1.1.28-5 5/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Verifying : libXpm-3.5.11-3. 6/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Verifying : fontconfig-2.10. 7/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Verifying : 1:nginx-1.6.3-8. 8/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Verifying : 1:nginx-filesyst 9/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Verifying : gd-2.0.35-26.el7 10/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Verifying : libxcb-1.11-4.el 11/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Verifying : 2:libpng-1.5.13- 12/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Verifying : gperftools-libs- 13/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Verifying : fontpackages-fil 14/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Verifying : 2:libunwind-1.1- 15/15 openstack_compute_instance_v2.terraform-test-server (remote-exec): Installed: openstack_compute_instance_v2.terraform-test-server (remote-exec): nginx.x86_64 1:1.6.3-8.el7 openstack_compute_instance_v2.terraform-test-server (remote-exec): Dependency Installed: openstack_compute_instance_v2.terraform-test-server (remote-exec): GeoIP.x86_64 0:1.5.0-9.el7 openstack_compute_instance_v2.terraform-test-server (remote-exec): fontconfig.x86_64 0:2.10.95-7.el7 openstack_compute_instance_v2.terraform-test-server (remote-exec): fontpackages-filesystem.noarch 0:1.44-8.el7 openstack_compute_instance_v2.terraform-test-server (remote-exec): gd.x86_64 0:2.0.35-26.el7 openstack_compute_instance_v2.terraform-test-server (remote-exec): gperftools-libs.x86_64 0:2.4-7.el7 openstack_compute_instance_v2.terraform-test-server (remote-exec): libX11.x86_64 0:1.6.3-2.el7 openstack_compute_instance_v2.terraform-test-server (remote-exec): libX11-common.noarch 0:1.6.3-2.el7 openstack_compute_instance_v2.terraform-test-server (remote-exec): libXau.x86_64 0:1.0.8-2.1.el7 openstack_compute_instance_v2.terraform-test-server (remote-exec): libXpm.x86_64 0:3.5.11-3.el7 openstack_compute_instance_v2.terraform-test-server (remote-exec): libpng.x86_64 2:1.5.13-7.el7_2 openstack_compute_instance_v2.terraform-test-server (remote-exec): libunwind.x86_64 2:1.1-5.el7_2.2 openstack_compute_instance_v2.terraform-test-server (remote-exec): libxcb.x86_64 0:1.11-4.el7 openstack_compute_instance_v2.terraform-test-server (remote-exec): libxslt.x86_64 0:1.1.28-5.el7 openstack_compute_instance_v2.terraform-test-server (remote-exec): nginx-filesystem.noarch 1:1.6.3-8.el7 openstack_compute_instance_v2.terraform-test-server (remote-exec): Complete! openstack_compute_instance_v2.terraform-test-server (remote-exec): Redirecting to /bin/systemctl start nginx.service openstack_compute_instance_v2.terraform-test-server (remote-exec): Note: Forwarding request to 'systemctl enable nginx.service'. openstack_compute_instance_v2.terraform-test-server (remote-exec): Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service. openstack_compute_instance_v2.terraform-test-server: Creation complete Apply complete! Resources: 1 added, 0 changed, 0 destroyed. The state of your infrastructure has been saved to the path below. This state is required to modify and destroy your infrastructure, so keep it safe. To inspect the complete state use the `terraform show` command. State path: terraform.tfstate
terraform show コマンドで設定した内容を確認可能です。
[komei@host01 ~]$ terraform show openstack_compute_instance_v2.terraform-test-server: id = 40659bf0-5eb1-455f-b9b0-94b4c7f1a20d access_ip_v4 = 192.168.10.11 access_ip_v6 = availability_zone = nova flavor_id = 10 flavor_name = small image_id = c35df0ed-f26a8-4s65-abfs8-2c7c1dd3f599 image_name = centos-7.2.1511 key_pair = komei_key metadata.# = 0 name = test-server network.# = 1 network.0.access_network = false network.0.fixed_ip_v4 = 192.168.10.11 network.0.fixed_ip_v6 = network.0.floating_ip = network.0.mac = fa:16:3e:94:22:46 network.0.name = v20 network.0.port = network.0.uuid = 3ae4048e-f16d-4590-b25c-fb3ef169b145 security_groups.# = 5 security_groups.13268037741= accept_tcp22_in security_groups.3814588631 = default volume.# = 0
tfstateファイルにも記載があります。このファイルが競合するとやっかいなので今ではS3などにアップして共有する方法があるようです。
[komei@host01 ~]$ more terraform.tfstate { "version": 1, "serial": 10, "modules": [ { "path": [ "root" ], "outputs": {}, "resources": { "openstack_compute_instance_v2.terraform-test-server": { "type": "openstack_compute_instance_v2", "primary": null, "tainted": [ { "id": "e0e3c21b-7c48-8906-8bae-72bd22219b1a", "attributes": { "availability_zone": "nova", "flavor_id": "10", "id": "e0e3c21b-7c48-8906-8bae-72bd22219b1a", "image_id": "c35df0ed-f26a8-4s65-abfs8-2c7c1dd3f599", "key_pair": "komei", "name": "test-server", "network.#": "1", "network.0.access_network": "false", "network.0.fixed_ip_v4": "", "network.0.fixed_ip_v6": "", "network.0.floating_ip": "", "network.0.mac": "", "network.0.name": "v20", "network.0.port": "", "network.0.uuid": "", "security_groups.#": "5", "security_groups.1326803771": "accept_tcp22_in", "security_groups.3814588631": "default", "volume.#": "0" } } ] } } } ] }
nova show で インスタンスを確認すると正しくできているかと思います。 以下の通り削除も可能です。
[komei@host01 ~]$ terraform destroy -force openstack_compute_instance_v2.terraform-test-server: Refreshing state... (ID: 40659bf0-5eb1-455f-b9b0-94b4c7f1a20d) openstack_compute_instance_v2.terraform-test-server: Destroying... openstack_compute_instance_v2.terraform-test-server: Destruction complete Apply complete! Resources: 0 added, 0 changed, 1 destroyed. [komei@host01 ~]$ terraform show [komei@host01 ~]$ more terraform.tfstate { "version": 1, "serial": 13, "modules": [ { "path": [ "root" ], "outputs": {}, "resources": {} } ] }
シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。
DevOpsを支えるHashiCorpツール大全 Think IT Books
- 作者: 前佛雅人
- 出版社/メーカー: インプレス
- 発売日: 2015/10/22
- メディア: Kindle版
- この商品を含むブログを見る
サーバ/インフラエンジニア養成読本 DevOps編 [Infrastructure as Code を実践するノウハウが満載! ] (Software Design plus)
- 作者: 吉羽龍太郎,新原雅司,前田章,馬場俊彰
- 出版社/メーカー: 技術評論社
- 発売日: 2016/02/26
- メディア: 大型本
- この商品を含むブログを見る
Webエンジニアのためのデータベース技術[実践]入門を読んだ
データベース技術[実践]入門
Webエンジニアのための データベース技術[実践]入門 (Software Design plus)
- 作者: 松信嘉範
- 出版社/メーカー: 技術評論社
- 発売日: 2012/03/09
- メディア: 単行本(ソフトカバー)
- 購入: 20人 クリック: 486回
- この商品を含むブログを見る
データベースに関して基礎からトレンドまで懇切丁寧に説明しています。 設定内容だけでなくリレーショナルデータベースの設計をする上で必要な知識がしっかりと身につくオススメ本です。
データベースがないと何が困るのか
インデックスで高速アクセスを実現する
B+Treeインデックス
- ルートブロック、ブランチブロック、リーフブロック
- 二分木と多分木がある
- B-Treeではブランチが値を持つこともある
- B+Treeなら範囲が広いときにもブランチをたどらなくていい
RDBMSではどのように一意性を実現しているのか
- ハッシュインデックスならハッシュ値が一緒になるし、B+Treeなら同じリーフにたどりつく
- つまり重複のチェックが低コスト
- マルチカラムインデックスを使えば、2要素での検索に便利(あらかじめユーザIDと最終ログインのインデックスをつくっておく)
- index only index / covering index インデックスを読んで件数などの処理を完結させる
- 2要素検索ではインデックスをそれぞれ取って何行目が該当したかの結果をAND / ORで処理する
- なるべくディスクにまとめて書きたい。ランダムリードは遅いし。
- MySQL(InnoDB)では別専用ファイルに一時書き込みしてDB領域にまとめて書くことで実現
- 複数クライアントからの処理でリーフ分割が大量に発生した場合、パーティション表などの仕組みが解決する
- 内部的には分割されていてインデックスも別。でもユーザからは表が一つに見える。
- 参照;http://liginc.co.jp/programmer/archives/3832
テーブル設計とリレーション
- 主キー
- テーブルを分割する(社員番号をキーとした名簿本体と部門をキーとした電話番号表)
- テーブルを跨いで入力キーの誤りを確認
- キーは10で割った余りが一桁目の数字に一致するなどの法則をもたせて誤りを検知する
- 部門に複数所属する際にどうするか。サブを作る?
- 何個まで作ればいいのか、NULLばっかりが格納されるためにそんなに列を作るの?
- 一列に複数入れる場合は整数ではなくなるし
- 正規形の話
SQL分の特徴とその使いこなし方
- MySQLでテーブルを操作してみよう
- CREATE TABLE, INTEGER, VARCHAR, PRIMARY KEY
- データベース製品間の互換性は難しい。データ型の名前やサポートしているものの違い
- 標準化にこだわるよりパフォーマンスを重視すべし。無理にしてCHAR型にしてバイトを増やすとかどうなの
- 列の定義変更やインデックスの追加削除などは後から困難なので最初にしっかり設計すること
- SELECTは負荷をかけない効率的な条件をうまく使うこと。全文検索などデータベースが重くなる原因になる。
- WHEREがないUPDATEは全スキャンが走るので注意
- TRUNCATEを使えばレコードを0にできる。定義情報は残す
- DROP TABLEで定義情報を消す
- 3個のSELECT分を打つよりもAND条件を使って1文で書いた方がよい。いわゆるジョインDB側で効率のよいアクセスをしてくれる
- シャーディング(テーブルを複数のサーバに分割)しているとサーバ跨いだジョインができないのでアプリケーション側と設計をすりあわせる必要あり
- データリンク機能とか持っているDBもある
- EXPLAINを使うとクエリを流す前に効率性を検証できる
- とくにrowsに注目し、各テーブルで1が出ていればインデックスを用いた効率の良いアクセスとなる
- ビジネスロジックはストアプロシージャーで実装する。が、最近はやらない。昔はクエリをまとめたりで活躍。純粋にメールを送出するなのどのロジックはもはやアプリケーションでいいでしょという発想
トランザクション、整合性、耐障害性
- 一つのSQL分で一つのユーザ処理が終わることはほんとんどない
- 商品を買うだけでもitem / user_item / user / purchase_histrory
- コミットとロールバック
- 一つのSQL文の場合でも同様にコミットをしておくと、長い処理の途中で止まった時にロールバックができる
- REDOログ。クラッシュリカバリ。MyISAMはない(?)
- REDOはシーケンシャルライトだから負担が少ない
- NoSQLはトランザクションの概念をほぼ持っていない。アプリケーションロジックで対応しないといけない。
- ロックして排他制御
- InnoDBはレコード単位でロック。MyISAMはテーブル単位
- スレーブはレプリケーションをどこまで実行したかslave_relay_log_infoに記述する
レプリケーション
- 片方向/非同期の話
- バイナリログの受信(I/Oスレッド)と実行(SQLスレッド)
- どちらの遅延なのかで障碍時のインパクトは違う
- 片方向/準同期の話
- 受信を同期にする
- 片方向で言えることはスレーブが単一スレッドになる
- 双方向レプリケーション
- クラスタ、バックアップとポイントインタイムリカバリの話
ストレージ技術の変革とデータベースへの影響
- スペックがあがると同時に1台の処理要求があがる。1coreでの処理負担も増える
- バッチとかレプリケーションの負担があがる
- SATA SSD -> PCI Express SSD
- クリティカルセクション(1スレッドアクセスになるよう排他制御する処理区間)の改善
- MySQL5.1以降でI/Oの並列性が大幅に向上
- MySQLO5.5以降でパージ処理(物理的に削除する処理)とチェックポイントなどのバックグラウンド処理を並列化して処理できるように
- レプリケーションの処理はこれから
- Tx/Rx Multi QueueがRed Hat EnterpriseLinux6以降で実装
データベース運用の勘所
- CPU使用率
- ディスクI/O(%iowait)
- システム空間での使用率(%system)
- ユーザ空間での使用率(%user)
ストール
- 1秒間隔のSQLコマンド実行数の監視が必要
- その1秒のために増強するのはスペック的に厳しい
- gdbなどのデバッガを用いてプロセスのスタックトレースをとる
- 例として新規接続のスレッド生成のためのcloneに時間がかかってるなら、接続を貼りっぱなしにすればいい
MySQL 導入のポイント
ストレージエンジン
- クライアントからの接続を受け付けて専用のスレッドを割り当て
- キャッシュにヒットすればクエリキャッシュから返す
- キャッシュにヒットしない場合は構文解析(パース)処理をする
- SQL文の実行計画、インデックスの利用可否、ジョインの際にどのテーブルを使うか
- ストレージエンジンはテーブル単位で選択できる
- ACID特性
- Atomicity(全部コミットされるかロールバックされるか)
- Consistency(複数テーブルにまたがっている場合でもエラーで片側が更新されることはない)
- Isolation(参照・更新が競合した場合でも矛盾した状態にならないように排他制御が可能)
- Durability(コミットした結果は確実に保存され電源断が起きても復旧が可能)
- テーブル.frmにメタ情報が格納される。5.1からは日本語名も。
- エラーログ、スロークエリログ、バイナリログ
- log-bin, slow-query-log, long-query-log
- max_connection
- innodb_buffer_file_size
- innodb_flush_method, O_DIRECT
- innodb_data_file_path, auto extend
バックアップとリカバリ
- コールドバックアップ、オンランバックアップ
- データベースファイル、バイナリファイル、設定ファイル
- 論理バックアップと物理バックアップ
- 論理バックアップはSQL文形式で人間が読める状態でバックアップされる。mysqldumpを使用
- MyISAMをInnoDBに変換することも可能
- 論理バックアップは時間がかかるがデータサイズも少なく圧縮効率が非常によい。
- 物理バックアップはディスク側の機能を使うのがよい
- リカバリはバックアップ+バイナリログ
コールドバックアップ
$ mysqladmin shutdown -uroot $ cp -rp /var/lib/mysql /backup/ $ mysafe_safe&
バイナリログによるリカバリ
$ mysqlbinlog hostname.000011 > recover.sql $ mysql -uroot < recover.sql
- ステートメントベースと行ベースがある
- ステートメントベースだとSQL文そのままなのでランダムな数値が入るようなUUID()などの関数が入っている場合に値がおかしくなる
- 5.1以降は行ベースが可能になっている
- mysqldump -uroot —lock-all-tables —master-data=2 > dump.sql
- dump.sqlの中にバイナリファイルのどこまで書き込まれているか記載するようにオプションで指定
- InnoDBの場合、全体のスナップショットを取る時だけロックしてバックアップする方法がとれる(--single-transaction)
- FLUSH TABLE WITH READ LOCKが走るので重いクエリで待ち時間が発生しないように注意する
- 不要なバイナリログはPUARGE MASTER LOGS TO ‘hostname.000042'
- 物理バックアップの場合はテーブルロックしてsyncコマンドでディスクに書き出してロック解除する
データベース技術の現在と未来
- レンジパーティションイング
- テーブルやインデックスを物理的に1個でまとめて管理する
- 特定のパーティションに入れて連続的にメモリに乗せる
- twitterのようなサービスでは1週間や1ヶ月分単位でパーティンションを切る
- TokuDBではFractal Treeというインデックスを持っていてレンジパーティションイング不要で性能を維持できる
その他
- DELETE後はOPTIMIZE TABLEで再編成
- できなかったとしてINSERTの時の再利用を考えてDELTEは推奨
- DELETE時のスレーブ遅延を防ぐには、スレーブ側に対象をSELECTしておくとよい
- MySQL5.5以降で「change buffering」が実装。DELETE時のインデックス論理削除はバックグラウンドで。
- 秒間のupdate回数はCom_update, 内部レコードの更新回数はInnodb_rows_updated
- スレーブがどれくらい書き込めるかは、一度レプリを止めて再開して秒間の更新を見る
- Thread_runningで並列度が取れる。SHOW GLOBAL_STATUSクエリを実行している分もカウントされている
- マスタの場合、BINLOG_DUMPもカウントされている
- Event Schedulerを使用している場合はカウントされている
- vmstat/sarではMySQLが待ち状態のストールになっていても加算されない
- スロークエリログ、SHOW FULL PROCESSLIST
- tcpdumpやすべてのクエリをスローログに出してmk-query-degitで解析する
- SET GLOBAL long_query_time=0
- 1+N型はINを使って1+1型へ
- クエリは軽いがトランザクションのロック時間が長いものをどう見つけるか
- SHOW ENGINE INNODB STATUSを見れば長く待たされているトランザクションが、長く実行されているトランザクションがわかる
- MySlowTranCaptureを使えば楽にトランザクションと該当クエリの特定が可能
- innnodb_lock_wait_timeoutはデフォルト50秒。長い。
- コネクションプーリングで外部とのTCP/IP接続は済ませておくこと
- サーバをまたいだデッドロックには注意。innodbは同一サーバ内の自動検出
- ユーザA->ユーザBの順に昇順にロックを統一するなど
シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。
Webエンジニアのための データベース技術[実践]入門 (Software Design plus)
- 作者: 松信嘉範
- 出版社/メーカー: 技術評論社
- 発売日: 2012/03/09
- メディア: 単行本(ソフトカバー)
- 購入: 20人 クリック: 486回
- この商品を含むブログを見る
理論から学ぶデータベース実践入門 ~リレーショナルモデルによる効率的なSQL (WEB+DB PRESS plus)
- 作者: 奥野幹也
- 出版社/メーカー: 技術評論社
- 発売日: 2015/03/10
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (16件) を見る
GCPUG Tokyo February 2016に参加してきた
GCPUG Tokyo February 2016
2016/02/12(金) 19:00 〜 22:00
殴り書きなので記載ミスがあったらすいません。。
Compute Engine リソース概要
- Local SSD
- I/O重視したい人向け
- snapshotは取れない
live migration対応した?(レプリカ作ったりするのは自分で?)
custom script
- start / shutdown
shutdownは待ってくれないので注意。ベストエフォート
Network Load Balancer
- TCP/IP Lv LoadBalancing
- Regionに所属する
- Forwarding Rule(region)
- Target Pool(instance / instance group)
- Backup poolできる。ただしホットスタンバイ
セッションアフィニティ対応
HTTP/HTTPS Load Balancer
- Global
- GCPのアンドロメダ上にいる(?)
- Forwarding Rule -> Target Policy -> URL Map(URLごとの向き先制御) -> Backend Service(instance group)
muliti region対応
instance group
- instance template
- auto scaler or manual
zone base
unmanaged instance group
- templateではなく任意のinstanceを任意で追加する
zone base
metadata
- key value
- instance wide
- project wide
- projectはまたげない
HTTPロードバランサの運用例
- マナボでandroid技術者
- AWSからコスト面うんぬんで乗り換えた
Network Loadbalancer
HTTP(S) Load Balancer
- GAになった
- SSL Terminationできる
- リージョンまたげる
- proxinityのLB
アドベントカレンダーでAWSユーザが15分でGCP入門を書いた
作ってみる
- ファイアウォールルール
- tag
- 複数リージョンで作成
- ヘルスチェックも作成
- 外部IPアドレス確保(typeはグローバルにしましょう)
- グローバル転送ルールは80/443で二つ作成
- バックエンドサービス
- 分散モード (CPU使用率/リクエスト数)で閾値を決めることが可能
バックエンドは複数追加しないとFailoverしない
Tips
- ファイアウォールをよりセキュアに
- LBからの通信のみ許可した方がいいよね
- そもそもインスタンスのexternal IPを取りましょう
メンテナンスの時はiptablesで止めるとかも
auto scale
- インスタンステンプレートを作るのが面倒
- スナップショットが楽
- スナップショット作ったらそれを元にしてインスタンステンプレートを作る
GCE構築例
- Glanysの代表の人
- MSP事業、システム設計・構築。運用保守
- Googleのテクニカルパートナー
- インフラエンジニア
GCE初期から触ってます
2年前ソーシャルゲームで画面タッチアクションゲーム
- web socket
- 当時mariaDB。最近はperconaつかってます
- 当時HA proxyでやってた
- consulというクラスタしながら監視してapiでその状態を拾えるやつを使ってた
健全なweb serverを
事例
- ハグカムのGLOBAL CROWN(英会話のWEBレッスン)
- webRTCを利用したリアルタイム動画対話型システム
バックエンドはHA Proxyでハンドリング
ピアラのresult master
- perconaを使う予定
絶賛設計中
capy 法人向け不正ログイン対策
- caputureが最近はOCRで解析される
- パズルを当てるような仕様に
- 12月くらいすごい拡大
- 300万クエリをperconaが受けてる
- rabbitmq
- cloudstorageの使い方が特殊
Elastic Search 8GB〜150GB。様々なレイヤーのエラーログをkibanaで。auto scaleはしていない。
ゲーム系
- photon?ゲームエンジン
- metadata活用している
ゲームサーバ起動時にmetadataからconfigにglobal ipを拾っている
teraform大好き
Base image
- baseはcentos
- 必要ミドルウェアは/usr/local配下にビルド
ソースはtarballとともに保管
consul
- cluster情報
監視
serf
将来的に廃止
terraform
- instance生成
- disk attach
- firewall設定
LB設定
rerun
- bashのcommand line framewark
チームでコマンド体系化が行えて便利
envutils
環境変数コントロール
clutils
consul/serfの自動設定
clctl
influxdb / grafana
時系列データベース
gmonitor
- influxdbに直接データを書き込める
リソース監視、通信、ミドルウェアのステータス取得
strecherのGCS版
- GCSを利用した大規模向けデプロイツール
AWS界隈ならS3で情報ひっかかるかも
slack / pagerduty / twilio / bitbucket ...etc
GAE + GCEの運用事例
- Google Developer Expert Apps Script
- フルスタックエンジニアやってます
- kabukuで働いている
- rinkak(GCE)
- 3Dプリントプロダクトのマーケットプレイス
- rinkak MMS(App engine / GCE)
- 工場側に導入して決済やったり見積もりしたり
rinkak backend(GCE / EC2)
サーバサイド
- python(FLASK)
- クライアント再度
- angularJS
- Cofee Script
Bootstrap
GCE側にデータ持っていない
- datastoreに直接アクセスしない(Appengineを必ず通す)
Front serverにアクセスしたユーザからAjaxで直接アクセス
なぜGAE + GCE??
- 独自ドメインで運用したい場合がある
- GAEだとGAE独自ドメイン + SSL
Google Apps for workの契約が必要
GCEでやるしかない
GCEの構成を深堀り
- L4LB
- websocketを使う可能性があるから
- 開始当時はHTTP LBのSSLがα版だった
- ターゲットプールでブルーグリーン
- マルチAZ
- webサーバはnginx
- appサーバはflask + usgi
- instanceテンプレートは更新負荷
startup-scriptはmetadataサーバに直接書かないことをおすすめ(instance templateに書き込むと・・・)
nginx
- 静的配信、SSL解き、ルーティング
GAEの -dot-バジージョン番号でアクセス
app(docker)
- バージョンごとにDocker Imageがいる
バージョン番号はpackage.json+ブランチ名
Docker Image
- BitbucketにコードをプッシュするとJenkinsが自動Build
GCRにバージョン番号付きでpush
wacher
- metadataサーバにwait-for-changeリクエストを使って監視
metadataサーバに入っているバージョン番号を見てDocker imageをrun
Google Cloud Storage
- GAEで権限チェックとSigned URL化
Cloud logging
- 基本はjson形式で
PubSubにも入れている
今後とまとめ
- 多くのweb Frontはパターン化されている
- GASよく落ちる
- AWSのクラウドデザパタは読むべし
GCEをTerraformする
- Terraformってなに?
- vagrantの会社が2014/7から
Cloud Formationみたいなもの
リソースの数だけIaaSを操作できる。
- googleも35個ある
- ドライランある
- 冪等性とドライラン弱い
Google Compute Engine入門 (アスキー書籍)
- 作者: 吉積情報株式会社吉積礼敏
- 出版社/メーカー: KADOKAWA / アスキー・メディアワークス
- 発売日: 2014/07/31
- メディア: Kindle版
- この商品を含むブログ (2件) を見る
Amazon Web Services クラウドデザインパターン実装ガイド 改訂版
- 作者: 大澤文孝,アマゾンデータサービスジャパン玉川憲,アマゾンデータサービスジャパン片山暁雄,アイレット鈴木宏康,日経SYSTEMS
- 出版社/メーカー: 日経BP社
- 発売日: 2015/03/05
- メディア: 単行本
- この商品を含むブログ (2件) を見る
シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。
- 作者: 平初,森若和雄,鶴野龍一郎,まえだこうへい
- 出版社/メーカー: 翔泳社
- 発売日: 2010/07/08
- メディア: 大型本
- 購入: 5人 クリック: 227回
- この商品を含むブログ (15件) を見る
KVM -- Virtualisierung unter Linux. (German Edition)
- 作者: Michael Kofler
- 出版社/メーカー: ebooks.kofler
- 発売日: 2011/02/15
- メディア: Kindle版
- この商品を含むブログを見る
KVMで仮想マシンをクローンをする方法
検証環境で何台かマシンが必要な時など使えないと不便ですよね。KVMでも簡単にcloneできます。 結構忘れて毎回調べるのでメモしておきます。
KVMで仮装マシンをクローンする方法
以下、centos7_2からcentos7_4を作成する手順です。
事前準備
クローン元の仮想マシンをshutdownしておいてください。
[root@hostserver ~]# virsh list --all Id 名前 状態 ---------------------------------------------------- - centos7 シャットオフ
virt-cloneの使い方
virt-cloneを使用します。仮装ディスクはあらかじめ作成しておく必要ありません。
[root@hostserver ~]# virt-clone --original centos7 --name centos7_2 --file /var/lib/libvirt/images/testvm2.img --check path_exists=off 割り当て中 'testvm2.img' | 5.0 GB 00:00:00 'centos7_2'のクローニングに成功しました。
centos7_2ができています。
[root@hostserver ~]# virsh list --all Id 名前 状態 ---------------------------------------------------- - centos7 シャットオフ - centos7_2 シャットオフ
virt-clone後にopening backend "socket" failedが出た場合
virt-clone後に仮想マシンの起動すると以下の通り失敗してしまいます。 その場合はvirus editでchannelの設定を修正します。
[root@hostserver ~]# virsh start centos7_2 エラー: ドメイン centos7_2 の起動に失敗しました エラー: 内部エラー: モニターに接続中にプロセスが終了しました: 2016-01-16T10:33:21.477810Z qemu-kvm: -chardev socket,id=charchannel0,path=/var/lib/libvirt/qemu/channel/target/domain-centos7/org.qemu.guest_agent.0,server,nowait: Failed to bind socket: No such file or directory 2016-01-16T10:33:21.477952Z qemu-kvm: -chardev socket,id=charchannel0,path=/var/lib/libvirt/qemu/channel/target/domain-centos7/org.qemu.guest_agent.0,server,nowait: chardev: opening backend "socket" failed
[root@hostserver ~]# virsh edit centos7 ドメイン centos7 XML の設定は編集されました <channel type='unix'> <source mode='bind' path='/var/lib/libvirt/qemu/channel/target/domain-centos7_2/org.qemu.guest_agent.0'/> <target type='virtio' name='org.qemu.guest_agent.0'/> <address type='virtio-serial' controller='0' bus='0' port='1'/> </channel> [root@hostserver ~]# virsh start centos7 ドメイン centos7 が起動されました
シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。
- 作者: 平初,森若和雄,鶴野龍一郎,まえだこうへい
- 出版社/メーカー: 翔泳社
- 発売日: 2010/07/08
- メディア: 大型本
- 購入: 5人 クリック: 227回
- この商品を含むブログ (15件) を見る
KVM -- Virtualisierung unter Linux. (German Edition)
- 作者: Michael Kofler
- 出版社/メーカー: ebooks.kofler
- 発売日: 2011/02/15
- メディア: Kindle版
- この商品を含むブログを見る
Apache2.2.xと2.4.xでのアクセス制限方法の違い
勉強のためZabbix3.0を入れたのですが、 Apache 2.4.xを使ったところアクセス制限の書き方が変わっていたのでメモしておきます。
2.2.xの時のエントリです。
Apache 2.4.6で試してみた
以下、試した時のバージョンです。
[root@localhost conf.d]# httpd -v Server version: Apache/2.4.6 (CentOS)
2.4.6だとこんな感じで書きます。
[root@localhost conf.d]# cat zabbix.conf # # Zabbix monitoring system php web frontend # #Alias /zabbix /usr/share/zabbix Alias /zabbix /var/www/html/zabbix <Directory "/var/www/html/zabbix"> Options FollowSymLinks AllowOverride None Require all granted php_value max_execution_time 300 php_value memory_limit 128M php_value post_max_size 16M php_value upload_max_filesize 2M php_value max_input_time 300 # php_value date.timezone Europe/Riga </Directory>
Apache2.2.xと2.4.xでの書き方の違い
全てアクセス許可
Apache2.2.x
Allow from all
Apache2.4.x
Require all granted
全てアクセス拒否
Apache2.2.x
deny from all
Apache2.4.x
Require all denied
特定の接続元を指定する
Apache2.2.x
allow from
deny from
Apache2.4.x
require ip
require not ip
エラーログ
間違えたら/var/log/zabbix/zabbix_server.logに出力が出ると思いますので確認してください。
[Sat Nov 14 23:28:06.550481 2015] [authz_core:error] [pid 15736] [client 192.168.1.100:59410] AH01630: client denied by server configuration: /usr/share/zabbix
[Sat Nov 14 23:52:48.367884 2015] [core:error] [pid 12992] (13)Permission denied: [client 192.168.1.100:53259] AH00035: access to /zabbix/index.php denied (filesystem path '/var/www/html/zabbix/index.php') because search permissions are missing on a component of the path
シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。
サーバ構築の実際がわかる Apache[実践]運用/管理 (Software Design plus)
- 作者: 鶴長鎮一
- 出版社/メーカー: 技術評論社
- 発売日: 2012/03/23
- メディア: 単行本(ソフトカバー)
- 購入: 6人 クリック: 109回
- この商品を含むブログ (14件) を見る
改訂版 Zabbix統合監視実践入門 ~障害通知、傾向分析、可視化による省力運用 (Software Design plus)
- 作者: 寺島広大
- 出版社/メーカー: 技術評論社
- 発売日: 2014/06/17
- メディア: 大型本
- この商品を含むブログ (1件) を見る
RedshiftへSQLWorkbench/Jで接続してみる
redshiftへSQLWorkbench/Jで接続する方法です。
手順は以下の通りです。ポイントは 接続方法に合わせてDriverを選択するという点です。 2015年11月8日時点でpostgresqlの接続もサポートされているようです。
- SQLWorkbench/Jをインストール
- Redshift用のDriverをインストール
- JDBCのURLを確認する
- 各種パラメータを設定し接続
SQLWorkbench/Jをインストール
公式HPのDownloadsから使用するOSに合わせてStable releaseからダウンロードしインストールします。 MAC OSXの場合、通常のアプリケーションと大差はないので割愛します。
Redshift用のDriverをインストール
今回はpostgresqlでははなくJDBCで接続します。Driverはこの記事を記載した時点で以下の通りです。
JDBC 4.1 互換ドライバ: https://s3.amazonaws.com/redshift-downloads/drivers/RedshiftJDBC41-1.1.7.1007.jar このドライバーのクラス名は com.amazon.redshift.jdbc41.Driver です。
SQLWorkbench/Jの左下のManage Driverから上記のDriverをimportします。class名はcom.amazon.redshift.jdbc41.Driver
です。
RedshiftのJDBC URLを確認
Amazon Management Consoleで以下から確認します。
Clusters- > YourClusterName
-> Configuration -> Cluster Database Properties -> JDBC URL
RedshiftへSQLWorkbench/Jを使用して接続
先ほどimportしたRedshift用のDriverとJDBC URL、Master Username/Passwordを設定します。
接続が問題なければ以下の通りクエリを投げることが可能です。
実際にクエリを投げてみるのは各自データ内容に合わせてお好みで。 勉強用だと無料枠を超えてしまうのが痛いですね。
シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。
Amazon Redshift Getting Started Guide (English Edition)
- 作者: Amazon Web Services
- 発売日: 2013/02/21
- メディア: Kindle版
- この商品を含むブログを見る
データベース徹底攻略 (WEB+DB PRESS plus)
- 作者: 松信嘉範,羽生章洋,ミック,奥野幹也,松下雅和,桑野章弘,青木峰郎,ひろせまさあき,小林篤,島田慶樹,WEB+DB PRESS編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2014/03/15
- メディア: 大型本
- この商品を含むブログ (5件) を見る
データ分析が支えるスマホゲーム開発 ~ユーザー動向から見えてくるアプリケーションの姿~
- 作者: 越智修司,高田敦史,丸山弘詩
- 出版社/メーカー: インプレスジャパン
- 発売日: 2014/04/11
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (3件) を見る
tail -fの結果にタイムスタンプをつける方法のメモ
メモです。アプリからログに書き込まれたタイミングを確認するなど、出力にタイムスタンプをつけたい時などに使います。
tail -f error.log | while read line; do printf "$(date -u '+%F %T%z')\t$line\n"; done
出力は以下のような感じです。
2015-11-06 23:14:38+0000 Nov 6 23:14:12 komei login[3783]: USER_PROCESS: 3783 ttys000
シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。
- 作者: 大角祐介
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2015/06/06
- メディア: 大型本
- この商品を含むブログ (4件) を見る
Linuxシステム[実践]入門 (Software Design plus)
- 作者: 沓名亮典
- 出版社/メーカー: 技術評論社
- 発売日: 2013/07/03
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (13件) を見る